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 プロパティがオーバーライドされます。タスクのステップ タイムアウト値の合計は、タスクの実行の (たとえば、 --timeout を az 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 ステップの種類は、env や detach などのパラメーターと、その他の使い慣れた 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
を有効にし、buildkit
で secret
を使います。
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 タスクの概要に関するページを参照してください。