翻譯:瘋狂的技術宅

原文:medium.com/dailyjs/how-

我們在工作中經常會進行很多繁瑣的任務:更新配置文件,複製和粘貼文件,更新 Jira 標籤等。

慢慢的花在這些任務上的時間會越來越多。我在 2016 年時在一家網路遊戲公司工作時,類似的工作很多。當時我在為遊戲構建可配置的模板,這項工作也許很有價值,但是由於要重新設置皮膚,我必須把大約70%的時間消耗在製作那些遊戲的副本、模板和部署等工作上。

什麼是Reskin?

公司 reskin 的定義是使用相同的遊戲機制,屏幕和元素的定位,但改變了視覺美學,??如顏色和資源等(譯者吐槽:實際上就是給遊戲換皮。。。)。所以像 「石頭剪子布」 這樣的簡單遊戲,我們將創建一個有如下基本資源的模板。

但是當我們創建一個 reskin 時,會使用不同的資源,同時還要保證遊戲仍然可以正常工作。如果你玩過像「糖果傳奇」 或「瘋狂的小鳥」這樣的遊戲,會發現它們通常會在萬聖節,聖誕節或復活節發布很多風格類似的遊戲。從商業角度來看這很有意義。現在......讓我們回到實施過程。我們的每個遊戲都共享相同的 JavaScript 文件,並載入到具有不同內容和資源路徑的 JSON 文件中。結果會怎樣?

實際上我和其他開發人員的時間表上已經積壓了大量的任務,我的第一個想法就是「很多工作都可以進行自動化處理」。每當我創建一個新遊戲時,都必須執行以下步驟:

  1. 對模板存儲庫進行 git pull 以確保它們是最新的;
  2. 從主分支創建一個新分支 —— 由 Jira 故障單 ID 進行標識;
  3. 製作我需要構建的模板的副本;
  4. 運行 gulp;
  5. 更新 config.json 文件中的內容。這將涉及資源路徑,標題以及服務請求的數據;
  6. 在本地進行構建,並檢查與相關人員的 word 文檔匹配的內容。 是的,我知道;
  7. 與設計師確認他們是否對外觀滿意;
  8. 合併到主分支並繼續處理下一個分支;
  9. 更新 Jira 標籤的狀態,並為相關人員發表評論;
  10. 清盤並重複。

相比較而言,這比單純的開發工作多了許多管理上的事情。我以前曾經接觸過 Bash 腳本,並通過它來創建一些腳本以減少工作量。其中一個腳本更新了模板並創建了一個新分支,另一個腳本則執行提交並將項目合併到演示和生產環境。

通常手動設置項目需要三到十分鐘,部署可能需要五到十分鐘。但是根據遊戲的複雜程度,也可能需要十分鐘到半天。儘管腳本能有所幫助,但仍需要大量的時間用於更新內容或追查丟失的信息。

通過編寫代碼來縮短時間是遠遠不夠的。我們還需要思考優化工作流程的好方法,以便可以更多地去依賴腳本。比如將內容從 word 文檔中移出,並轉移到 Jira 標籤中,再將其分解為相關的自定義欄位。設計人員不是發送公共驅動器上資源所在位置的鏈接,而是去設置一個內容交付網路(CDN)存儲庫,其中包含對資源的暫存和發布到生產環境的 URL。

Jira API

這些事情可能需要一段時間才能實施,但我們的流程確實會隨著時間的推移而得到改善。我對我們的項目管理工具 Jira 的 API 進行了一些研究,並對正在處理的 Jira 標記做了一些請求,得到了大量有價值的數據,所以我決定將這些請求集成到了自己的 Bash 腳本中,以便能夠從 Jira 標記中讀到值,並在完成後發布評論和通知相關人員。

從 Bash 過渡到 Node

Bash 腳本很好,但如果有人在 Windows 機器上工作,它們就無法運行了。在做了一些挖掘之後,我決定用 JavaScript 將整個過程包裝成一個定製的構建工具。我給這個工具取名為Mason,它將會改變一切。

CLI

當你在終端中使用 Git 時(我假設你在這樣做),會發現它有一個非常友好的命令行界面。如果你拼寫錯誤或輸入錯誤的命令,它會友好地對其認為你想要輸入的內容提出建議。一個名為 commander的庫應能夠提供相同的功能,它是我使用的眾多庫之一。

請參考下面這個簡化的代碼示例。它正在對命令行界面(CLI)程序進行引導。

src/mason.js

使用 npm,你可以從 package.json 運行一個鏈接,它將會創建一個全局別名。

npm link

它將為我提供一個可以調用的命令,被稱為 mason。所以每當我在終端中調用 mason 時,它將運行 mason.js 腳本。所有任務都屬於一個名為 mason 的綜合命令,我每天都用它來構建遊戲,節省的時間真的是......令人難以置信。

你可以在下面看到:我將 Jira 標籤編號作為參數傳給命令。這將會使用 curl 去請求 Jira API ,並獲取更新遊戲所需的所有信息。然後它將繼續構建和部署項目。最後我會發表評論並標記相關人員和設計師,讓他們知道工作已經完成。

$ mason create GS-234
... calling Jira API
... OK! got values!
... creating a new branch from master called GS-234
... updating templates repository
... copying from template pick-from-three
... injecting values into config JSON
... building project
... deploying game
... Perfect! Here is the live link
http://www.fake-studio.com/game/fire-water-earth
... Posted comment Hey [~ben.smith], this has been released. Does the design look okay? [~jamie.lane] on Jira.

依靠這些我們就完成了關鍵的步驟!我對整個項目感到非常滿意。

歡迎關注公眾號:【前端先鋒】,後台回復」2「,免費獲取更多以上視頻課程。


推薦閱讀:
相关文章