次の方法で共有


タスクの種類と使用法

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

Azure Pipelines ジョブは、タスクまたはスクリプトである可能性があるステップで構成されます。 タスクは、アクションを実行するか、一連の入力を使用してパイプラインの自動化を定義する、事前にパッケージ化されたスクリプトまたはプロシージャです。 この記事では、パイプライン タスクとその使用方法について説明します。 スキーマ情報については、 steps.task の定義を参照してください。

Azure Pipelines には、基本的なビルドとデプロイのシナリオを可能にする多くの組み込みタスクが含まれています。 使用可能な組み込みの Azure Pipelines タスクの一覧については、 Azure Pipelines タスク リファレンスを参照してくださいVisual Studio Marketplace からタスクをインストールしたり、カスタム タスクを作成したりすることもできます。

既定では、ジョブ内のすべてのステップは、ホスト上でもジョブ コンテナーでも、同じコンテキストで順番に実行 されます。 必要に応じて、 ステップ ターゲット を使用して、個々のタスクのコンテキストを制御できます。 複数のエージェントで、またはエージェントを使用せずに一部のタスクを並列で実行するには、「 パイプラインでジョブを指定する」を参照してください。

タスク管理

タスクは、Azure DevOps 組織 レベルで使用およびインストールできます。 使用できるのは、組織に存在するタスクとタスクのバージョンのみです。

組み込みのタスク、Marketplace タスク、またはその両方は、[組織の設定]、[Pipelines]>、[タスクの制限] の下の [>設定] で無効にすることができます。 組み込みタスクと Marketplace タスクの両方を無効にした場合、 Azure DevOps の Node CLI を使用してインストールしたタスクのみを使用できます。

Marketplace タスクを無効にすると、パイプラインのセキュリティを向上させることができます。 ほとんどの状況では、組み込みタスクを無効にしないでください。 詳細については、「 使用可能なタスクの制御」を参照してください。

カスタム タスク

Visual Studio Marketplace には、Azure Pipelines タスク カタログを拡張するためにインストールできる拡張機能が多数用意されています。 カスタム タスクを作成することもできます。 詳細については、「 カスタム パイプライン タスク拡張機能の追加」を参照してください。

YAML パイプラインでは、タスクを名前で参照します。 カスタム タスク名が組み込みのタスク名と一致する場合、パイプラインでは組み込みタスクが使用されます。 このような状況を回避するには、タスクの作成時に割り当てた一意のタスク GUID を使用して、カスタム タスクを参照できます。 詳細については、「 task.json コンポーネントについて」を参照してください。

タスクのバージョン

タスクはバージョン管理されるため、パイプラインで使用するタスクのメジャー バージョンを指定する必要があります。 バージョンを指定すると、タスクの新しいバージョンがリリースされたときに問題が発生するのを防ぐことができます。

パイプラインは、1.2 から 1.3 などの新しいマイナー タスク バージョンを使用するように自動的に更新されます。 通常、マイナー タスクのバージョンは下位互換性がありますが、一部のシナリオでは、タスクが自動的に更新されたときに予期しないエラーが発生する可能性があります。

2.0 リリースなどの新しいメジャー タスク バージョンの場合、パイプラインは、パイプラインを編集して新しいメジャー バージョンに手動で変更するまで、指定したメジャー バージョンを引き続き使用します。 ビルド ログは、新しいメジャー バージョンが使用可能になったときにアラートを提供します。 組織に存在するタスク バージョンのみを使用できます。

YAML では、タスク名に @ を使用してメジャー バージョンを指定します。 たとえば、 PublishTestResults タスクのバージョン 2 を使用するには、 PublishTestResults@2を指定します。 @など、GoTool@0.3.1の後に完全なタスク バージョン番号を指定することで、使用するマイナー バージョンを指定できます。

タスク のオプション

YAML パイプラインの task 手順では、次のプロパティを使用できます。 詳細については、 steps.task の定義を参照してください。

プロパティ タイプ Description
task 文字列 最初のプロパティとして必要です。 実行するタスクの名前。
inputs 文字列 名前と値のペアを使用したタスクの入力。
condition 文字列 タスクを実行する条件。
continueOnError ブーリアン 障害が発生しても実行を続けるかどうか。
displayName 文字列 タスクの人間が判読できる名前。
enabled ブーリアン ジョブの実行時にこのタスクを実行するかどうか。
env 文字列 名前と値のペアを使用して、プロセス環境にマップする変数。
name 文字列 ステップの ID。
retryCountOnTaskFailure 文字列 タスクが失敗した場合の再試行回数。
target 文字列 このタスクを実行する環境。
timeoutInMinutes 文字列 タスクが自動的に取り消されるまでに実行できる最大時間。

条件

タスクは、タスクが完了した後にパイプライン ジョブを続行するかどうかを判断できません。 succeededfailedなどの終了状態のみを提供します。 その後、ダウンストリームのタスクとジョブは、その状態に基づいて condition を設定して、実行するかどうかを決定できます。

conditions プロパティは、このタスクを実行する条件を指定します。 既定では、ジョブ内の何も失敗せず、その直前のステップが完了した場合、ステップが実行されます。

以前の依存関係が失敗した場合や別の結果が得られた場合にのみ、実行するようにステップを設定することで、これらの既定値をオーバーライドまたはカスタマイズできます。 で構成されるカスタム条件を定義することもできます。

注意

条件は、同じエージェント プールを持つ以前のすべての直接依存関係と間接依存関係に適用されます。 異なるエージェント プール内のステージまたはジョブは同時に実行されます。

以前の依存関係の状態に基づく条件は次のとおりです。

  • 成功: 以前のすべての依存関係が成功した場合にのみ実行します。 この動作は、YAML に条件が設定されていない場合の既定値です。 この条件を適用するには、 condition: succeeded()を指定します。
  • 成功または失敗: 実行が取り消されない限り、以前の依存関係が失敗した場合でも実行します。 この条件を適用するには、 condition: succeededOrFailed()を指定します。
  • 常に: 実行が取り消された場合でも、以前の依存関係が失敗した場合でも実行します。 この条件を適用するには、 condition: always()を指定します。
  • 失敗: 以前の依存関係が失敗した場合にのみ実行されます。 この条件を適用するには、 condition: failed()を指定します。

次の YAML の例では、 PublishTestResults@2 は、前の手順が失敗した場合でも、 その成功したOrFailed 条件が原因で実行されます。

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'
- task: PublishTestResults@2
  inputs:
    testResultsFiles: "**/TEST-*.xml"
  condition: succeededOrFailed()

エラーが発生した場合に続行する

continueOnError プロパティは、失敗に関係なく、実行を継続して成功を報告するかどうかをタスクに指示します。 trueに設定した場合、このプロパティはタスクにfailed状態を無視して実行を続行するように指示します。 ダウンストリームのステップとジョブは、実行の決定を行うときにタスクの結果を success として扱います。

Enabled

既定では、ジョブが実行されるたびにタスクが実行されます。 タスクを無効にするには、 enabledfalse に設定できます。 タスクを一時的に無効にすると、テスト目的または特定のデプロイのプロセスからタスクを削除するのに役立ちます。

タスクの失敗時の再試行回数

retryCountOnTaskFailure プロパティは、失敗した場合にタスクを再試行する回数を指定します。 既定値は、再試行回数 0 回です。

  • 最大再試行回数は 10 回です。
  • 再試行が失敗するたびに、指数バックオフ戦略に従って再試行までの待機時間が長くなります。 最初の再試行は 1 秒後、2 回目は 4 秒後、10 回目の再試行は 100 秒後に行われます。
  • タスクを再試行してもべき等性は提供されません。 外部リソースの部分的な作成など、最初の試行の副作用により、再試行が失敗する可能性があります。
  • 再試行回数に関する情報はタスクで使用できません。
  • タスクの失敗により、タスクを再試行する前に失敗したことを示す警告がタスク ログに追加されます。
  • すべての再試行は、同じタスク ノードの一部として UI に表示されます。

注意

retryCountOnTaskFailure プロパティには、エージェント バージョン 2.194.0 以降が必要です。 Azure DevOps Server 2022 では、 エージェントレス タスクでは再試行はサポートされていません。 詳細については、「 Azure DevOps サービス更新プログラム 2021 年 11 月 16 日 - タスクの自動再試行Azure DevOps サービス更新プログラム 2025 年 6 月 14 日 - サーバー タスクの再試行」を参照してください。

目標

タスクは、エージェント ホストまたはコンテナーである実行コンテキストで実行されます。 タスクは、 targetを指定することで、そのコンテキストをオーバーライドできます。 使用可能なオプションは、エージェント ホストとパイプラインで定義されているすべてのコンテナーをターゲットに host 。 次の例では、 SampleTask@1 はホスト上で実行され、 AnotherTask@1 はコンテナーで実行されます。

resources:
  containers:
  - container: pycontainer
    image: python:3.11

steps:
- task: SampleTask@1
  target: host
- task: AnotherTask@1
  target: pycontainer

タイムアウト

タイムアウト期間は、タスクの実行が開始されたときに開始され、タスクがキューに登録されているか、エージェントを待機している時間は含まれません。

注意

パイプラインでは、タスク レベルのタイムアウトに加えて、ジョブ レベルのタイムアウトを指定できます。 タスクが完了する前にジョブ レベルのタイムアウト間隔が経過すると、タスクが長いタイムアウト間隔で構成されている場合でも、実行中のジョブは終了します。 詳細については、「Timeouts」を参照してください。

環境変数

環境変数を使用して、システムまたはユーザー定義の情報をタスク プロセスにマップできます。

YAML パイプライン タスクでは、環境変数を表す名前/値文字列を一覧表示する env プロパティを指定できます。

- task: AzureCLI@2
  env:
    ENV_VARIABLE_NAME: value
    ENV_VARIABLE_NAME2: value
  ...

環境変数は、 script 手順を使用するか、コマンド ライン、Bash、または PowerShell タスクでスクリプトを使用して設定できます。

次の例では、script環境変数に値を割り当て、値をエコーするENV_VARIABLE_NAMEステップを実行します。

- script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

上記のスクリプトは、機能的には、入力をscript タスクを実行する場合と同じです。 次の例では、 task 構文を使用します。

- task: Bash@3
  inputs:
    script: echo "This is " $ENV_VARIABLE_NAME
  env:
    ENV_VARIABLE_NAME: value
  displayName: 'echo environment variable'

ツール インストーラー タスクをビルドする

ビルド ツールのインストーラー タスクを使用すると、ビルド パイプラインで依存関係をインストールおよび制御できます。 ビルド ツールのインストーラー タスクを使用すると、次のことができます。

  • Microsoft がホストするエージェントを含め、ビルド用のツールまたはランタイムをインストールします。
  • Node.js など、依存関係の複数のバージョンに対してアプリまたはライブラリを検証する。

ツール インストーラー タスクの一覧については、「 ツール タスク」を参照してください。

例: 複数のバージョンの Node.js でアプリをテストして検証する

次の例では、複数のバージョンの Node.jsでアプリを実行して検証するビルド パイプラインを設定します。

プロジェクトのベース ディレクトリに次の内容を含む azure-pipelines.yml ファイルを作成します。

pool:
  vmImage: 'windows-latest'

jobs:
- job: NodeJS
  strategy:
    matrix:
      node14:
        nodeVersion: '14.x'
      node16:
        nodeVersion: '16.x'
    maxParallel: 2
  steps:
    - task: NodeTool@0
      displayName: 'Install Node.js $(nodeVersion)'
      inputs:
        versionSpec: '$(nodeVersion)'
        checkLatest: true

    - script: |
        echo Using Node version $(nodeVersion)
        node --version
      displayName: 'Verify Node Installation'

パイプラインを保存して実行します。 ジョブは、 nodeVersion 変数で指定した Node.js のバージョンごとに 1 つずつ、2 回実行されます。

Node.js ツール インストーラーでは、Node.js バージョンがまだエージェント上にない場合はダウンロードされます。 コマンド ライン スクリプトは、インストールされているバージョンをコマンド ラインに書き込みます。

ヘルプとサポート