Azure DevOps Services |Azure DevOps Server 2022 および Azure DevOps Server 2019
この記事では、Azure Pipelines パイプラインの実行における一連のアクティビティについて説明します。 実行は、パイプラインの 1 つの実行を表します。 継続的インテグレーション (CI) パイプラインと継続的デリバリー (CD) パイプラインはどちらも実行で構成されます。 実行中、Azure Pipelines はパイプラインを処理し、 agents 1 つ以上の ジョブ、ステップ、タスクを処理。
実行ごとに、Azure Pipelines:
- パイプラインを処理する
- ジョブの実行を 1 つ以上のエージェントに要求する
- エージェントに仕事を任せ、結果を集める
ジョブごとに、エージェントは次の手順を実行します。
- 仕事の準備をする
- ジョブ内の各ステップを実行します
- 結果を報告する
ジョブは成功する、失敗する、キャンセルされる、または完了しない場合があります。 これらの結果を理解することは、問題のトラブルシューティングに役立ちます。
次のセクションでは、パイプラインの実行プロセスについて詳しく説明します。
パイプライン処理
実行のパイプラインを処理するには、最初に Azure Pipelines を使用します。
実行するステージごとに、Azure Pipelines が選択されます。
Azure Pipelines は、実行対象として選択したジョブごとに次のアクティビティを実行します。
- YAML
strategy: matrix
またはstrategy: parallel
multi-configurations を複数のランタイム ジョブに拡張します。 - 条件を評価して、ジョブを実行する資格があるかどうかを判断します。
- 対象となるジョブごとにエージェントを要求します。
ランタイム ジョブが完了すると、Azure Pipelines は実行対象の新しいジョブがあるかどうかを確認します。 同様に、ステージが完了すると、Azure Pipelines はステージがこれ以上存在するかどうかを確認します。
変数
処理順序を理解すると、 テンプレート パラメーターで特定の変数を使用できない理由が明確になります。 最初のテンプレート拡張ステップは、YAML ファイルのテキストでのみ動作します。 ランタイム変数は、その手順中にまだ存在しません。 その手順の後、テンプレート パラメーターは既に解決されています。
パイプラインはステージの実行を開始する前にリソースを承認するため、 変数 を使用してサービス接続または環境名を解決することはできません。 ステージ レベルとジョブ レベルの変数はまだ使用できません。 変数グループ自体は承認の対象となるリソースであるため、リソースの承認を確認するときにデータを使用できません。
パイプライン レベルの変数は、 pipeline リソース定義に明示的に含まれている使用できます。 詳しくは、「定義済み変数としてのパイプライン リソース メタデータ」をご覧ください。
エージェント
Azure Pipelines は、ジョブを実行するためにプールからエージェントを要求します。 このプロセスは、 Microsoft がホストする エージェント プールと セルフホステッド エージェント プールで異なります。
注
サーバー ジョブ は Azure Pipelines サーバー自体で実行されるため、プールを使用しません。
並列ジョブ
まず、Azure Pipelines は、組織の parallel ジョブを確認します。 このサービスでは、すべてのエージェントで実行中のすべてのジョブが追加され、それが付与または購入された並列ジョブの数と比較されます。
使用可能な並列スロットがない場合、ジョブはスロットが解放されるまで待機する必要があります。 並列スロットが使用可能になると、ジョブは適切なエージェントの種類にルーティングされます。
Microsoft によってホストされるエージェント
Microsoft でホストされるプールは概念的には 1 つのグローバル なマシン プールですが、物理的には地理的およびオペレーティング システムの種類によって複数のプールに分割されます。 要求された YAML vmImage
またはクラシック エディター プール名に基づいて、Azure Pipelines によってエージェントが選択されます。
Microsoft プール内のすべてのエージェントは、パイプラインを実行したことがない新しい新しい仮想マシン (VM) です。 ジョブが完了すると、エージェント VM は破棄されます。
セルフホステッド エージェント
並列スロットが使用可能になると、Azure Pipelines は、互換性のあるエージェントのセルフホステッド プールを調べます。 セルフホステッド エージェントは、 capabilitiesを提供します。これは、特定のソフトウェアがインストールされているか、設定が構成されていることを示します。 パイプラインには、ジョブの実行に必要な機能である要求があります。
Azure Pipelines で、パイプラインの要求に一致する機能を持つ無料エージェントが見つからない場合、ジョブは待機を続けます。 要求に一致する機能を持つエージェントがプール内に存在しない場合、ジョブは失敗します。
セルフホステッド エージェントは、通常、実行ごとに再利用されます。 セルフホステッド エージェントの場合、パイプライン ジョブには、キャッシュのウォームアップや、ローカル リポジトリで既に使用可能なほとんどのコミットなど、副作用が発生する可能性があります。
ジョブの準備
エージェントは、ジョブを受け入れると、次の準備作業を行います。
- ジョブの実行に必要なすべての タスク をダウンロードし、後で使用できるようにキャッシュします。
- 実行で使用されるソース コード、成果物、および出力を保持するディスク上の作業領域を作成します。
ステップ実行
エージェントはステップを順番に実行します。 ステップを開始する前に、前のすべてのステップを完了するかスキップする必要があります。
手順は tasks によって実装されます。Node.js、PowerShell、またはその他のスクリプトを使用できます。 タスク システムは、入力と出力をバッキング スクリプトにルーティングします。 タスクには、システム パスの変更や新しい パイプ変数の作成などの一般的なサービスも用意されています。
各ステップは独自のプロセスで実行され、前の手順から環境を分離します。 このステップごとのプロセス モデルのため、環境変数はステップ間で保持されません。 ただし、タスクとスクリプトでは、 ログ コマンドと呼ばれるメカニズムを使用して エージェントと通信できます。 タスクまたはスクリプトがログ コマンドを標準出力に書き込むと、エージェントはコマンドが要求するアクションを実行します。
ログ コマンドを使用して、新しいパイプライン変数を作成できます。 パイプライン変数は、次の手順で環境変数に自動的に変換されます。 スクリプトでは、次のように値が myVar
の新しい変数myValue
を設定できます。
echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"
結果レポートと収集
各ステップでは、警告、エラー、および失敗を報告できます。 この手順では、タスクを問題の成功とマークしてパイプラインの概要ページでエラーと警告を報告するか、タスクを失敗としてマークしてエラーを報告します。
##vso
コマンドを使用してエラーを明示的に報告するか、スクリプトを 0 以外の終了コードで終了すると、ステップは失敗します。
手順を実行すると、エージェントは常に出力行を Azure Pipelines に送信するため、コンソールのライブ フィードを確認できます。 各ステップの最後に、ステップからの出力全体がログ ファイルとしてアップロードされます。 パイプラインが完了したら、ログをダウンロードできます。
エージェントは、 artifacts および テスト結果をアップロードすることもできます。これは、パイプラインの完了後にも使用できます。
状態と条件
エージェントは、各ステップの成功または失敗を追跡します。 問題が発生してステップが成功または失敗すると、ジョブの状態が更新されます。 ジョブは、各ステップからの最悪の結果を常に反映します。 ステップが失敗した場合、ジョブも失敗します。
エージェントは、ステップを実行する前に、そのステップの 条件 ステップを実行する必要があるかどうかを確認します。 既定では、ステップはジョブの状態が成功したか、問題が発生した場合にのみ実行されますが、他の条件を設定することもできます。
多くのジョブには、他に何が起こっても実行する必要があるクリーンアップ手順があるため、 always()
の条件を指定できます。 クリーンアップまたはその他の手順は、取り消し時にのみ実行するように設定することもできます。
クリーンアップ手順が正常に完了しても、ジョブの失敗を防ぐわけではありません。 失敗した後、ジョブを成功に戻すことはできません。
タイムアウトと切断
各ジョブにはタイムアウトがあります。 指定した時間内にジョブが完了しない場合、サーバーはジョブを取り消します。 サーバーはエージェントに停止の通知を試み、ジョブを取り消し済みとしてマークします。 エージェント側では、キャンセルとは、残りのすべての手順を取り消し、残りの結果をアップロードすることを意味します。
ジョブには、取り消し処理を完了するためのキャンセル タイムアウトと呼ばれる猶予期間があります。 取り消し時にも実行するステップをマークすることもできます。 ジョブのタイムアウトと取り消しタイムアウトの後、エージェントが作業の停止を報告しない場合、サーバーはジョブをエラーとしてマークします。
エージェントのホスト マシンの電源が切れた場合、または電源が切れている場合、またはネットワーク障害が発生した場合、エージェント マシンはサーバーへの応答を停止できます。 これらの条件を検出するために、エージェントは 1 分に 1 回ハートビート メッセージを送信して、まだ動作中であることをサーバーに通知します。
サーバーが 5 分間連続してハートビートを受信しない場合は、エージェントが戻ってこないことを前提としています。 ジョブは失敗としてマークされ、パイプラインを再試行する必要があることをユーザーに知らせます。
Azure DevOps CLI を使用して実行を管理する
Azure DevOps CLI で az パイプラインの実行 を使用して、パイプラインの実行を管理できます。 開始するには、「Azure DevOps CLI の概要」を参照してください。 完全なコマンド リファレンスについては、 Azure DevOps CLI コマンド リファレンスを参照してください。
次の例では、Azure DevOps CLI を使用して、プロジェクト内のパイプラインの実行を一覧表示し、特定の実行に関する詳細を表示し、パイプライン実行のタグを管理する方法を示します。
前提条件
- Azure DevOps CLI の概要 説明に従って Azure DevOps CLI 拡張機能がインストールされた Azure CLI 。
az login
を使用して Azure にサインインします。 -
az devops configure --defaults organization=<YourOrganizationURL>
を使用して設定される既定の組織。
パイプライン実行を一覧表示する
az pipelines run list コマンドを使用して、プロジェクト内のパイプライン実行を一覧表示します。
このコマンドは、状態が完了で、結果が成功である最初の 3 つのパイプライン実行を一覧表示し、結果をテーブル形式で表示します。
az pipelines runs list --status completed --result succeeded --top 3 --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- ------
125 20200124.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 18:56:10.067588 manual
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
122 20200123.1 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:48:05.574742 manual
パイプラインの実行の詳細を表示する
az pipelines runs show コマンドを使用して、プロジェクト内のパイプライン実行の詳細を表示します。
このコマンドは、ID 123 で実行されるパイプラインの詳細を表示し、結果をテーブル形式で表示し、Web ブラウザーを開いて Azure Pipelines のビルド結果ページに移動します。
az pipelines runs show --id 122 --open --output table
Run ID Number Status Result Pipeline ID Pipeline Name Source Branch Queued Time Reason
-------- ---------- --------- --------- ------------- -------------------------- --------------- -------------------------- --------
123 20200123.2 completed succeeded 12 Githubname.pipelines-java master 2020-01-23 11:55:56.633450 manual
パイプライン実行にタグを追加する
az pipelines runs tag add コマンドを使用して、プロジェクト内のパイプライン実行にタグを追加します。
次のコマンドにより、タグ YAML は ID 123 で実行されるパイプラインに追加され、結果が JSON 形式で返されます。
az pipelines runs tag add --run-id 123 --tags YAML --output json
[
"YAML"
]
パイプラインの実行タグを一覧表示する
az pipelines runs tag list コマンドを使用して、プロジェクト内のパイプライン実行のタグを一覧表示します。 次のコマンドにより、ID 123 で実行されるパイプラインのタグが一覧表示され、結果がテーブル形式で返されます。
az pipelines runs tag list --run-id 123 --output table
Tags
------
YAML
パイプライン実行からタグを削除する
az pipelines runs tag delete コマンドを使用して、プロジェクトの パイプライン実行からタグを削除 します。 このコマンドは、ID 123 のパイプライン実行から YAML タグを削除します。
az pipelines runs tag delete --run-id 123 --tag YAML