次の方法で共有


ACR タスクの参照:YAML

ACR タスクでの複数ステップのタスク定義では、コンテナーのビルド、テスト、および修正プログラムの適用に重点を置いたコンテナーを中心としたコンピューティング プリミティブを提供します。 この記事では、複数ステップのタスクを定義する YAML ファイルのコマンド、パラメーター、プロパティ、および構文について説明します。

この記事には、ACR タスク用の複数ステップのタスクの YAML ファイルを作成するための参照が含まれています。 ACR タスクの概要については、ACR タスクの概要に関するページを参照してください。

acr-task.yaml ファイルの形式

ACR タスクでは、標準の YAML 構文で複数ステップのタスク宣言をサポートしています。 タスクのステップは YAML ファイルで定義します。 その後、ファイルを az acr run コマンドに渡すことでタスクを手動で実行できます。 または、このファイルを使用して、Git コミットやベース イメージの更新時、またはスケジュールに基づいて自動的にトリガーされる az acr task create でタスクを作成します。 この記事では、ステップを含むファイルとして acr-task.yaml を参照していますが、ACR タスクは、サポートされる拡張子を持つ任意の有効なファイル名をサポートしています。

最上位レベルの acr-task.yaml プリミティブは、タスク プロパティステップの種類、およびステップ プロパティです。

  • タスク プロパティは、タスクの実行を通じてすべてのステップに適用されます。 グローバル タスクプロパティには、次のようないくつかのプロパティがあります。
    • version
    • stepTimeout
    • workingDirectory
  • タスク ステップの種類は、タスクで実行できるアクションの種類を表します。 次の 3 つのステップの種類があります。
    • build
    • push
    • cmd
  • タスク ステップ プロパティは、個々のステップに適用されるパラメーターです。 ステップ プロパティには、次のようないくつかのプロパティがあります。
    • startDelay
    • timeout
    • when
    • その他。

いくつかの共通のステップ プロパティを含む、acr-task.yaml ファイルの基本形式を次に示します。 これは、利用可能なすべてのステップ プロパティまたはステップの種類の使用方法の完全に表しているわけではありませんが、基本的なファイル形式の簡単な概要を提供します。

version: # acr-task.yaml format version.
stepTimeout: # Seconds each step may take.
steps: # A collection of image or container actions.
  - build: # Equivalent to "docker build," but in a multi-tenant environment
  - push: # Push a newly built or retagged image to a registry.
    when: # Step property that defines either parallel or dependent step execution.
  - cmd: # Executes a container, supports specifying an [ENTRYPOINT] and parameters.
    startDelay: # Step property that specifies the number of seconds to wait before starting execution.

サポートされているタスクのファイル名拡張子

ACR タスクでは、タスク ファイルとして処理する、複数のファイル名拡張子 (.yaml など) が予約されています。 次の一覧内にない拡張子は、ACR タスクではすべて Dockerfile と見なされます: .yaml .yml、.toml、.json、.sh、.bash、.zsh、.ps1、.ps、.cmd、.bat、.ts、.js、.php、.py、.rb .lua

YAML は、ACR タスクで現在サポートされている唯一のファイル形式です。 その他のファイル名拡張子は、将来のサポートの可能性のために予約されています。

サンプル タスクを実行する

この記事の以降のセクションには、参照されるいくつかのサンプル タスク ファイルがあります。 サンプル タスクは、パブリックの GitHub リポジトリ (Azure-Samples/acr-tasks) にあります。 これらは Azure CLI コマンド az acr run で実行できます。 サンプル コマンドは、次のようになります。

az acr run -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git

サンプル コマンドの書式設定では、Azure CLI で既定のレジストリが構成されていることを前提としているため、--registry パラメーターが省略されています。 既定のレジストリを構成するには、キーと値のペア defaults.acr=REGISTRY_NAME を受け入れる set コマンドを使用して、az config コマンドを使用します。

たとえば、Azure CLI を "myregistry" という名前の既定のレジストリで構成するには、次のようにします。

az config set defaults.acr=myregistry

タスク プロパティ

タスク プロパティは通常、acr-task.yaml ファイルの上部に表示されます。これらは、タスク ステップの完全な実行を通じて適用されるグローバル プロパティです。 これらのグローバル プロパティの一部は、個々のステップ内でオーバーライドできます。

プロパティ Type 省略可能 説明 オーバーライドのサポート 既定値
version string はい ACR タスク サービスによって解析される acr-task.yaml ファイルのバージョン。 ACR タスクは、下位互換性の維持に努めていますが、この値により ACR タスクが定義されたバージョン内で互換性を維持することが可能になります。 指定しない場合、既定で v1.0.0 に設定されます。 該当なし v1.0.0
stepTimeout int (秒) はい ステップが実行できる最大秒数。 stepTimeout プロパティがタスクで指定されている場合は、すべてのステップの既定の timeout プロパティが設定されます。 timeout プロパティがステップで指定されている場合は、タスクによって提供された stepTimeout プロパティがオーバーライドされます。

タスクのステップ タイムアウト値の合計は、タスクの実行の (たとえば、--timeoutaz acr task create コマンドに渡して設定された) timeout プロパティと等しくなければなりません。 タスクの実行の timeout 値の方が小さい場合、そちらの方が優先されます。
はい 600 (10 分)
workingDirectory string はい 実行時のコンテナーの作業ディレクトリ。 プロパティがタスクで指定されている場合は、すべてのステップの既定の workingDirectory プロパティが設定されます。 ステップで指定されている場合は、タスクによって提供されたプロパティがオーバーライドされます。 はい Windows では c:\workspace、Linux では /workspace
env [string, string, ...] はい タスクの環境変数を定義する key=value 形式での文字列の配列。 プロパティがタスクで指定されている場合は、すべてのステップの既定の env プロパティが設定されます。 ステップに指定した場合は、タスクから継承されたすべての環境変数がオーバーライドされます。 はい なし
secrets [secret, secret, ...] はい secret オブジェクトの配列。 いいえ なし
networks [network, network, ...] はい network オブジェクトの配列。 いいえ なし
volumes [volume, volume, ...] Yes volume オブジェクトの配列。 ステップにマウントするソース コンテンツを含むボリュームを指定します。 いいえ なし

secret

シークレット オブジェクトには、次のプロパティがあります。

プロパティ Type 省略可能 説明 既定値
id string いいえ シークレットの識別子。 なし
keyvault string はい Azure Key Vault のシークレット URL。 なし
clientID string はい Azure リソース用のユーザー割り当てのマネージド ID のクライアント ID。 なし

ネットワーク

ネットワーク オブジェクトには、次のプロパティがあります。

プロパティ Type 省略可能 説明 既定値
name string いいえ ネットワークの名前。 なし
driver string はい ネットワークを管理するドライバー。 なし
ipv6 [bool] はい IPv6 ネットワークが有効になっているかどうか。 false
skipCreation [bool] はい ネットワークの作成をスキップするかどうか。 false
isDefault [bool] はい ネットワークが Azure Container Registry で提供されている既定のネットワークかどうか。 false

ボリューム

ボリューム オブジェクトには、次のプロパティがあります。

プロパティ Type 省略可能 説明 既定値
name string No マウントするボリュームの名前。 英数字、'-'、および '_' のみを含めることができます。 なし
secret map[string]string No マップの各キーは、ボリュームに作成されて設定されたファイルの名前です。 各値は、シークレットの文字列バージョンです。 シークレット値は Base64 でエンコードする必要があります。 なし

タスク ステップの種類

ACR タスクでは、次の 3 種類のステップがサポートされています。 ステップの種類はそれぞれ複数のプロパティをサポートしており、各ステップの種類のセクションで詳しく説明されています。

ステップの種類 説明
build 使い慣れた docker build 構文を使用してコンテナー イメージをビルドします。
push 新しくビルドされたイメージ、またはタグが付け直されたイメージのコンテナー レジストリへの docker push を実行します。 Azure Container Registry、その他のプライベート レジストリ、およびパブリック Docker Hub がサポートされています。
cmd コンテナーの [ENTRYPOINT] に渡されるパラメーターを使用して、コンテナーをコマンドとして実行します。 cmd ステップの種類は、envdetach などのパラメーターと、その他の使い慣れた docker run コマンド オプションをサポートしており、コンテナーの同時実行を使用した単体テストと機能テストを有効にします。

build

コンテナー イメージをビルドします。 build ステップの種類は、マルチ テナントを表します。これはファースト クラスのプリミティブとしてクラウド内で docker build を実行する安全な手段です。

構文: build

version: v1.1.0
steps:
  - [build]: -t [imageName]:[tag] -f [Dockerfile] [context]
    [property]: [value]

az acr run コマンドを実行し、docker のバージョンを取得します。

az acr run -r $ACR_NAME --cmd "docker version" /dev/null

yaml ファイルに環境変数 DOCKER_BUILDKIT=1 を追加して buildkit を有効にし、buildkitsecret を使います。

build ステップの種類では、次の表に示すパラメーターがサポートされています。 build ステップの種類では、docker build コマンドのすべての build 操作 (build-time 変数などを設定する --build-arg など) もサポートされます。

パラメーター 説明 省略可能
-t | --image ビルドされたイメージの完全修飾 image:tag を定義します。

イメージは機能テストなどの内部タスクの検証に使用することができるため、すべてのイメージでレジストリへの push が必要なわけではありません。 ただし、タスクの実行内でイメージをインスタンス化するには、イメージに参照する名前が必要です。

az acr build とは異なり、ACR タスクの実行では、既定のプッシュ動作は提供されません。 ACR タスクでは、既定のシナリオは、イメージをビルド、検証してからプッシュできることを前提としています。 必要に応じてビルドされたイメージをプッシュする方法については、「push」を参照してください。
はい
-f | --file docker build に渡される Dockerfile を指定します。 指定しない場合、コンテキストのルートにある既定の Dockerfile が想定されます。 Dockerfile を指定するには、コンテキストのルートへの相対ファイル名を渡します。 はい
context docker build に渡されるルート ディレクトリ。 各タスクのルート ディレクトリは、共有の workingDirectory に設定され、関連付けられた Git の複製されたディレクトリのルートが含まれます。 いいえ

プロパティ: build

build ステップの種類では、次のプロパティをサポートしています。 これらプロパティの詳細については、この記事の「タスク ステップ プロパティ」を参照してください。

Properties Type 必須
detach [bool] 省略可能
disableWorkingDirectoryOverride [bool] 省略可能
entryPoint string 省略可能
env [string, string, ...] 省略可能
expose [string, string, ...] 省略可能
id string 省略可能
ignoreErrors [bool] 省略可能
isolation string 省略可能
keep [bool] 省略可能
network object 省略可能
ports [string, string, ...] 省略可能
pull [bool] 省略可能
repeat INT 省略可能
retries INT 省略可能
retryDelay int (秒) 省略可能
secret object 省略可能
startDelay int (秒) 省略可能
timeout int (秒) 省略可能
volumeMount object 省略可能
when [string, string, ...] 省略可能
workingDirectory string 省略可能

例: build

イメージのビルド - ルートのコンテキスト

az acr run -f build-hello-world.yaml https://github.com/AzureCR/acr-tasks-sample.git
version: v1.1.0
steps:
  - build: -t $Registry/hello-world -f hello-world.dockerfile .

イメージのビルド - サブディレクトリのコンテキスト

version: v1.1.0
steps:
  - build: -t $Registry/hello-world -f hello-world.dockerfile ./subDirectory

ACR タスクでの動的変数の受け渡し

Azure Container Registry (ACR) タスクを使用する場合、コマンドでフラグaz acr task runを使用してタスク定義を変更せずに、ビルド プロセスに異なる値を--set渡す必要がある場合があります。

例: 実行時にイメージ タグを設定する

イメージ タグのプレースホルダーを含む ACR タスクが acr-task.yml ファイルに定義されている場合を想定します。

steps:
  - build: -t $Registry/hello-world:{{.Values.tag}}

次の Azure CLI コマンドを使用して、タスクを tag トリガーし、実行時に v2 変数を設定できます。

az acr task run --registry myregistry --name mytask --set tag=v2

このコマンドは、ファイル内のプレースホルダーをオーバーライドして、タグを使用して名前付きの mytask ACR タスクを開始し v2 、イメージを acr-task.yml ビルドします。

このアプローチにより、CI/CD パイプラインのカスタマイズが可能になり、タスク定義を変更することなく、現在のニーズに基づいてパラメーターを動的に調整できます。

push

1 つ以上のビルドされたイメージ、またはタグが付け直されたイメージをコンテナー レジストリにプッシュします。 Azure Container Registry などのプライベート レジストリや、パブリック Docker Hub へのプッシュをサポートします。

構文: push

push ステップの種類は、イメージのコレクションをサポートしています。 YAML コレクション構文では、インラインと入れ子になった形式をサポートしています。 1 つのイメージのプッシュは通常、インライン構文を使用して表されます。

version: v1.1.0
steps:
  # Inline YAML collection syntax
  - push: ["$Registry/hello-world:$ID"]

わかりやすくするため、複数のイメージをプッシュするときに、入れ子になった構文を使用します。

version: v1.1.0
steps:
  # Nested YAML collection syntax
  - push:
    - $Registry/hello-world:$ID
    - $Registry/hello-world:latest

プロパティ: push

push ステップの種類では、次のプロパティをサポートしています。 これらプロパティの詳細については、この記事の「タスク ステップ プロパティ」を参照してください。

プロパティ タイプ 必須
env [string, string, ...] 省略可能
id string 省略可能
ignoreErrors [bool] 省略可能
startDelay int (秒) 省略可能
timeout int (秒) 省略可能
when [string, string, ...] 省略可能

例: push

複数のイメージをプッシュする

az acr run -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .
  - push: 
    - $Registry/hello-world:$ID

ビルド、プッシュ、実行

az acr run -f build-run-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .
  - push:
    - $Registry/hello-world:$ID
  - cmd: $Registry/hello-world:$ID

cmd

cmd ステップの種類は、コンテナーを実行します。

構文: cmd

version: v1.1.0
steps:
  - [cmd]: [containerImage]:[tag (optional)] [cmdParameters to the image]

プロパティ: cmd

cmd ステップの種類では、次のプロパティをサポートしています。

プロパティ タイプ 必須
detach [bool] 省略可能
disableWorkingDirectoryOverride [bool] 省略可能
entryPoint string 省略可能
env [string, string, ...] 省略可能
expose [string, string, ...] 省略可能
id string 省略可能
ignoreErrors [bool] 省略可能
isolation string 省略可能
keep [bool] 省略可能
network object 省略可能
ports [string, string, ...] 省略可能
pull [bool] 省略可能
repeat INT 省略可能
retries INT 省略可能
retryDelay int (秒) 省略可能
secret object 省略可能
startDelay int (秒) 省略可能
timeout int (秒) 省略可能
volumeMount object 省略可能
when [string, string, ...] 省略可能
workingDirectory string 省略可能

これらプロパティの詳細については、この記事の「タスク ステップ プロパティ」を参照してください。

例: cmd

hello-world イメージの実行

このコマンドは、Docker Hub 上の hello-world イメージを参照する hello-world.yaml タスク ファイルを実行します。

az acr run -f hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  - cmd: mcr.microsoft.com/hello-world

bash イメージとエコー "hello world" の実行

このコマンドは、Docker Hub 上の bash イメージを参照する bash-echo.yaml タスク ファイルを実行します。

az acr run -f bash-echo.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  - cmd: bash echo hello world

特定の bash イメージ タグを実行する

イメージの特定のバージョンを実行するには、cmd でタグを指定します。

このコマンドは、Docker Hub 上の bash:3.0 イメージを参照する bash-echo-3.yaml タスク ファイルを実行します。

az acr run -f bash-echo-3.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  - cmd: bash:3.0 echo hello world

カスタム イメージを実行する

cmd ステップの種類は、標準の docker run 形式を使用してイメージを参照します。 レジストリで始まらないイメージは、docker.io から始まると見なされます。 前の例は、次のように表すこともできます。

version: v1.1.0
steps:
  - cmd: docker.io/bash:3.0 echo hello world

標準の docker run イメージの参照規約を使用することで、cmd で任意のプライベート レジストリまたはパブリック Docker Hub からのイメージを実行できます。 ACR タスクが実行されているのと同じレジストリ内のイメージを参照している場合は、レジストリ資格情報を指定する必要はありません。

  • Azure コンテナー レジストリからイメージを実行します。 次の例では、myregistry という名前のレジストリと、カスタム イメージ myimage:mytag があるものとします。

    version: v1.1.0
    steps:
        - cmd: myregistry.azurecr.io/myimage:mytag
    
  • Run 変数またはエイリアスでレジストリの参照を汎用化する

    acr-task.yaml ファイルにレジストリ名をハードコーディングする代わりに、Run 変数またはエイリアスを使用して移植性を高めることができます。 Run.Registry 変数または $Registry エイリアスは、実行時に、タスクが実行されているレジストリの名前に展開されます。

    たとえば、前のタスクを任意の Azure コンテナー レジストリで動作するように汎用化するには、イメージ名で $Registry 変数を参照します。

    version: v1.1.0
    steps:
      - cmd: $Registry/myimage:mytag
    

シークレット ボリュームにアクセスする

volumes プロパティを使用すると、タスクの build および cmd ステップに対して、ボリュームとそのシークレット コンテンツを指定できます。 各ステップ内では、省略可能な volumeMounts プロパティに、そのステップでコンテナーにマウントするボリュームと対応するコンテナー パスが一覧表示されます。 シークレットは、各ボリュームのマウント パスでファイルとして提供されます。

タスクを実行し、2 つのシークレットを 1 つのステップにマウントします。キー コンテナーに格納されたものと、コマンド ラインで指定されたものです。

az acr run -f mounts-secrets.yaml --set-secret mysecret=abcdefg123456 https://github.com/Azure-Samples/acr-tasks.git
# This template demonstrates mounting a custom volume into a container at a CMD step
secrets:
  - id: sampleSecret
    keyvault: https://myacbvault2.vault.azure.net/secrets/SampleSecret # Replace with valid keyvault with access

volumes:
  - name: mysecrets
    secret:
      mysecret1: {{.Secrets.sampleSecret | b64enc}}
      mysecret2: {{.Values.mysecret | b64enc}}

steps:
  - cmd: bash cat /run/test/mysecret1 /run/test/mysecret2
    volumeMounts:
      - name: mysecrets
        mountPath: /run/test

タスク ステップ プロパティ

各ステップの種類は、その種類に適した複数のプロパティをサポートしています。 次の表では、利用可能なすべてのステップのプロパティを定義します。 すべてのステップの種類が、すべてのプロパティをサポートしているわけではありません。 各ステップの種類でこれらのプロパティが利用可能かどうかを確認するには、「cmd」、「build」、「push」 のステップの種類の参照セクションを参照してください。

プロパティ Type 省略可能 説明 既定値
detach [bool] はい 実行時にコンテナーをデタッチする必要があるかどうか。 false
disableWorkingDirectoryOverride [bool] はい workingDirectory オーバーライド機能を無効にするかどうか。 これを workingDirectory と組み合わせて使用して、コンテナーの作業ディレクトリを完全に制御します。 false
entryPoint string はい ステップのコンテナーの [ENTRYPOINT] をオーバーライドします。 なし
env [string, string, ...] はい ステップの環境変数を定義する key=value 形式での文字列の配列。 なし
expose [string, string, ...] はい コンテナーから公開されているポートの配列。 なし
id string はい タスク内のステップを一意に識別します。 タスク内のその他のステップでは、when での依存関係のチェックなどのために、ステップの id を参照できます。

id は実行中のコンテナーの名前でもあります。 タスク内のその他のコンテナーで実行されているプロセスは、その DNS ホスト名として、または docker ログ [id] などでアクセスするために id を参照できます。
acb_step_%d。ここで、%d は、YAML ファイルのステップのトップダウンの 0 から始まるインデックスです
ignoreErrors [bool] はい コンテナーの実行中にエラーが発生したかどうかに関係なく、ステップを成功としてマークするかどうか。 false
isolation string はい コンテナーの分離レベル。 default
keep [bool] はい 実行後にステップのコンテナーを保持する必要があるかどうか。 false
network object はい コンテナーが実行されるネットワークを識別します。 なし
ports [string, string, ...] はい コンテナーからホストに公開されているポートの配列。 なし
pull [bool] はい キャッシュ動作を防ぐために、実行前にコンテナーを強制的にプルするかどうか。 false
privileged [bool] はい コンテナーを特権モードで実行するかどうか。 false
repeat INT はい コンテナーの実行を繰り返すための再試行回数。 0
retries INT はい コンテナーの実行に失敗した場合の再試行回数。 再試行は、コンテナーの終了コードがゼロ以外の場合にのみ行われます。 0
retryDelay int (秒) はい コンテナーの実行の再試行間の遅延 (秒)。 0
secret object はい Azure Key Vault シークレットまたは Azure リソースのマネージド ID を識別します。 なし
startDelay int (秒) はい コンテナーの実行を遅らせる秒数。 0
timeout int (秒) はい ステップが終了されるまでに実行できる最大秒数。 600
when [string, string, ...] はい タスク内で 1 つ以上のその他のステップに対するステップの依存関係を構成します。 なし
user string はい ユーザー名またはコンテナーの UID なし
workingDirectory string はい ステップ用の作業ディレクトリを設定します。 既定では、ACR タスクは作業ディレクトリとしてルート ディレクトリを作成します。 ただし、ビルドに複数のステップがある場合は、同じ作業ディレクトリを指定することで、前のステップは後のステップと成果物を共有することができます。 Windows では c:\workspace、Linux では /workspace

volumeMount

volumeMount オブジェクトには、次のプロパティがあります。

プロパティ Type 省略可能 説明 既定値
name string No マウントするボリュームの名前。 volumes プロパティの名前と正確に一致している必要があります。 なし
mountPath string no コンテナー内のファイルをマウントするための絶対パス。 なし

例 :タスク ステップ プロパティ

例: id

機能テスト イメージをインスタンス化する 2 つのイメージをビルドします。 各ステップは、タスク内のその他のステップがその when プロパティ内で参照する一意の id で識別されます。

az acr run -f when-parallel-dependent.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  # build website and func-test images, concurrently
  - id: build-hello-world
    build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .
    when: ["-"]
  - id: build-hello-world-test
    build: -t hello-world-test -f hello-world.dockerfile .
    when: ["-"]
  # run built images to be tested
  - id: hello-world
    cmd: $Registry/hello-world:$ID
    when: ["build-hello-world"]
  - id: func-tests
    cmd: hello-world-test
    env:
      - TEST_TARGET_URL=hello-world
    when: ["hello-world"]
  # push hello-world if func-tests are successful  
  - push: ["$Registry/hello-world:$ID"]
    when: ["func-tests"]

例: when

when プロパティは、タスク内のその他のステップに対するステップの依存関係を指定します。 次の 2 つのパラメーター値がサポートされます。

  • when: ["-"]: 他のステップへの依存関係がないことを示します。 when: ["-"] を指定するステップは、すぐに実行が開始され、同時ステップの実行を有効にします。
  • when: ["id1", "id2"]: ステップが id "id1" と id "id2" のステップに依存していることを示します。 このステップは、"id1" と "id2" の両方のステップが完了するまで実行されません。

when がステップで指定されていない場合、そのステップは acr-task.yaml ファイル内の前のステップの完了に依存します。

when を使用しないシーケンシャル ステップの実行:

az acr run -f when-sequential-default.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
    - cmd: bash echo one
    - cmd: bash echo two
    - cmd: bash echo three

when を使用したシーケンシャル ステップの実行:

az acr run -f when-sequential-id.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
    - id: step1
      cmd: bash echo one
    - id: step2
      cmd: bash echo two
      when: ["step1"]
    - id: step3
      cmd: bash echo three
      when: ["step2"]

並列イメージのビルド:

az acr run -f when-parallel.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  # build website and func-test images, concurrently
  - id: build-hello-world
    build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .
    when: ["-"]
  - id: build-hello-world-test
    build: -t hello-world-test -f hello-world.dockerfile .
    when: ["-"]

並列イメージのビルドと依存のテスト:

az acr run -f when-parallel-dependent.yaml https://github.com/Azure-Samples/acr-tasks.git
version: v1.1.0
steps:
  # build website and func-test images, concurrently
  - id: build-hello-world
    build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .
    when: ["-"]
  - id: build-hello-world-test
    build: -t hello-world-test -f hello-world.dockerfile .
    when: ["-"]
  # run built images to be tested
  - id: hello-world
    cmd: $Registry/hello-world:$ID
    when: ["build-hello-world"]
  - id: func-tests
    cmd: hello-world-test
    env:
      - TEST_TARGET_URL=hello-world
    when: ["hello-world"]
  # push hello-world if func-tests are successful  
  - push: ["$Registry/hello-world:$ID"]
    when: ["func-tests"]

Run 変数

ACR タスクには、タスク ステップを実行するときに使用できる変数の既定のセットが含まれています。 これらの変数は、{{.Run.VariableName}} の形式を使用してアクセスできます。VariableName は次のいずれかです。

  • Run.ID
  • Run.SharedVolume
  • Run.Registry
  • Run.RegistryName
  • Run.Date
  • Run.OS
  • Run.Architecture
  • Run.Commit
  • Run.Branch
  • Run.TaskName

通常、変数名を見ればそれがどういうものかわかります。 以下では、よく使用される変数について詳しく説明します。 YAML バージョン v1.1.0 では、ほとんどの Run 変数の代わりに、省略された定義済みのタスク エイリアスを使用できます。 たとえば、{{.Run.Registry}} の代わりに、$Registry エイリアスを使用します。

Run.ID

az acr run による各 Run、または az acr task create により作成されたタスクのトリガー ベースの実行には、一意の ID があります。 ID は、現在実行中の Run を表します。

通常、イメージに一意にタグ付けするために使用されます。

version: v1.1.0
steps:
    - build: -t $Registry/hello-world:$ID .

Run.SharedVolume

すべてのタスク手順によってアクセス可能な共有ボリュームの一意の識別子。 ボリュームは、Windows では c:\workspace、Linux では /workspace にマウントされます。

Run.Registry

レジストリの完全修飾サーバー名。 通常、タスクが実行されているレジストリをまとめて参照するために使用されます。

version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID .

Run.RegistryName

コンテナー レジストリの名前。 通常、完全修飾サーバー名を必要としないタスク ステップで使用されます。たとえば、レジストリで Azure CLI コマンドを実行する cmd の手順などです。

version 1.1.0
steps:
# List repositories in registry
- cmd: az login --identity
- cmd: az acr repository list --name $RegistryName

Run.Date

実行が開始された現在の UTC 時間。

Run.Commit

GitHub リポジトリへのコミットによってトリガーされるタスクの場合、コミット ID。

Run.Branch

GitHub リポジトリへのコミットによってトリガーされるタスクの場合、ブランチ名。

エイリアス

v1.1.0 の時点で、ACR タスクでは、タスク ステップを実行するときに使用できるエイリアスがサポートされています。 エイリアスは、概念的には、bash や他のコマンド シェルでサポートされているエイリアス (コマンド ショートカット) と似ています。

エイリアスを使用すると、1 つの単語を入力することで、任意のコマンドまたはコマンドのグループ (オプションやファイル名を含む) を起動できます。

ACR タスクでは、いくつかの定義済みエイリアスと、ユーザーが作成するカスタム エイリアスがサポートされています。

定義済みのエイリアス

次のタスク エイリアスは、Run 変数の代わりに使用できます。

エイリアス Run 変数
ID Run.ID
SharedVolume Run.SharedVolume
Registry Run.Registry
RegistryName Run.RegistryName
Date Run.Date
OS Run.OS
Architecture Run.Architecture
Commit Run.Commit
Branch Run.Branch

次の例のように、タスク ステップでは、エイリアスの前に $ ディレクティブを付けます。

version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID -f hello-world.dockerfile .

イメージ エイリアス

次の各エイリアスでは、Microsoft Container Registry (MCR) 内の安定したイメージが指し示されています。 タスク ファイルの cmd セクションでは、ディレクティブを使用せずに参照できます。

エイリアス Image
acr mcr.microsoft.com/acr/acr-cli:0.5
az mcr.microsoft.com/acr/azure-cli:7ee1d7f
bash mcr.microsoft.com/acr/bash:7ee1d7f
curl mcr.microsoft.com/acr/curl:7ee1d7f

次のタスクの例では、複数のエイリアスを使用して、実行レジストリのリポジトリ samples/hello-world 内にある 7 日以上経過したイメージ タグを消去しています。

version: v1.1.0
steps:
  - cmd: acr tag list --registry $RegistryName --repository samples/hello-world
  - cmd: acr purge --registry $RegistryName --filter samples/hello-world:.* --ago 7d

カスタム エイリアス

次の例で示すように、YAML ファイルでカスタム エイリアスを定義して使用します。 エイリアスでは、英数字のみを使用できます。 エイリアスを展開する既定のディレクティブは $ 文字です。

version: v1.1.0
alias:
  values:
    repo: myrepo
steps:
  - build: -t $Registry/$repo/hello-world:$ID -f Dockerfile .

カスタム エイリアスの定義では、リモートまたはローカルの YAML ファイルにリンクできます。 次の例では、Azure Blob Storage 内の YAML ファイルにリンクしています。

version: v1.1.0
alias:
  src:  # link to local or remote custom alias files
    - 'https://link/to/blob/remoteAliases.yml?readSasToken'
[...]

次のステップ

複数ステップのタスクの概要については、「Run multi-step build, test, and patch tasks in ACR Tasks」 (ACR タスクで複数ステップのビルド、テスト、修正プログラムの適用タスクを実行する) を参照してください。

シングル ステップのビルドについては、ACR タスクの概要に関するページを参照してください。