流水線任務jobs:流水線任務 job 可以為多個步驟 steps 的組合(多個步驟共用工作空間,共同完成指定任務), 或一個組件 component 的調用(調用組件執行指定任務,組件任務支援重試、跳過等更多操作)。
樣本
以下為一個任務添加多個步驟的配置樣本:
stages: build_stage: name: 構建階段 jobs: build_job: name: 構建任務 runsOn: public/cn-beijing steps: # steps 配置任務步驟 build_step: step: JavaBuild name: java構建 with: ...... upload_step: step: ArtifactUpload name: 構建物上傳 with: ......stages: build_stage: name: 構建階段 jobs: build_job: name: 構建任務 runsOn: group: public/ap-southeast-1 container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest steps: # steps 配置任務步驟 setup_java_step: name: "安裝Java環境" step: SetupJava with: jdkVersion: "1.8" mavenVersion: "3.5.2" command_step: name: "執行命令" step: Command with: run: | mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip upload_artifact_step: name: "構建物上傳" step: ArtifactUpload with: uploadType: flowPublic artifact: "Artifacts_${PIPELINE_ID}" filePath: - target/以下為一個任務實現一個組件的配置樣本:
stages: build_stage: name: 構建階段 jobs: deploy_job: name: 主機群組部署任務 component: VMDeploy # component 配置工作群組件 with: artifact: $[stages.build_stage.build_job.upload_artifact_step.artifacts.default] ......
詳細說明
stages.<stage_id>.jobs
流水線任務,流水線任務可以為多個步驟 steps 的組合, 或一個組件 component 的實現。
stages.<stage_id>.jobs.<job_id>
必填。流水線任務 id,唯一標識流水線任務。job_id 只能包含字母、數字和 _ ,且必須以字母開頭。長度限制 64 個字元。
stages.<stage_id>.jobs.<job_id>.name
如不填寫,則使用job_id的值。長度限制 64 個字元。流水線任務的展示名稱。
stages.<stage_id>.jobs.<job_id>.runsOn
非必填。流水線任務運行環境,可以使用雲效提供的公用 K8s 叢集環境,也可以使用私人主機構建叢集。支援 指定容器環境 和 預設VM環境。
指定容器環境:在構建機器上啟動指定容器,在單容器環境進行構建。文法樣本如下:
jobs: my_job: name: 我的工作 runsOn: group: public/ap-southeast-1 // 指定容器環境目前僅支援雲效公用構建叢集 container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest // 公網可直接存取的 public 鏡像地址,雲效系統官方鏡像參考:https://atomgit.com/flow-steps/system_images/blob/main/README_INTL.md構建叢集
yaml 標識
說明
雲效新加坡構建叢集
group: public/ap-southeast-1
雲效提供的新加坡公用 K8s 叢集(未指定 runsOn 時的預設值)
私人構建叢集
group: private/<私人構建叢集ID>
通過私人構建叢集添加的企業私人主機叢集
預設VM環境:直接在構建叢集的宿主機或虛擬機器上執行步驟。樣本如下:
jobs: my_job: name: 我的工作 runsOn: group: private/<私人構建叢集ID> // 僅支援私人構建叢集,指定私人構建叢集 labels: windows, amd64 // 指定作業系統、架構調度;不填時,則隨機調度到叢集中的某台機器 vm: true // 指定 VM 構建環境目前私人構建叢集支援接入 Linux、Windows、macOS 機器,各作業系統支援架構和構建環境如下:
作業系統
架構
labels
說明
Linux
amd64
linux,amd64
支援 預設環境 和 預設VM環境
Linux
arm64
linux,arm64
僅支援 預設VM環境,需要指定
vm: trueWindows
amd64
windows,amd64
僅支援 預設VM環境,需要指定
vm: trueWindows
arm64
windows,arm64
僅支援 預設VM環境,需要指定
vm: truemacOS
amd64
darwin,amd64
僅支援 預設VM環境,需要指定
vm: truemacOS
arm64
darwin,arm64
僅支援 預設VM環境,需要指定
vm: true
stages.<stage_id>.jobs.<job_id>.runsOn.instanceType
非必填,構建環境規格。雲效會根據任務中配置的步驟自動分配 DEFAULT 預設規格,預設規格詳見協助文檔:https://www.alibabacloud.com/help/doc-detail/201868.html 。如有需要,您也可以指定構建環境規格,規格可選:SMALL_1C2G、MEDIUM_2C4G、LARGE_4C8G、XLARGE_8C16G。
如:
jobs:
my_job:
name: 我的工作
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
instanceType: LARGE_4C8G # 指定構建環境規格stages.<stage_id>.jobs.<job_id>.timeoutMinutes
非必填,預設任務運行逾時時間為 240 分鐘,支援設定範圍 1~1440 分鐘
如:
jobs:
my_job:
name: 我的工作
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
timeoutMinutes: 60 # 任務開始運行後,60分鐘逾時結束stages.<stage_id>.jobs.<job_id>.debugPolicy 和 stages.<stage_id>.jobs.<job_id>.debugRetentionMinutes
非必填,填寫該值,則可以在任務結束之後保留任務執行環境,並登入到環境中進行調試。
只能和”指定容器環境“一起使用。
這兩個值需要一起填寫,或者都不填寫。
debugPolicy 的可選值:
onFailure:僅任務運行失敗時才保留運行環境,運行成功或僅紅線卡點不通過則不會保留環境
always:無論任務是否成功都保留構建環境
debugRetentionMinutes 是1-240之間的整數,表示保留的時間長度
如:
jobs:
my_job:
name: 我的工作
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
debugPolicy: always
debugRetentionMinutes: 5stages.<stage_id>.jobs.<job_id>.needs
非必填,預設一個階段內的所有任務並存執行。若任務間有依賴關係,可通過needs描述階段內的任務依賴關係。注意:
needs支援跨階段的任務之間相互依賴。請確保依賴後的任務之間,有明確的先後關係。切勿出現循環相依性情況,如: A 依賴 B,B 依賴 C,C 依賴 A。
填寫依賴任務的 <job_id>,如:
jobs:
test_job:
name: 測試工作
build_job:
name: 構建任務
needs: test_job
stages.<stage_id>.jobs.<job_id>.driven
非必填,預設為 auto 自動執行。通過driven設定任務的觸發方式,目前支援兩種方式:
auto:自動執行
manual:手動確認執行
如:
jobs:
my_job:
name: 我的工作
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
driven: manual #手動確認執行任務
stages.<stage_id>.jobs.<job_id>.condition
非必填,預設只有前序依賴任務全部成功後才執行本任務。通過condition判斷本任務是否滿足條件,若滿足條件執行本任務。通過填寫函數運算式如:
jobs:
my_job:
name: 我的工作
runsOn:
group: public/ap-southeast-1
container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest
condition: |
"${CI_COMMIT_REF_NAME}" == "master" # 運行分支為 master 時執行該任務支援關係操作符、邏輯操作符:
操作符 | 說明 | 樣本 | 樣本描述 |
== | 等於 | condition: "${CI_COMMIT_REF_NAME}" == "master" | 運行分支為 master 時執行 |
!= | 不等於 | condition: "${CI_COMMIT_REF_NAME}" != "master" | 運行分支不等於 master 時執行 |
&& | 與 | condition: "${CI_COMMIT_REF_NAME}" == "master" && succeed() | 運行分支為 master 且前序任務都為成功態時執行 |
|| | 或 | condition: "${CI_COMMIT_REF_NAME}" == "master" || "${CI_COMMIT_REF_NAME}" == "develop" | 運行分支為 master 或 develop 時執行 |
! | 非 | condition: succeed('job1') && !skipped('job1') | 指定 job1 為成功態且非跳過時執行 |
() | 邏輯分組 | condition: ("${CI_COMMIT_REF_NAME}" == "master" || "${CI_COMMIT_REF_NAME}" == "develop") && succeed() | 運行分支為 master 或 develop,且前序任務都為成功態時執行 |
提供一組內建函數,可用於運算式:
函數 | 說明 | 樣本 |
startsWith(searchString, searchValue) | 如果 searchString 以 searchValue 開頭,將返回 true | condition: startsWith('Hello world','He') |
endsWith(searchString, searchValue) | 如果 searchString 以 searchValue 結尾,將返回 true | condition: endsWith('Hello world','ld') |
contains(search, item) | 輸入 search 是一個數組,item 是數組中的一個元素,此函數將返回 true | condition: contains('["aa", "bb", "cc"]', 'aa') |
weekDay() | 此函數將返回一周中的某一天(Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday) | condition: weekDay()=="Thursday" |
timeIn(startTime, endTime) | 此函數判斷目前時間是否在 startTime 和 endTime 之間 | condition: timeIn("20:00:00", "22:00:00") |
說明:函數參數可以填寫存在的變數,例如設定了流水線變數 TEST_VAR=["aa", "bb", "cc"],可以在函數中用${}引用該變數:
jobs:
job_1:
name: 1
condition: contains('${TEST_VAR}', 'aa')可以通過任務狀態函數,擷取前序依賴任務的執行狀態,函數入參為前序依賴任務的 <job_id>。
函數 | 說明 | 樣本 |
always() | 預設返回 true | condition: always() |
succeed() | 所有前序任務「已成功」或者「已跳過」返回 true | condition: succeed('job_id_1','job_id_2') |
failed() | 存在一個前序任務「已失敗」或者「已取消」返回 true | condition: failed('job_id_1','job_id_2') |
skipped() | 存在一個前序任務「已跳過」返回 true | condition: skipped('job_id_1','job_id_2') |
注意:任務狀態函數,若入參不填則為前序所有任務。如 succeed() 要求前序依賴任務全部成功才返回 true。 任務狀態函數,入參必須為前序任務的 <job_id>。若填寫了無依賴關係的 <job_id>,則無法正常執行。樣本:
jobs:
job_1:
name: 任務1
job_2:
name: 任務2
job_3:
name: 任務3
needs:
- job_1
- job_2
condition: succeed(job_1) || succeed(job_2) # job1 執行成功或 job2 執行成功,才執行job3stages.<stage_id>.jobs.<job_id>.sourceOption
非必填,預設下載流水線中配置的所有流水線源檔案。當流水線配置多個代碼源時,可以選擇任務節點是否下載源檔案,或者下載指定源檔案,通過填寫<source_id>指定您要下載的源檔案。
使用情境 | 說明 | 樣本 |
下載所有源檔案 | 不填寫 sourceOption | 不填寫 |
不下載源檔案 | 填寫 sourceOption,內容為空白 | sourceOption: [] |
下載指定源檔案 | 填寫 sourceOption及<source_id> | sourceOption: [repo_1,repo_2] |
stages.<stage_id>.jobs.<job_id>.steps
流水線任務可為多個步驟 steps 的組合,多個步驟共用工作空間,共同完成指定任務。
詳細請查看流水線步驟 steps。
stages.<stage_id>.jobs.<job_id>.component
流水線任務可調用一個組件 component 執行指定任務,組件任務支援重試、跳過等更多操作。
詳細請查看流水線組件 component。
stages.<stage_id>.jobs.<job_id>.with
當流水線任務為一個組件 component 調用時,通過with填寫組件所需的執行參數。樣本:
jobs:
deploy_job:
name: 主機群組部署任務
component: VMDeploy # 指定組件
with: # 填寫組件的參數
artifact: $[stages.build_stage.build_job.upload_step.artifacts.default]
machineGroup: <YOUR-MACHINE-GROUP-ID>
......
詳細請查看流水線組件 component。
stages.<stage_id>.jobs.<job_id>.plugins
非必填。流水線任務訊息通知可以通過配置 plugins 實現DingTalk、郵件、企業微信、飛書、Webhook等渠道的訊息通知。
詳細請查看流水線外掛程式 plugins。