Azure PipelinesのPipeline deployment approvalsとは?変更点と確認すべき設定を解説

Azure Pipelinesで「本番環境へのデプロイ前に承認を挟みたい」「特定のブランチ以外からのリリースを止めたい」「深夜のメンテナンス時間までデプロイを待たせたい」と考えているなら、見るべき機能が Pipeline deployment approvals、つまり Azure Pipelines の 承認とチェック です。

結論から言うと、Pipeline deployment approvals は、デプロイステージを実行してよいかどうかを YAMLだけではなく、環境・サービス接続・変数グループなどのリソース側で制御する仕組み です。特に本番環境や共有リソースを使うパイプラインでは、承認者、タイムアウト、ブランチ制御、営業時間、排他ロックを見直すことで、誤デプロイや無断リリースのリスクを大きく下げられます。Microsoft Learnでは、承認やチェックは YAML ファイルではなく Azure Pipelines の Web インターフェイスからリソース管理者が管理する仕組みとして説明されています。(Microsoft Learn)

2026年5月8日に更新された Azure DevOps の .NET client libraries 公式情報では、Microsoft.Azure.Pipelines.Policy.Client が pipeline approvals、checks、authorization の public REST APIs へのアクセスを提供することも示されています。手動承認だけでなく、承認状況の取得や運用監査、自動化との連携を検討する開発者・管理者にとっても確認しておきたいポイントです。(Microsoft Learn)

目次

Pipeline deployment approvalsとは

Pipeline deployment approvals は、Azure Pipelines のステージが実行される前に、承認や条件チェックを行うための機能です。

たとえば、次のような制御ができます。

  • 本番環境へのデプロイ前に、責任者の承認を必須にする
  • mainrelease ブランチ以外からのデプロイを防ぐ
  • 営業時間外やメンテナンス時間帯だけデプロイを許可する
  • Azure Monitor のアラートが出ている場合は次のステージへ進ませない
  • 複数のパイプラインが同じ環境へ同時にデプロイしないようにする

重要なのは、承認とチェックが パイプライン作成者ではなく、リソース所有者の管理下に置かれる 点です。Microsoft Learnでは、環境、サービス接続、エージェントプール、変数グループ、セキュリティで保護されたファイルなど、パイプラインが依存するリソースに対してチェックを定義できると説明されています。(Microsoft Learn)

つまり、アプリ開発者が YAML を変更しても、本番環境に設定された承認チェックを勝手に回避することはできません。これは、開発スピードとガバナンスを両立するうえで大きな意味があります。

何が変わるのか:YAML中心ではなくリソース中心でデプロイを止める

Pipeline deployment approvals のポイントは、「パイプライン内に承認処理を書く」ことではありません。むしろ、守るべき環境やサービス接続の側に、承認・条件・制限を設定する ことです。

これにより、同じ本番環境を複数のパイプラインが使っている場合でも、環境側に承認チェックを設定すれば、すべての対象パイプラインに共通ルールを適用しやすくなります。

観点従来ありがちな運用Pipeline deployment approvalsで目指す運用
承認の場所YAML、手順書、個別パイプラインに分散環境やサービス接続などのリソース側で一元管理
承認者個人名で固定しがち役割に応じたユーザーまたはグループで管理
本番反映のタイミング承認されたらすぐ実行承認の延期や営業時間チェックで実行時間も制御
ブランチ制御レビュー運用に依存Branch controlで許可ブランチを明示
同時デプロイ担当者が手動調整Exclusive lockで排他制御
自動化・監査UI確認が中心REST APIやクライアントライブラリ連携も検討可能

実務上の変更点は、YAMLの書き方そのものよりも、誰が、どのリソースに、どのチェックを設定するか を整理し直すことです。

対象になるリソースと影響範囲

承認とチェックは、すべてのステージに無条件で効くわけではありません。ステージが使用するリソースに対してチェックが設定されている場合、そのリソースを消費する前に評価されます。

Microsoft Learnでは、チェックを構成できるリソースとして、環境、サービス接続、リポジトリ、変数グループ、セキュリティで保護されたファイル、エージェントプールが挙げられています。また、ステージで使われるすべてのリソースのチェックが満たされるまで、Azure Pipelines はステージの実行前に一時停止します。(Microsoft Learn)

リソース主な確認ポイント影響を受ける例
Environment本番・検証・ステージング環境の承認、履歴、権限Production へのデプロイ前に承認を要求
Service connectionAzure サブスクリプションや外部サービスへの接続制御本番用 Azure Resource Manager 接続の利用前に承認
Repositoryブランチやテンプレート利用の制御許可されたブランチ以外のリリースを防止
Variable group機密値や環境変数の利用制御本番DB接続文字列を含む変数グループを保護
Secure files証明書やキーファイルの利用制御署名証明書を使う前に承認を要求
Agent pool特定のビルド・デプロイ実行基盤の利用制御本番デプロイ用のセルフホストエージェントを制限

特に注意したいのは サービス接続を変数で指定できない 点です。Microsoft Learnでも、service connections cannot be specified by variable と明記されています。サービス接続を環境ごとに切り替える設計をしている場合は、YAMLテンプレートやステージ分割で明示的に参照する設計へ見直す必要があります。(Microsoft Learn)

承認とチェックの実行順序

Azure Pipelines の承認とチェックには実行順序があります。公式情報では、静的チェック、事前承認、動的チェック、事後承認、排他ロックの順に評価されると説明されています。(Microsoft Learn)

実行順種類主な用途
1静的チェックBranch control、Required template、Evaluate artifact
2事前チェック承認デプロイ前の人による承認
3動的チェックAzure Function、REST API、Business Hours、Azure Monitor alerts など
4事後チェック承認デプロイ後の確認や次工程への承認
5Exclusive lock同時デプロイの排他制御

この順序を理解していないと、承認者に通知が届くタイミングや、外部チェックが繰り返し実行されるタイミングを誤解しやすくなります。

たとえば、パフォーマンスチェックやセキュリティスキャンが通った後にだけ人間の承認を求めたい場合は、承認の位置付けを慎重に設計する必要があります。単に「承認者を設定する」だけでは、現場が期待するリリースフローにならないことがあります。

主なチェックの種類と使い分け

Pipeline deployment approvals では、単なる手動承認だけでなく、さまざまなチェックを組み合わせられます。重要なのは、すべてを入れることではなく、リスクに応じて必要なものを選ぶことです。

チェック使うべき場面実務上の注意点
Approvals本番・準本番へのデプロイ前に責任者確認が必要な場合承認者、自己承認の可否、タイムアウトを明確にする
Deferred approvals承認は日中に行い、実行は夜間にしたい場合承認時刻と実行可能時刻を混同しない
Branch controlmainrelease など、許可ブランチのみデプロイしたい場合ブランチ名は refs/heads/<branch name> の形式で指定する
Required template共通のデプロイテンプレート利用を強制したい場合サービス接続など重要リソースで有効
Evaluate artifactコンテナーイメージに対してポリシー評価したい場合公式情報ではコンテナーイメージ成果物が対象とされている
Business Hoursメンテナンス時間帯だけデプロイしたい場合他チェックで遅延すると翌日の再評価になる可能性がある
Invoke Azure Function独自ロジックでデプロイ可否を判定したい場合短時間で応答するHTTPトリガーとして設計する
Invoke REST API外部承認、セキュリティスキャン、変更管理システムと連携したい場合タイムアウトと評価間隔を運用に合わせる
Query Azure Monitor Alertsカナリアリリースや段階的ロールアウトで監視結果を使いたい場合アラートルールの範囲と評価タイミングを確認する
Exclusive lock同じ環境への同時デプロイを防ぎたい場合既定の runLatestsequential の違いを理解する

Branch controlでは、許可されたブランチからビルドされているか、保護が有効かを確認できます。複数のリソースがリンクされている場合は、それらのソースも検証対象になります。ブランチ名は完全修飾形式である refs/heads/<branch name> が必要です。(Microsoft Learn)

管理者が確認すべき設定

管理者は、まず「どのリソースを保護すべきか」を決める必要があります。多くの組織では、本番環境だけでなく、本番用のサービス接続、変数グループ、セキュアファイルも保護対象になります。

承認者と自己承認の設定

承認チェックでは、ユーザーまたはグループを承認者として追加し、必要に応じて承認者向けの指示、自己承認の許可・制限、タイムアウトを設定します。指定したタイムアウト内に承認が完了しない場合、ステージはスキップとして扱われます。(Microsoft Learn)

実務では、次のように決めておくと運用が安定します。

設定項目推奨される考え方
承認者個人ではなく、運用責任を持つ少人数グループを基本にする
自己承認本番環境では原則として制限する
指示文「何を確認してから承認するか」を具体的に書く
タイムアウト業務時間、夜間対応、休日対応を考慮して決める
グループ承認グループ内の1人が承認すれば進むため、メンバー範囲を絞る

見落としやすいのは、承認を確認できるユーザーの一覧が、承認とチェックの実行開始時点で固定される点です。チェック開始後に承認者グループを変更しても、その実行中の承認要求には反映されません。(Microsoft Learn)

権限とリソース所有者の整理

Environmentを使う場合、Creator、Administrator、User、Reader のロールを整理しておく必要があります。公式情報では、Environment の Creator、Administrator、User は approvals and checks を管理できますが、Reader は管理できないと説明されています。(Microsoft Learn)

本番環境では、少なくとも次の分離を意識してください。

  • YAMLを編集する開発者
  • 本番環境を管理する運用担当者
  • サービス接続を管理するクラウド管理者
  • 承認を行うリリース責任者

この分離が曖昧だと、承認チェックを設定しても「誰でも環境設定を変えられる」「承認者が自分のデプロイを承認できる」といった抜け道が残ります。

バイパスと無効化の扱い

緊急修正では、チェックをバイパスしたくなる場面があります。Azure Pipelinesでは、チェックが定義されているリソースの管理者権限がある場合にのみ、承認やBusiness Hours、Azure Function、REST APIチェックをバイパスできます。バイパスした場合は、誰がバイパスしたかがチェックパネルに表示されます。(Microsoft Learn)

ただし、バイパスは日常運用ではなく、例外運用として扱うべきです。次のルールを事前に決めておくと、監査時にも説明しやすくなります。

項目決めておく内容
使用条件障害対応、重大なセキュリティ修正などに限定
実行権限本番環境の管理者に限定
記録チケット番号、理由、実施者、影響範囲を残す
事後確認通常チェックを通した再デプロイやレビューを行う

一方、チェックの無効化は主にデバッグ用途です。一時的に無効化したまま戻し忘れると、保護しているつもりの環境が無防備になります。無効化した場合は、復旧確認までを作業手順に含めてください。

開発者が確認すべきYAMLと実装上の注意点

開発者側で重要なのは、承認チェックを設定したリソースを、ステージが正しく消費しているかどうかです。チェックは、ステージ条件が満たされ、かつ対象リソースがステージで使われることで評価されます。定義したチェックが開始されない場合は、リソースにチェックを追加した後の実行であること、そしてそのステージが対象リソースを使用していることを確認する必要があります。(Microsoft Learn)

たとえば、Environment に承認チェックを設定した場合は、デプロイジョブでその Environment を参照します。

stages:
- stage: Deploy_Prod
  displayName: Deploy to production
  condition: succeeded()
  jobs:
  - deployment: DeployWeb
    displayName: Deploy web app
    environment: production
    strategy:
      runOnce:
        deploy:
          steps:
          - script: echo "Deploy to production"

この例では、production Environment に承認チェックが設定されていれば、Deploy_Prod ステージの実行前にチェックが評価されます。

conditionとapprovalは役割が違う

YAMLの condition は、ステージやジョブを実行対象にするかどうかを決める条件です。一方、approvalやcheckは、対象リソースを使ってよいかどうかを判断する仕組みです。

つまり、次のように考えると整理しやすくなります。

機能管理する人主な役割
YAMLの conditionパイプライン作成者成功時だけ実行、特定ブランチだけ実行などの制御
Approvals and checksリソース所有者・管理者環境やサービス接続の利用可否を制御
ManualValidationタスクパイプライン作成者パイプライン内に手動確認ステップを置く
Classic release approvalsClassic release pipelineの管理者Classic release pipelineのステージ承認

Classic release pipelineでは、各ステージの開始前または終了後に手動承認を設定できます。指定された承認者が承認、拒否、再割り当てを行うまでデプロイが一時停止されます。YAML pipelines の Environment ベースの承認とは設定場所や考え方が異なるため、移行時には混同しないようにしましょう。(Microsoft Learn)

排他ロックで同時デプロイを防ぐ

本番環境でよくある事故の一つが、複数のパイプライン実行が同時に同じ環境へデプロイすることです。Exclusive lockを使うと、保護されたリソースを使うステージを1つずつ進められます。

公式情報では、lockBehavior には runLatestsequential の2つがあり、指定がない場合は runLatest が既定値として使われると説明されています。runLatest は最新の実行のみがロックを取得し、sequential はすべての実行が順番にロックを取得します。(Microsoft Learn)

stages:
- stage: Deploy_Prod
  lockBehavior: sequential
  jobs:
  - deployment: DeployWeb
    environment: production
    strategy:
      runOnce:
        deploy:
          steps:
          - script: echo "Deploy sequentially"

使い分けの目安は次のとおりです。

設定向いているケース注意点
runLatest古いデプロイ要求を進める意味がないWebアプリ更新先にキューに入った実行が期待通り進まない場合がある
sequentialすべての変更を順番に反映する必要があるDB更新や段階的移行キューが詰まりやすいため、不要な実行の整理が必要

本番環境では、どちらが正しいかはシステム特性によって変わります。単純なWebアプリなら runLatest が適することもありますが、マイグレーションやデータ更新を伴う場合は sequential のほうが安全な場合があります。

REST API・クライアントライブラリ連携でできること

2026年5月8日更新の Azure DevOps .NET client libraries 公式情報では、Microsoft.Azure.Pipelines.Policy.Client が pipeline approvals、checks、authorization の public REST APIs へのアクセスを提供するとされています。(Microsoft Learn)

これにより、組織によっては次のような連携を検討できます。

  • 承認待ちのパイプラインを一覧化してダッシュボードに表示する
  • 承認・拒否・バイパスの履歴を監査レポートに集約する
  • 変更管理システムやチケット番号とデプロイ承認をひも付ける
  • 外部サービスからチェック結果を取得し、デプロイ可否の判断に使う

ただし、API連携は「承認を楽にする」ためだけに使うと危険です。特に本番環境では、誰が、何を根拠に、どの実行を承認したのかを追跡できる設計にしてください。

よくある失敗と対策

Pipeline deployment approvals は強力ですが、設定場所や評価タイミングを誤ると「承認が効かない」「ステージが進まない」といった問題が起こります。

失敗しやすいケース主な原因対策
承認を設定したのにステージが止まらないステージが対象リソースを使っていないdeployment jobでEnvironmentを参照しているか確認
承認者を変更したのに反映されないチェック開始時点で承認者リストが固定される実行中のランには反映されない前提で再実行を検討
ブランチチェックで失敗するブランチ名が完全修飾形式でないrefs/heads/main のように指定する
予定時間にデプロイされないBusiness Hours以外のチェックで待機している承認、外部チェック、タイムアウトをまとめて確認
古い実行がデプロイされないExclusive lockの既定が runLatest順番にすべて反映したい場合は sequential を指定
チェックが開始されないステージ条件が満たされていない、またはリソースが未使用condition とリソース参照を確認
本番サービス接続を変数で切り替えようとして失敗サービス接続は変数指定できないステージやテンプレートで明示的にサービス接続を分ける
グループ承認で想定外の人が承認するグループ内の1人の承認で進む承認グループのメンバーを最小限にする

特に「承認を設定したのに効かない」場合は、YAML側だけを見ても原因が分からないことがあります。Azure Pipelines のリソース側、Environment側、Service connection側の Approvals and checks を確認してください。

移行・展開時の進め方

既存のパイプラインに Pipeline deployment approvals を導入する場合は、いきなり本番環境に適用するのではなく、段階的に進めるのが安全です。

手順作業内容確認ポイント
1保護対象を洗い出す本番Environment、Azureサービス接続、変数グループ、セキュアファイル
2現在の承認方法を確認するClassic release、ManualValidation、手順書、チャット承認の有無
3リソース所有者を決める誰がApprovals and checksを管理するか
4検証環境で承認チェックを設定する承認者、自己承認、タイムアウト、通知
5Branch controlやBusiness Hoursを追加するデプロイ可能なブランチと時間帯
6テスト実行するステージが正しく一時停止・再開・失敗するか
7本番環境へ展開するバイパス手順と監査ログの確認も含める
8運用手順を更新する承認時に見る項目、緊急時対応、責任範囲

移行時におすすめなのは、まず本番Environmentに手動承認だけを設定し、その後にBranch control、Business Hours、Exclusive lockを追加していく方法です。最初からすべてのチェックを入れると、どの設定が原因で止まっているのか分かりにくくなります。

本番環境での設計例

本番環境向けの実用的な構成例は次のようになります。

レイヤー設定例目的
Environmentproduction にApprovalsを設定本番反映前に責任者が確認
Branch controlrefs/heads/main のみ許可未レビュー・未統合ブランチからの反映を防ぐ
Required template共通デプロイテンプレートを必須化独自YAMLによる抜け道を減らす
Business Hoursメンテナンス時間帯のみ許可利用者影響の少ない時間に反映
Azure Monitor alerts重要アラートがない場合のみ続行障害中の追加デプロイを防ぐ
Exclusive locksequential または runLatest同時デプロイを防止
REST API連携承認状態や履歴を集約監査・運用レポートに利用

この構成にすると、開発者は通常どおりパイプラインを実行できますが、本番環境に入る直前で、組織が定めた承認・安全確認・時間制限が適用されます。

まず確認すべきチェックリスト

Azure Pipelines の Pipeline deployment approvals を使っている、またはこれから導入する場合は、次の項目を確認してください。

  • 本番EnvironmentにApprovals and checksが設定されているか
  • 本番用Service connectionにも必要なチェックがあるか
  • 承認者が個人退職や異動の影響を受けない構成になっているか
  • 自己承認を許可すべきか制限すべきか決めているか
  • タイムアウトが短すぎてステージが意図せずスキップされないか
  • Branch controlのブランチ名が refs/heads/main 形式になっているか
  • Business Hoursと承認の順序が実際の運用に合っているか
  • Exclusive lockの runLatestsequential を使い分けているか
  • チェックのバイパス権限が必要最小限に絞られているか
  • API連携や監査レポートで承認履歴を追えるか

Pipeline deployment approvals は、単に「承認ボタンを追加する機能」ではありません。Azure Pipelines におけるデプロイ統制を、パイプライン作成者のYAMLから、リソース所有者の管理へ移すための仕組みです。

まずは本番Environmentと本番用Service connectionを開き、Approvals and checks の設定を確認してください。承認者、タイムアウト、ブランチ制御、営業時間、排他ロックを見直すだけでも、誤デプロイや無許可リリースを防ぐ効果があります。そのうえで、REST APIやクライアントライブラリ連携を使い、承認状況の可視化と監査まで整えると、Azure Pipelines のデプロイ運用はより安全で管理しやすくなります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次