パイプラインの実行

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

この記事では、Azure Pipelines パイプラインの実行における一連のアクティビティについて説明します。 実行は、パイプラインの 1 つの実行を表します。 継続的インテグレーション (CI) パイプラインと継続的デリバリー (CD) パイプラインはどちらも実行で構成されます。 実行中、Azure Pipelines はパイプラインを処理し、 agents 1 つ以上の ジョブ、ステップ、タスクを処理

パイプラインの概要を示す図。

実行ごとに、Azure Pipelines:

  • パイプラインを処理します。
  • ジョブの実行を 1 つ以上のエージェントに要求します。
  • エージェントにジョブをハンドオフし、結果を収集します。

ジョブごとに、エージェントは次の手順を実行します。

  • ジョブの準備をします。
  • ジョブの各ステップを実行します。
  • レポートの結果。

ジョブは成功、失敗、取り消し、または完了しない可能性があります。 これらの結果を理解することは、問題のトラブルシューティングに役立ちます。

次のセクションでは、パイプラインの実行プロセスについて詳しく説明します。

パイプライン処理

YAML テンプレートの展開を示す図。

実行のパイプラインを処理するには、最初に Azure Pipelines を使用します。

  1. templatesを展開し、テンプレート式評価します
  2. stage レベルで依存関係を評価して、実行する最初のステージを選択します。

実行するステージごとに、Azure Pipelines が選択されます。

  1. 実行する 認証 のすべてのジョブ リソースを収集して検証します。
  2. ジョブ レベルで 依存関係を評価し 最初に実行するジョブを選択します。

Azure Pipelines は、実行対象として選択したジョブごとに次のアクティビティを実行します。

  1. YAML strategy: matrix または strategy: parallel multi-configurations を複数のランタイム ジョブに拡張します。
  2. 条件を評価して、ジョブを実行する資格があるかどうかを判断します。
  3. 対象となるジョブごとにエージェントを要求します。

ランタイム ジョブが完了すると、Azure Pipelines は実行対象の新しいジョブがあるかどうかを確認します。 同様に、ステージが完了すると、Azure Pipelines はステージがこれ以上存在するかどうかを確認します。

変数

処理順序を理解すると、 テンプレート パラメーターで特定の変数を使用できない理由が明確になります。 最初のテンプレート拡張ステップは、YAML ファイルのテキストでのみ動作します。 ランタイム変数は、その手順中にまだ存在しません。 その手順の後、テンプレート パラメーターは既に解決されています。

ステージの実行を開始する前にパイプラインによってリソースが承認されるため、 可変 を使用してサービス接続または環境名を解決することもできません。 ステージ レベルとジョブ レベルの変数はまだ使用できません。 変数グループ自体は承認の対象となるリソースであるため、リソースの承認を確認するときにデータを使用できません。

パイプライン レベルの変数は、 pipeline リソース定義に明示的に含まれている使用できます。 詳しくは、「定義済み変数としてのパイプライン リソース メタデータ」をご覧ください。

エージェント

Azure Pipelines は、ジョブを実行する必要がある場合、poolagent を要求します。 プロセスは、 Microsoft でホストされる自身がホストする エージェント プールでは動作が異なります。

Note

サーバー ジョブ は Azure Pipelines サーバー自体で実行されるため、プールを使用しません。

プールの選択を示す図。

並列ジョブ

まず、Azure Pipelines は、組織の parallel ジョブを確認します。 このサービスでは、すべてのエージェントで実行中のすべてのジョブが追加され、それが付与または購入された並列ジョブの数と比較されます。

使用可能な並列スロットがない場合、ジョブはスロットが解放されるまで待機する必要があります。 並列スロットが使用可能になると、ジョブは適切なエージェントの種類にルーティングされます。

Microsoft ホステッド エージェント

概念的には、Microsoft がホストするプールはマシンのグローバル プールの 1 つですが、物理的に多くの異なるプールが地域とオペレーティング システムの種類によって分割されます。 要求された YAML vmImage またはクラシック エディター プール名に基づいて、Azure Pipelines によってエージェントが選択されます。

Microsoft プール内のすべてのエージェントは、パイプラインを実行したことがない新しい新しい仮想マシン (VM) です。 ジョブが完了すると、エージェント VM は破棄されます。

セルフホステッド エージェント

並列スロットが使用可能になると、Azure Pipelines は、互換性のあるエージェントのセルフホステッド プールを調べます。 セルフホステッド エージェントは、 capabilitiesを提供します。これは、特定のソフトウェアがインストールされているか、設定が構成されていることを示します。 パイプラインには、ジョブの実行に必要な機能である要求があります。

Azure Pipelines で、パイプラインの要求に一致する機能を持つ無料エージェントが見つからない場合、ジョブは待機を続けます。 要求に一致する機能を持つエージェントがプール内に存在しない場合、ジョブは失敗します。

セルフホステッド エージェントは、通常、実行ごとに再利用されます。 セルフホステッド エージェントの場合、パイプライン ジョブには、キャッシュのウォームアップや、ローカル リポジトリで既に使用可能なほとんどのコミットなど、副作用が発生する可能性があります。

ジョブの準備

エージェントは、ジョブを受け入れると、次の準備作業を行います。

  1. ジョブの実行に必要なすべての タスク をダウンロードし、後で使用できるようにキャッシュします。
  2. 実行で使用されるソース コード、成果物、および出力を保持するディスク上の作業領域を作成します。

ステップ実行

エージェントは順番にステップを実行します。 ステップを開始する前に、前のすべてのステップを完了またはスキップする必要があります。

各タスクの実行を示す図。

手順は tasks によって実装されます。Node.js、PowerShell、またはその他のスクリプトを使用できます。 タスク システムは、入力と出力をバッキング スクリプトにルーティングします。 タスクには、システム パスの変更や新しい パイプ変数の作成などの一般的なサービスも用意されています。

各ステップは独自のプロセスで実行され、前の手順から環境を分離します。 このステップごとのプロセス モデルのため、環境変数はステップ間で保持されません。 ただし、タスクとスクリプトでは、 ログ コマンドと呼ばれるメカニズムを使用して エージェントと通信できます。 タスクまたはスクリプトがログ コマンドを標準出力に書き込むと、エージェントはコマンドが要求するアクションを実行します。

ログ コマンドを使用して、新しいパイプライン変数を作成できます。 パイプライン変数は、次の手順で環境変数に自動的に変換されます。 スクリプトでは、次のように値が myValue の新しい変数myVarを設定できます。

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 を使用して、プロジェクト内のパイプラインの実行を一覧表示し、特定の実行に関する詳細を表示し、パイプライン実行のタグを管理する方法を示します。

前提条件

パイプライン実行を一覧表示する

az pipelines run list コマンドを使用して、プロジェクト内のパイプライン実行を一覧表示します。

次のコマンドは、状態が completed で、結果が succeeded である最初の 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