跳至主要内容

[Deploy] Travis CI 筆記

keywords: deploy, publish, release, CI, 持續整合

Core Concepts for Beginners @ Travis CI Docs

當你執行 build 時,Travis CI 會複製一份 Github 專案到全新的虛擬環境上,接著執行一系列的任務(task)來打包和測試你的程式碼,如果有任何的任務失敗的話,該 build 過程會被視為 broken;如果沒有任務失敗,則該 build 過程會被視為 passed ,Travis CI 會將你的程式碼進行部署(deploy)。

  • phase:在 job 中一系列的執行步驟,舉例來說包含 install phase、script phase,和 deploy phase。
  • job:從複製專案到虛擬環境,並執行一系列 phases 的自動化歷程。如果 script phase 回傳的值不是 0 的話,job 則視為失敗。
  • build :一組一組的 jobs,舉例來說,一個 build 可能有兩個 jobs,分別測試不同版本的程式語言。當所有的 job 執行完成(finished)時,該 build 視為完成。
  • stage:多組不同的 jobs 同時執行。

Job 的生命週期(Life Cycle)

Travis CI 中的 job 主要由兩個部分組成:

  1. install: install any dependencies required
  2. script: run the build script

其中可介入的時間點分別為:

  1. OPTIONAL Install apt addons
  2. OPTIONAL Install cache components
  3. before_install
  4. install
  5. before_script
  6. script
  7. OPTIONAL before_cache (for cleaning up cache)
  8. after_success or after_failure
  9. OPTIONAL before_deploy
  10. OPTIONAL deploy
  11. OPTIONAL after_deploy
  12. after_script

加密金鑰(encryption keys)

加密金鑰

$ gem install travis
$ travis login --pro
$ travis encrypt SOMEVAR="secretvalue" --add -r OWNER/REPO

取得 public key

透過 travis 工具取得 public key

$ travis pubkey -r OWNER/PROJECT

在帳戶頁可以取得用來發送 API 的 Token:

# travis-ci.com API v3
curl -H "Authorization: token <TOKEN>" https://api.travis-ci.com/v3/repo/<OWNER>%2f<REPO>/key_pair/generated

# travis-ci.org API v3
curl -H "Authorization: token <TOKEN>" https://api.travis-ci.org/v3/repo/<OWNER>%2f<REPO>/key_pair/generated

其他

避免清除掉 build 好後 dist 資料夾內的檔案

Uploading Files and skip_cleanup @ Travis-CI Docs

在 Travis CI 中,預設會把 build 好的檔案給清除,可以在 deploy 的階段加上 skip_cleanup: false 的參數:

# .travis.yml
# ...
jobs:
include:
- stage: release
node_js: lts/*
script: npm run build
deploy:
provider: script
script: npx -p @semantic-release/changelog -p @semantic-release/git -p semantic-release semantic-release
skip_cleanup: true # 💡加上這句

⚠️ 現在雖然有提到 skip_cleanup 已經 deprecated 了,但這是在 deployment API v2 後,因此現在仍然要加上,參考 Skip_cleanup: true is now deprecated. How to go for gradle publish?