パイプラインジョブは、複数のステップで構成され、ワークスペースを共有して特定のタスクを完了します。パイプラインジョブは、コンポーネントを呼び出して特定のタスクを実行することもできます。コンポーネントタスクは、リトライやスキップなどの操作をサポートします。
例
次の例は、タスクに複数のステップを追加するための構成を示しています:
stages: build_stage: name: Build stage jobs: build_job: name: Build task runsOn: public/cn-beijing steps: # steps を使用してタスクステップを構成します build_step: step: JavaBuild name: Java build with: ...... upload_step: step: ArtifactUpload name: Upload build output with: ......stages: build_stage: name: Build stage jobs: build_job: name: Build task 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: "Set up Java environment" step: SetupJava with: jdkVersion: "1.8" mavenVersion: "3.5.2" command_step: name: "Run command" step: Command with: run: | mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip upload_artifact_step: name: "Upload build output" step: ArtifactUpload with: uploadType: flowPublic artifact: "Artifacts_${PIPELINE_ID}" filePath: - target/次の例は、タスクでコンポーネントを実装するための構成を示しています:
stages: build_stage: name: Build stage jobs: deploy_job: name: Host group deployment task component: VMDeploy # component を使用してタスクを構成します with: artifact: $[stages.build_stage.build_job.upload_artifact_step.artifacts.default] ......
詳細説明
stages.<stage_id>.jobs
パイプラインジョブを定義します。パイプラインジョブは、複数のステップまたはコンポーネントの呼び出しで構成できます。
stages.<stage_id>.jobs.<job_id>
必須。パイプラインジョブの一意の ID。job_id には、文字、数字、アンダースコア (_) のみを含めることができ、文字で始まる必要があります。ID の長さは最大 64 文字です。
stages.<stage_id>.jobs.<job_id>.name
パイプラインジョブの表示名。このパラメーターを指定しない場合、job_id の値が使用されます。名前の長さは最大 64 文字です。
stages.<stage_id>.jobs.<job_id>.runsOn
任意。パイプラインジョブが実行される環境。Apsara DevOps が提供するパブリック Kubernetes (K8s) クラスター環境またはプライベートホストビルドクラスターを使用できます。サポートされている環境には、指定コンテナー環境とデフォルト VM 環境が含まれます。
指定コンテナー環境: ビルドマシンで指定されたコンテナーを起動し、単一コンテナー環境でビルドを実行します。次の例は構文を示しています:
jobs: my_job: name: My task runsOn: group: public/ap-southeast-1 // 指定コンテナー環境は現在、Apsara DevOps パブリックビルドクラスターのみをサポートしています。 container: build-steps-public-registry.ap-southeast-1.cr.aliyuncs.com/build-steps/alinux3:latest // インターネットからアクセスできるパブリックイメージアドレス。公式 Apsara DevOps システムイメージの詳細については、https://atomgit.com/flow-steps/system_images/blob/main/README_INTL.md をご参照ください。ビルドクラスター
YAML 識別子
説明
Apsara DevOps シンガポールビルドクラスター
group: public/ap-southeast-1
Apsara DevOps がシンガポールで提供するパブリック K8s クラスター。これは runsOn が指定されていない場合のデフォルトクラスターです。
プライベートビルドクラスター
group: private/<private_build_cluster_ID>
プライベートビルドクラスターを介してエンタープライズに追加されるプライベートホストクラスター。
デフォルト VM 環境: ビルドクラスターのホストまたは VM 上で直接ステップを実行します。以下に例を示します:
jobs: my_job: name: My task runsOn: group: private/<private_build_cluster_ID> // プライベートビルドクラスターのみがサポートされています。プライベートビルドクラスターを指定します。 labels: windows, amd64 // スケジューリング用のオペレーティングシステムとアーキテクチャを指定します。これを指定しない場合、タスクはクラスター内のマシンにランダムにスケジュールされます。 vm: true // VM ビルド環境を指定します。プライベートビルドクラスターは、Linux、Windows、および macOS マシンをサポートします。次の表に、各オペレーティングシステムでサポートされているアーキテクチャとビルド環境を示します。
オペレーティングシステム
アーキテクチャ
labels
説明
Linux
amd64
linux,amd64
デフォルト環境とデフォルト VM 環境をサポートします。
Linux
arm64
linux,arm64
デフォルト VM 環境のみをサポートします。
vm: trueを設定する必要があります。Windows
amd64
windows,amd64
デフォルト VM 環境のみをサポートします。
vm: trueを設定する必要があります。Windows
arm64
windows,arm64
デフォルト VM 環境のみをサポートします。
vm: trueを設定する必要があります。macOS
amd64
darwin,amd64
デフォルト VM 環境のみをサポートします。
vm: trueを設定する必要があります。macOS
arm64
darwin,arm64
デフォルト VM 環境のみをサポートします。
vm: trueを設定する必要があります。
stages.<stage_id>.jobs.<job_id>.runsOn.instanceType
任意。ビルド環境の仕様。Apsara DevOps は、ジョブで構成されたステップに基づいて DEFAULT 仕様を自動的に割り当てます。デフォルト仕様の詳細については、https://www.alibabacloud.com/help/doc-detail/201868.html のドキュメントをご参照ください。ビルド環境の仕様を指定することもできます。有効な値は SMALL_1C2G、MEDIUM_2C4G、LARGE_4C8G、および XLARGE_8C16G です。
例:
jobs:
my_job:
name: My task
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 から 1,440 分までの値に設定できます。
例:
jobs:
my_job:
name: My task
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: My task
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: Test job
build_job:
name: Build job
needs: test_job
stages.<stage_id>.jobs.<job_id>.driven
任意。デフォルト値は auto で、ジョブが自動的に実行されることを意味します。driven を使用して、ジョブのトリガーメソッドを設定できます。次のメソッドがサポートされています:
auto: ジョブは自動的に実行されます。
manual: ジョブを実行する前に手動で確認する必要があります。
例:
jobs:
my_job:
name: My task
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: My task
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 でない場合に実行されます。 |
&& | And | condition: "${CI_COMMIT_REF_NAME}" == "master" && succeed() | ブランチが master で、先行するすべてのジョブが成功した場合に実行されます。 |
|| | Or | condition: "${CI_COMMIT_REF_NAME}" == "master" || "${CI_COMMIT_REF_NAME}" == "develop" | ブランチが master または develop の場合に実行されます。 |
! | Not | 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 # 1
condition: contains('${TEST_VAR}', 'aa') # 'aa' が '${TEST_VAR}' に含まれている場合タスクステータス関数を使用して、先行する依存ジョブの実行ステータスを取得できます。これらの関数の入力パラメーターは、先行する依存ジョブの <job_id> です。
関数 | 説明 | 例 |
always() | デフォルトで true を返します。 | condition: always() |
succeed() | 先行するすべてのジョブのステータスが「成功」または「スキップ」の場合に true を返します。 | condition: succeed('job_id_1','job_id_2') |
failed() | 先行するジョブの少なくとも 1 つのステータスが「失敗」または「キャンセル」の場合に true を返します。 | condition: failed('job_id_1','job_id_2') |
skipped() | 先行するジョブの少なくとも 1 つのステータスが「スキップ」の場合に true を返します。 | condition: skipped('job_id_1','job_id_2') |
注: タスクステータス関数に入力パラメーターを指定しない場合、関数は先行するすべてのジョブに適用されます。たとえば、succeed() は、先行するすべての依存ジョブが成功した場合にのみ true を返します。タスクステータス関数の入力パラメーターは、先行するジョブの <job_id> である必要があります。依存関係のないジョブの <job_id> を指定した場合、関数は期待どおりに実行されません。以下に例を示します:
jobs:
job_1:
name: Job 1
job_2:
name: Job 2
job_3:
name: Job 3
needs:
- job_1
- job_2
condition: succeed(job_1) || succeed(job_2) # ジョブ 1 またはジョブ 2 が成功した場合にジョブ 3 が実行されます。stages.<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
パイプラインジョブは、複数のステップで構成できます。これらのステップは、ワークスペースを共有して特定のタスクを完了します。
詳細については、「パイプラインステップ」をご参照ください。
stages.<stage_id>.jobs.<job_id>.component
パイプラインジョブは、コンポーネントを呼び出して特定のタスクを実行できます。コンポーネントタスクは、リトライやスキップなどの操作をサポートします。
詳細については、「パイプラインコンポーネント」をご参照ください。
stages.<stage_id>.jobs.<job_id>.with
パイプラインジョブがコンポーネントを呼び出すときに、with を使用してコンポーネントに必要な実行時パラメーターを指定します。以下に例を示します:
jobs:
deploy_job:
name: Host group deployment task
component: VMDeploy # コンポーネントを指定します。
with: # コンポーネントのパラメーターを指定します。
artifact: $[stages.build_stage.build_job.upload_step.artifacts.default]
machineGroup: <YOUR-MACHINE-GROUP-ID>
......
詳細については、「パイプラインコンポーネント」をご参照ください。
stages.<stage_id>.jobs.<job_id>.plugins
任意。プラグインを構成して、DingTalk、メール、WeCom、Lark、Webhook などのチャンネルを介してパイプラインジョブ通知を送信できます。
詳細については、「パイプラインプラグイン」をご参照ください。