[GitLab 系列 第二篇] 讓腳本幫你完成例行性工作 GitLab CI/CD,自動產生安裝檔 Electron-Builder 為例

前面幾個章節簡單介紹 GitLab CI 的功能後,接下來我們來談談實務開發上如何進階應用。

Electron 是這幾年相當夯的跨平台應用程式開發的開源專案,工程師透過 Javascript 、HTML5、CSS 等就可以完成 Windows、Linux、macOS 桌面應用程式開發。
這樣的程式語言結構也意味著最苦惱的自適應使用者介面開發可以很有效率的被解決。

我們這邊就長話短說,直接將問題聚焦在這個使用情境上:
我希望每次代碼從其他分支合併到 master 分支時,觸發一個 CI 事件。這個事件可以將整個專案打包成安裝檔,並且上傳雲端,讓我不需要花費額外的時間跑這個指令。
考量到Electron 專案特性,我希望上傳的安裝檔案的空間大小偏大,為避免專案佔用太多儲存空間,請幫我每九十天後,自動清除該份安裝檔。

我們試著分析需求,聚焦在幾個關鍵任務上:

  • CI 事件只有在master分支才會被觸發
  • 觸發的任務是將整個專案打包成一個可安裝檔。Electron 可以透過 Electron-package/ Electron-builder 這2個套件達到這個功能
  • 指令執行的結果會產生一個可安裝檔,以 Windows 為例,這應該是一個exe、msi 副檔名結尾的檔案,並且需要作為 Pip Line 執行結束後將生成檔案轉成可下載的超連結
  • 可安裝檔案希望每九十天自動清除一次,避免造成專案佔用過多儲存空間

同樣我們直接上代碼,看看可以怎麼寫這份 Pip Line

stages:
  - build
cache:
  paths:
    - node_modules/

build:
  image: electronuserland/builder:wine
  stage: build
  script:
    - npm install -g electron-builder
    - npm install
    - npm cache clean -f
    - npm run dist-win
  artifacts:
    expire_in: 90 day
    paths:
      - ./build/*.exe
  only:
    - master

關鍵指令在幾個地方:

  • artifact 這是告訴GitLab CI 需要上傳哪一個檔案路徑與相關參數設定
  • expire_in 附件有效期限
  • path 附件檔案上傳路徑
  • only 描述這項任務是由哪一個分支觸發

基本上任務就這樣排除了
這可以適用多數 Electron APP,但也有例外,我們就留待後續整理 …

發佈留言