Azure Pipelines の依存関係(dependsOn)を色々といじくって、挙動を確認します。
基本的に、依存関係(dependsOn)は明示してあげるのが良さそうです。
前提
- YAMLパイプラインを対象とします。
- 2024/5時点の確認結果となります。
まとめ
項目 | dependsOn未指定 | dependsOnを明示的に指定 | dependOnを空にする |
---|---|---|---|
ステージ(stages) | YAMLの記載順序で実行される | dependsOnに指定したステージの実行終了を待つ | バラバラに実行される |
ジョブ(jobs) | バラバラに実行される | dependsOnに指定したジョブの実行終了を待つ | バラバラに実行される |
ステップ(steps) | YAMLの記載順序で実行される ※dependsOnは指定できない |
N/A ※dependsOnは指定できない |
N/A ※dependsOnは指定できない |
ステージ(stages)
何も指定しなかった場合
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1"; sleep 1; exit $(( RANDOM % 2))
- stage: Stage_2
jobs:
- job: Job_2
steps:
- bash: echo "step 2-1"; sleep 1; exit $(( RANDOM % 2))
- stage: Stage_3
jobs:
- job: Job_3
steps:
- bash: echo "step 3-1"; sleep 1; exit $(( RANDOM % 2))
- stage: Stage_4
jobs:
- job: Job_4
steps:
- bash: echo "step 4-1"; sleep 1; exit $(( RANDOM % 2))
- 記載されている順序で実行される。
- 前のステージ内のジョブがエラー終了となった場合、後続のステージは実行されない。
- エラーとなったジョブを再実行し、正常終了した場合、後続のステージも実行される。
依存関係を空にした場合
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1"; sleep 1; exit 0
- stage: Stage_2
dependsOn: []
jobs:
- job: Job_2
steps:
- bash: echo "step 2-1"; sleep 1; exit 0
- stage: Stage_3
dependsOn: []
jobs:
- job: Job_3
steps:
- bash: echo "step 3-1"; sleep 1; exit 0
- stage: Stage_4
dependsOn: []
jobs:
- job: Job_4
steps:
- bash: echo "step 4-1"; sleep 1; exit 0
- 実行順序は不定。
- いずれかのステージ内のジョブがエラー終了となった場合でも、他のステージは実行される。
依存関係を明示した場合
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1"; sleep 1; exit 0
- stage: Stage_2
dependsOn:
- Stage_1
jobs:
- job: Job_2
steps:
- bash: echo "step 2-1"; sleep 1; exit 0
- stage: Stage_3
dependsOn:
- Stage_1
jobs:
- job: Job_3
steps:
- bash: echo "step 3-1"; sleep 1; exit 0
- stage: Stage_4
dependsOn:
- Stage_2
- Stage_3
jobs:
- job: Job_4
steps:
- bash: echo "step 4-1"; sleep 1; exit 0
-
依存関係(dpendsOnに指定されたステージ)の実行後に実行される。
-
前のステージ内のジョブがエラー終了となった場合、後続のステージは実行されない。
(例: Stage_1がエラーとなった場合、Stage_3および4は実行されない。) -
前のステージ内のジョブがエラー終了となった場合、後続のステージは実行されない。
ジョブ(jobs)
何も指定しなかった場合
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_2
steps:
- bash: echo "step 1-2-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_3
steps:
- bash: echo "step 1-3-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_4
steps:
- bash: echo "step 1-4-1"; sleep 1; exit $(( RANDOM % 2))
- 実行順序は不定。
- いずれかのジョブがエラー終了となった場合でも、他のジョブは実行される。
依存関係を空にした場合
未指定時と同じ。
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_2
dependsOn: []
steps:
- bash: echo "step 1-2-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_3
dependsOn: []
steps:
- bash: echo "step 1-3-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_4
dependsOn: []
steps:
- bash: echo "step 1-4-1"; sleep 1; exit $(( RANDOM % 2))
依存関係を明示した場合
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_2
dependsOn:
- Job_1
steps:
- bash: echo "step 1-2-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_3
dependsOn:
- Job_1
steps:
- bash: echo "step 1-3-1"; sleep 1; exit $(( RANDOM % 2))
- job: Job_4
dependsOn:
- Job_2
- Job_3
steps:
- bash: echo "step 1-4-1"; sleep 1; exit $(( RANDOM % 2))
- 依存関係(dpendsOnに指定されたジョブ)の実行後に実行される。
- 前のジョブがエラー終了となった場合、後続のジョブは実行されない。
(例: Job_2がエラーとなった場合、Job_4は実行されない。)
ステップ(steps)
依存関係(dependOn)はない
YAML
azure-pipeline.yaml
trigger: none
pool:
vmImage: ubuntu-latest
stages:
- stage: Stage_1
jobs:
- job: Job_1
steps:
- bash: echo "step 1-1"; sleep 1; exit $(( RANDOM % 2))
- bash: echo "step 1-2"; sleep 1; exit $(( RANDOM % 2))
- bash: echo "step 1-3"; sleep 1; exit $(( RANDOM % 2))
- bash: echo "step 1-4"; sleep 1; exit $(( RANDOM % 2))
- 記載されている順序で実行される。
- 前のステップがエラー終了となった場合、後続のステップは実行されない。