Azure Pipeline で Maven のデプロイ承認

Azure Pipeline の承認 (approvals) 機能は、ステージ (stage) の開始前にしか使えないのと、 Apache Maven ではライフサイクル途中からの実行が原則としてできないことから、デプロイ処理だけ承認を必要とするパイプラインを構成するのがやや難しかったのですが、承認の有無でステージを分けて condition で選択する方法で実現してみました。

主要部分を抜粋すると以下のような形となります。ご参考まで。

stages:
  - stage: Default
    condition: >-
      not(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'))
    jobs:
      - job: Build
        pool:
          vmImage: ubuntu-latest
        steps:
          - task: Maven@3
  - stage: Release
    condition: >-
      startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')
    jobs:
      - job: BuildAndDeploy
        displayName: Build and deploy
        pool:
          vmImage: ubuntu-latest
        steps:
          - task: MavenAuthenticate@0
            inputs:
              mavenServiceConnections: ossrh
          - task: Maven@3
            inputs:
              goals: package gpg:sign nexus-staging:deploy