web-dev-qa-db-ja.com

Azure DevOps Pipelines(YAML)の手動承認でステージをスキップする

Terraformデプロイメントでは、3つのステージを持つAzure DevOpsパイプラインを使用します。

  1. 予定
  2. 適用(手動承認)
  3. テスト

適用段階では、手動の承認(チェック)がある環境で展開ジョブを使用します。計画段階で変更がない場合は、適用段階とテスト段階を「スキップ」します。したがって、適用ステージには次のyaml設定を使用しようとします。

  - stage: ApplyShared
    dependsOn: PlanShared
    jobs:
      - job: CheckSharedChanges
        steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: TerraformBuild
              downloadPath: $(System.DefaultWorkingDirectory)
          - bash: |
              # using a file for indicating changes in TF plan, since
              # you cannot pass variables between stages in Azure DevOps
              if [ -f ".shared-changes" ]; then
                  echo '##vso[task.setvariable variable=shared_changes]yes'
              fi
            name: Check
      - deployment: ApplyShared
        dependsOn: CheckSharedChanges
        # this condition seems to be ignored, if there is a manual
        # approval on the stage
        condition: eq(dependencies.CheckSharedChanges.outputs['Check.shared_env'], 'yes')
        displayName: 'Apply - shared'
        # we configured a manual approval (check) for this environment,
        # so the pipeline stops and asks for an operator to approve the deployment
        environment: 'infra-shared'

この MS開発者コミュニティの問題 によると、承認のあるステージの条件は承認前にチェックされないため、アプローチは機能しません。

私の質問は、これを実装する他の方法を知っていますか?

1
Michael Lihs

ステージは多くのジョブで構成でき、各ジョブは複数のリソースを消費できます。ステージの実行を開始する前に、そのステージで使用されるすべてのリソースに対するすべてのチェックが満たされている必要があります。 Azure Pipelinesは、各ステージの前にパイプラインの実行を一時停止し、保留中のすべてのチェックが完了するまで待機します。これが、シナリオで条件が機能しない理由です。詳細についてはこちらを確認してください:

https://docs.Microsoft.com/en-us/Azure/devops/pipelines/process/approvals?view=Azure-devops&tabs=check-pass

ロードマップにはすでに同様のアイデアがあります。次のリンクを追跡できます。

https://developercommunity.visualstudio.com/idea/697467/manually-triggered-stages-in-yaml-multi-stage-pipe.html

現在、 手動実行 を開始して、パイプラインのいくつかのステージをスキップすることを検討できます。

enter image description here

1