本文主要闡述如何運用條件運算式(condition)來控制某個作業(Job)的執行與否,並提供若干常見的樣本情境。
使用 condition 條件判斷文法,支援引用環境變數,根據條件運算式判斷是否要執行某個 Job。以下樣本中 job2 的 condition 條件引用代碼源分支系統內容變數 "${CI_COMMIT_REF_NAME}" == "develop",當運行分支為 develop時執行 job2,否則跳過。樣本 YAML 代碼及運行效果如下:

sources:
my_repo:
type: gitSample
name: 範例程式碼源
endpoint: https://atomgit.com/flow-example/spring-boot.git
branch: master
stages:
stage1:
name: 階段1
jobs:
command_job1:
name: job1
steps:
command_step:
name: 執行命令1
step: Command
with:
run: |
echo This is Job1
stage2:
name: 階段2
jobs:
command_job2:
name: job2
# 條件判斷:運行分支為 develop 時執行該任務
condition: |
"${CI_COMMIT_REF_NAME}" == "develop"
steps:
command_step:
name: 執行命令2
step: Command
with:
run: echo This is Job2
stage3:
name: 階段3
jobs:
command_job3:
name: job3
steps:
command_step:
name: 執行命令3
step: Command
with:
run: echo This is Job3
command_job4:
name: job4
needs: command_job3
steps:
command_step:
name: 執行命令4
step: Command
with:
run: echo This is Job4樣本情境1:前端應用未更新跳過構建,僅構建後端應用
某些前後端應用依賴情境,先構建前端應用產生靜態檔案、後端應用構建時引用前端靜態檔案。但並不是每個需求都涉及前端應用修改,可根據條件判斷前端應用是否需要構建。樣本中,使用流水線自訂環境變數 "${FRONT_APP_CHANGED}" == "true"作為任務 condition 條件,變數值為true時執行前端應用構建,否則跳過。


sources:
my_repo:
type: gitSample
name: 範例程式碼源
endpoint: https://atomgit.com/flow-example/spring-boot.git
branch: master
stages:
build_stage:
name: 構建
jobs:
front_build_job:
name: 前端應用構建
# 根據自訂環境變數判斷是否需要執行前端應用構建
condition: |
"${FRONT_APP_CHANGED}" == "true"
steps:
command_step:
name: 執行命令
step: Command
with:
run: |
echo This is front app build job...
backend_build_job:
name: 後端應用構建
needs: front_build_job
steps:
command_step:
name: 執行命令
step: Command
with:
run: |
echo This is backend app build job...
deploy_stage:
name: 部署
jobs:
deploy_job:
name: 部署任務
steps:
command_step:
name: 執行命令
step: Command
with:
run: echo This is deploy job...樣本情境2:非視窗期發布需要人工審核、視窗期跳過人工審核
生產發布情境,非發布視窗期需要人工審核,而視窗期可以跳過人工審核。

sources:
my_repo:
type: gitSample
name: 範例程式碼源
endpoint: https://atomgit.com/flow-example/spring-boot.git
branch: master
stages:
build_stage:
name: 構建
jobs:
build_job:
name: 構建任務
steps:
command_step:
name: 執行命令
step: Command
with:
run: |
echo This is build job...
approve_stage:
name: 審批
jobs:
approve_job:
name: 人工卡點
# 運行分支為 master 時執行審批任務,請替換為實際的審批判斷條件
condition: |
"${CI_COMMIT_REF_NAME}" == "master"
component: ManualValidate
with:
validatorType: users # 驗證者類型為組織成員,通過阿里雲 ID 確定審核人員
validateMethod: and # 驗證方式 and:會簽(須所有審批人同意)or:或簽(一名審批人同意或拒絕即可)
validators:
- 290591284908846966 #通過阿里雲控制台擷取阿里雲 ID
deploy_stage:
name: 部署
jobs:
deploy_job:
name: 部署任務
steps:
command_step:
name: 執行命令
step: Command
with:
run: echo This is deploy job...樣本情境3:一次構建按需部署到多套環境
研發團隊情境有多套測試環境,按需使用。可以根據指定環境名稱按需部署到測試環境。


sources:
my_repo:
type: gitSample
name: 範例程式碼源
endpoint: https://atomgit.com/flow-example/spring-boot.git
branch: master
stages:
build_stage:
name: 構建
jobs:
build_job:
name: 構建任務
steps:
command_step:
name: 執行命令
step: Command
with:
run: |
echo This is build job...
deploy_stage:
name: 部署測試環境
jobs:
deploy_job1:
name: 部署測試環境一套
# 根據指定環境名按需部署
condition: |
"${ENVNAME}" == "ENV1"
steps:
command_step:
name: 執行命令
step: Command
with:
run: echo This is deploy env 1...
deploy_job2:
name: 部署測試環境二套
# 根據指定環境名按需部署
condition: |
"${ENVNAME}" == "ENV2"
steps:
command_step:
name: 執行命令
step: Command
with:
run: echo This is deploy env 2...