Azure Container Registry タスクを使用してパブリック コンテンツを使用および保守する方法
この記事では、パブリック コンテンツの使用と保守を管理するために役立つ Azure Container Registry のサンプル ワークフローを示します。
- 依存するパブリック イメージのローカル コピーをインポートします。
- セキュリティ スキャンと機能テストを通じてパブリック イメージを検証します。
- 内部使用のためにイメージをプライベート レジストリにレベルを上げます。
- パブリック コンテンツに依存するアプリケーションのベース イメージの更新をトリガーします。
- Azure Container Registry タスクを使用して、このワークフローを自動化します。
このワークフローは次の図のようにまとめられます。
ゲート インポート ワークフローは、外部で管理されている成果物 (たとえば、Docker Hub、GCR、Quay、GitHub Container Registry、Microsoft Container Registry、他の Azure コンテナー レジストリなどのパブリック レジストリをソースとするイメージ) に対する組織の依存を管理するために役立ちます。
パブリック コンテンツへの依存によってもたらされるリスクの背景と、Azure Container Registry を使用してリスクを軽減する方法については、パブリック コンテンツを使用する OCI に関するブログ投稿と Azure Container Registry を使用したパブリック コンテンツの管理に関するページを参照してください。
Azure Cloud Shell または Azure CLI のローカル インストールを使用し、このチュートリアルの作業を完了できます。 Azure CLI バージョン 2.10 以降が推奨されます。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
シナリオの概要
このチュートリアルでは、次の設定を行います。
- 以下を表す 3 つのコンテナー レジストリ。
- ベース イメージの変更をサポートするためのシミュレート対象の Docker Hub (
publicregistry
) - プライベート イメージを共有するためのチーム レジストリ (
contoso
) - インポートされたパブリック コンテンツの会社またはチームの共有レジストリ (
baseartifacts
)
- ベース イメージの変更をサポートするためのシミュレート対象の Docker Hub (
- 各レジストリ内の ACR タスク。 これらのタスクで以下を実行します。
- シミュレート対象のパブリック
node
イメージをビルドします - 会社またはチームの共有レジストリに
node
イメージをインポートして検証します hello-world
イメージをビルドしてデプロイします
- シミュレート対象のパブリック
- 次の構成を含む ACR タスク定義。
- キー コンテナーへのポインターであるレジストリ資格情報のコレクション
- キー コンテナーへのポインターである
acr-task.yaml
内で使用可能なシークレットのコレクション acr-task.yaml
内で使用される構成値のコレクション
- すべてのシークレットをセキュリティで保護する Azure キー コンテナー
hello-world
ビルド アプリケーションをホストする Azure コンテナー インスタンス
前提条件
次の手順では、チュートリアルで作成および使用されるリソースの値を構成します。
環境変数の設定
環境に固有の変数を構成します。 永続的なコンテンツを含むリソースを独自のリソース グループに配置して、誤削除を最小限に抑えるためのベスト プラクティスに従います。 ただし、必要に応じて、これらの変数を 1 つのリソース グループに配置することができます。
この記事の例は、bash シェル形式で示してあります。
# Set the three registry names, must be globally unique:
REGISTRY_PUBLIC=publicregistry
REGISTRY_BASE_ARTIFACTS=contosobaseartifacts
REGISTRY=contoso
# set the location all resources will be created in:
RESOURCE_GROUP_LOCATION=eastus
# default resource groups
REGISTRY_PUBLIC_RG=${REGISTRY_PUBLIC}-rg
REGISTRY_BASE_ARTIFACTS_RG=${REGISTRY_BASE_ARTIFACTS}-rg
REGISTRY_RG=${REGISTRY}-rg
# fully qualified registry urls
REGISTRY_DOCKERHUB_URL=docker.io
REGISTRY_PUBLIC_URL=${REGISTRY_PUBLIC}.azurecr.io
REGISTRY_BASE_ARTIFACTS_URL=${REGISTRY_BASE_ARTIFACTS}.azurecr.io
REGISTRY_URL=${REGISTRY}.azurecr.io
# Azure key vault for storing secrets, name must be globally unique
AKV=acr-task-credentials
AKV_RG=${AKV}-rg
# ACI for hosting the deployed application
ACI=hello-world-aci
ACI_RG=${ACI}-rg
Git リポジトリとトークン
環境をシミュレートするには、次の各 Git リポジトリを自分で管理できるリポジトリにフォークします。
- https://github.com/importing-public-content/base-image-node.git
- https://github.com/importing-public-content/import-baseimage-node.git
- https://github.com/importing-public-content/hello-world.git
次に、フォークされたリポジトリの次の変数を更新します。
git の URL の末尾に追加された :main
は、既定のリポジトリ ブランチを表します。
GIT_BASE_IMAGE_NODE=https://github.com/<your-fork>/base-image-node.git#main
GIT_NODE_IMPORT=https://github.com/<your-fork>/import-baseimage-node.git#main
GIT_HELLO_WORLD=https://github.com/<your-fork>/hello-world.git#main
ACR タスクによって Git Webhook を複製して確立するには、GitHub アクセス トークン (PAT) が必要です。 プライベート リポジトリに対して必要なアクセス許可を使用してトークンを作成する手順については、GitHub アクセス トークンの作成に関するページを参照してください。
GIT_TOKEN=<set-git-token-here>
Docker Hub の資格情報
Docker Hub からイメージをプルするときにスロットリングと ID 要求を回避するには、Docker Hub トークンを作成します。 次に、次の環境変数を設定します。
REGISTRY_DOCKERHUB_USER=<yourusername>
REGISTRY_DOCKERHUB_PASSWORD=<yourtoken>
レジストリを作成する
Azure CLI コマンドを使用して、3 つの Premium レベル コンテナー レジストリをそれぞれ別のリソース グループに作成します。
az group create --name $REGISTRY_PUBLIC_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_PUBLIC_RG --name $REGISTRY_PUBLIC --sku Premium
az group create --name $REGISTRY_BASE_ARTIFACTS_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_BASE_ARTIFACTS_RG --name $REGISTRY_BASE_ARTIFACTS --sku Premium
az group create --name $REGISTRY_RG --location $RESOURCE_GROUP_LOCATION
az acr create --resource-group $REGISTRY_RG --name $REGISTRY --sku Premium
キー コンテナーを作成し、シークレットを設定する
キー コンテナーを作成します。
az group create --name $AKV_RG --location $RESOURCE_GROUP_LOCATION
az keyvault create --resource-group $AKV_RG --name $AKV
キー コンテナーで Docker Hub のユーザー名とトークンを設定します。
az keyvault secret set \
--vault-name $AKV \
--name registry-dockerhub-user \
--value $REGISTRY_DOCKERHUB_USER
az keyvault secret set \
--vault-name $AKV \
--name registry-dockerhub-password \
--value $REGISTRY_DOCKERHUB_PASSWORD
キー コンテナーで Git PAT を設定して確認します。
az keyvault secret set --vault-name $AKV --name github-token --value $GIT_TOKEN
az keyvault secret show --vault-name $AKV --name github-token --query value -o tsv
Azure コンテナー インスタンスのリソース グループを作成します
このリソース グループは、後のタスクで hello-world
イメージをデプロイするときに使用されます。
az group create --name $ACI_RG --location $RESOURCE_GROUP_LOCATION
パブリック node
ベース イメージを作成する
Docker Hub で node
イメージをシミュレートするには、ACR タスクを作成して、パブリック イメージをビルドし、維持します。 この設定により、node
イメージ メンテナンス ツールによる変更をシミュレートすることができます。
az acr task create \
--name node-public \
-r $REGISTRY_PUBLIC \
-f acr-task.yaml \
--context $GIT_BASE_IMAGE_NODE \
--git-access-token $(az keyvault secret show \
--vault-name $AKV \
--name github-token \
--query value -o tsv) \
--set REGISTRY_FROM_URL=${REGISTRY_DOCKERHUB_URL}/ \
--assign-identity
Docker のスロットリングを回避するには、タスクに Docker Hub の資格情報を追加します。 acr task authentication コマンドを使用して、Docker Hub を含む任意のレジストリに Docker の資格情報を渡すことができます。
az acr task credential add \
-n node-public \
-r $REGISTRY_PUBLIC \
--login-server $REGISTRY_DOCKERHUB_URL \
-u https://${AKV}.vault.azure.net/secrets/registry-dockerhub-user \
-p https://${AKV}.vault.azure.net/secrets/registry-dockerhub-password \
--use-identity [system]
キー コンテナーから値を読み取るアクセス権をタスクに付与します。
az keyvault set-policy \
--name $AKV \
--resource-group $AKV_RG \
--object-id $(az acr task show \
--name node-public \
--registry $REGISTRY_PUBLIC \
--query identity.principalId --output tsv) \
--secret-permissions get
タスクをトリガーするには、Git コミット、ベース イメージの更新、タイマー、または手動実行を使用します。
タスクを手動で実行して、node
イメージを生成します。
az acr task run -r $REGISTRY_PUBLIC -n node-public
シミュレート対象のパブリック レジストリ内のイメージを列挙します。
az acr repository show-tags -n $REGISTRY_PUBLIC --repository node
hello-world
イメージを作成する
シミュレート対象のパブリック node
イメージに基づいて、hello-world
イメージをビルドします。
シミュレート対象のパブリック レジストリへのプル アクセス用のトークンを作成する
スコープを pull
に指定して、シミュレート対象のパブリック レジストリへのアクセス トークンを作成します。 次に、それをキー コンテナーに設定します。
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY_PUBLIC}-user" \
--value "registry-${REGISTRY_PUBLIC}-user"
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY_PUBLIC}-password" \
--value $(az acr token create \
--name "registry-${REGISTRY_PUBLIC}-user" \
--registry $REGISTRY_PUBLIC \
--scope-map _repositories_pull \
-o tsv \
--query credentials.passwords[0].value)
Azure Container Instances によるプル アクセス用のトークンを作成する
プルするスコープが指定された hello-world
イメージをホストするレジストリへのアクセス トークンを作成します。 次に、それをキー コンテナーに設定します。
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY}-user" \
--value "registry-${REGISTRY}-user"
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY}-password" \
--value $(az acr token create \
--name "registry-${REGISTRY}-user" \
--registry $REGISTRY \
--repository hello-world content/read \
-o tsv \
--query credentials.passwords[0].value)
hello-world
イメージをビルドおよび維持するタスクを作成する
次のコマンドを使用して、hello-world
リポジトリ内の acr-tasks.yaml
の定義からタスクを作成します。 このタスク ステップで、hello-world
イメージをビルドしてから、Azure Container Instances にデプロイします。 この Azure Container Instances 用リソース グループは、前のセクションで作成されました。 image:tag
に違いが 1 つあるだけのタスク内で az container create
を呼び出すと、このチュートリアル全体で同じインスタンスにデプロイされます。
az acr task create \
-n hello-world \
-r $REGISTRY \
-f acr-task.yaml \
--context $GIT_HELLO_WORLD \
--git-access-token $(az keyvault secret show \
--vault-name $AKV \
--name github-token \
--query value -o tsv) \
--set REGISTRY_FROM_URL=${REGISTRY_PUBLIC_URL}/ \
--set KEYVAULT=$AKV \
--set ACI=$ACI \
--set ACI_RG=$ACI_RG \
--assign-identity
シミュレート対象のパブリック レジストリのタスクに資格情報を追加します。
az acr task credential add \
-n hello-world \
-r $REGISTRY \
--login-server $REGISTRY_PUBLIC_URL \
-u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-user \
-p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-password \
--use-identity [system]
キー コンテナーから値を読み取るアクセス権をタスクに付与します。
az keyvault set-policy \
--name $AKV \
--resource-group $AKV_RG \
--object-id $(az acr task show \
--name hello-world \
--registry $REGISTRY \
--query identity.principalId --output tsv) \
--secret-permissions get
リソース グループにアクセス権を付与することによって、Azure Container Instances を作成および管理するアクセス権をタスクに付与します。
az role assignment create \
--assignee $(az acr task show \
--name hello-world \
--registry $REGISTRY \
--query identity.principalId --output tsv) \
--scope $(az group show -n $ACI_RG --query id -o tsv) \
--role owner
タスクを作成して構成したら、タスクを実行して hello-world
イメージをビルドおよびデプロイします。
az acr task run -r $REGISTRY -n hello-world
作成したら、hello-world
イメージをホストしているコンテナーの IP アドレスを取得します。
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
ブラウザーでその IP アドレスにアクセスし、実行中のアプリケーションを確認します。
"疑わしい" 変更を使用してベース イメージを更新する
このセクションでは、環境内で問題の原因となっている可能性のあるベース イメージに対して変更をシミュレートします。
- フォークされた
base-image-node
リポジトリ内のDockerfile
を開きます。 BACKGROUND_COLOR
をOrange
に変更して、変更をシミュレートします。
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Orange
変更をコミットし、ACR タスクによって自動的にビルドが開始されることを監視します。
タスクによって次の実行が開始されることを監視します。
watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table
最終的には、Commit
の TRIGGER に基づいて STATUS Succeeded
が表示されます。
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------- ---------- --------- --------- -------------------- ----------
ca4 hub-node linux Succeeded Commit 2020-10-24T05:02:29Z 00:00:22
Ctrl + C キーを押して監視コマンドを終了し、最新の実行のログを表示します。
az acr task logs -r $REGISTRY_PUBLIC
node
イメージが完了すると、ACR タスクの watch
によって自動的に hello-world
イメージのビルドが開始されます。
watch -n1 az acr task list-runs -r $REGISTRY -o table
最終的には、Image Update
の TRIGGER に基づいて STATUS Succeeded
が表示されます。
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- ----------- ---------- --------- ------------ -------------------- ----------
dau hello-world linux Succeeded Image Update 2020-10-24T05:08:45Z 00:00:31
Ctrl + C キーを押して監視コマンドを終了し、最新の実行のログを表示します。
az acr task logs -r $REGISTRY
完了したら、更新された hello-world
イメージをホストしているサイトの IP アドレスを取得します。
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
ブラウザーでそのサイトにアクセスします。背景はオレンジ色 (疑わしい) のはずです。
チェックイン
ここまでに、Git コミットに基づいて自動的にビルドされ、ベース node
イメージに変更される hello-world
イメージを作成しました。 この例では、タスクによって、Azure Container Registry のベース イメージに対してビルドされますが、サポートされている任意のレジストリを使用できます。
node
イメージが更新されると、ベース イメージの更新によって、タスクの実行が自動的に再トリガーされます。 ここで見られるように、すべての更新が必要なわけではありません。
パブリック コンテンツのゲート インポート
アップストリームの変更によって重要なワークロードが中断しないように、セキュリティ スキャンと機能テストを追加することができます。
このセクションでは、以下を行う ACR タスクを作成します。
- テスト イメージをビルドする
- テスト イメージに対して機能テスト スクリプト
./test.sh
を実行する - イメージのテストに成功したら、パブリック イメージを baseimages レジストリにインポートする
自動化テストを追加する
アップストリーム コンテンツをゲートするために、自動テストが実装されています。 この例では、$BACKGROUND_COLOR
を確認する test.sh
が用意されています。 テストに失敗した場合、1
の EXIT_CODE
が返され、それによって ACR タスク ステップが失敗し、タスクの実行が終了します。 テストは、結果のログ記録など、あらゆる形式のツールで拡張できます。 ゲートは、以下で再現しているように、スクリプト内の成功または失敗の応答によって管理されます。
if [ ""$(echo $BACKGROUND_COLOR | tr '[:lower:]' '[:upper:]') = 'RED' ]; then
echo -e "\e[31mERROR: Invalid Color:\e[0m" ${BACKGROUND_COLOR}
EXIT_CODE=1
else
echo -e "\e[32mValidation Complete - No Known Errors\e[0m"
fi
exit ${EXIT_CODE}
タスクの YAML
import-baseimage-node
リポジトリ内の acr-task.yaml
を確認します。これにより、次の手順が実行されます。
- 次の Dockerfile を使用してテスト ベース イメージをビルドします。
ARG REGISTRY_FROM_URL= FROM ${REGISTRY_FROM_URL}node:15-alpine WORKDIR /test COPY ./test.sh . CMD ./test.sh
- 完了したら、
./test.sh
を実行するコンテナーを実行してイメージを検証します - 正常に完了した場合にのみ、
when: ['validate-base-image']
を使用してゲートされるインポート手順を実行します
version: v1.1.0
steps:
- id: build-test-base-image
# Build off the base image we'll track
# Add a test script to do unit test validations
# Note: the test validation image isn't saved to the registry
# but the task logs captures log validation results
build: >
--build-arg REGISTRY_FROM_URL={{.Values.REGISTRY_FROM_URL}}
-f ./Dockerfile
-t {{.Run.Registry}}/node-import:test
.
- id: validate-base-image
# only continues if node-import:test returns a non-zero code
when: ['build-test-base-image']
cmd: "{{.Run.Registry}}/node-import:test"
- id: pull-base-image
# import the public image to base-artifacts
# Override the stable tag,
# and create a unique tag to enable rollback
# to a previously working image
when: ['validate-base-image']
cmd: >
docker pull {{.Values.REGISTRY_FROM_URL}}node:15-alpine
- id: retag-base-image
when: ['pull-base-image']
cmd: docker tag {{.Values.REGISTRY_FROM_URL}}node:15-alpine {{.Run.Registry}}/node:15-alpine
- id: retag-base-image-unique-tag
when: ['pull-base-image']
cmd: docker tag {{.Values.REGISTRY_FROM_URL}}node:15-alpine {{.Run.Registry}}/node:15-alpine-{{.Run.ID}}
- id: push-base-image
when: ['retag-base-image', 'retag-base-image-unique-tag']
push:
- "{{.Run.Registry}}/node:15-alpine"
- "{{.Run.Registry}}/node:15-alpine-{{.Run.ID}}"
ベース イメージをインポートしてテストするタスクを作成する
az acr task create \
--name base-import-node \
-f acr-task.yaml \
-r $REGISTRY_BASE_ARTIFACTS \
--context $GIT_NODE_IMPORT \
--git-access-token $(az keyvault secret show \
--vault-name $AKV \
--name github-token \
--query value -o tsv) \
--set REGISTRY_FROM_URL=${REGISTRY_PUBLIC_URL}/ \
--assign-identity
シミュレート対象のパブリック レジストリのタスクに資格情報を追加します。
az acr task credential add \
-n base-import-node \
-r $REGISTRY_BASE_ARTIFACTS \
--login-server $REGISTRY_PUBLIC_URL \
-u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-user \
-p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_PUBLIC}-password \
--use-identity [system]
キー コンテナーから値を読み取るアクセス権をタスクに付与します。
az keyvault set-policy \
--name $AKV \
--resource-group $AKV_RG \
--object-id $(az acr task show \
--name base-import-node \
--registry $REGISTRY_BASE_ARTIFACTS \
--query identity.principalId --output tsv) \
--secret-permissions get
インポート タスクを実行します。
az acr task run -n base-import-node -r $REGISTRY_BASE_ARTIFACTS
Note
./test.sh: Permission denied
が原因でタスクが失敗した場合は、スクリプトに実行アクセス許可があることを確認し、Git リポジトリにコミットし直します。
chmod +x ./test.sh
hello-world
イメージを更新してゲートされた node
イメージからビルドする
アクセス トークンを作成して、node
リポジトリから read
にスコープされたベース成果物のレジストリにアクセスします。 次に、キー コンテナーに設定します。
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY_BASE_ARTIFACTS}-user" \
--value "registry-${REGISTRY_BASE_ARTIFACTS}-user"
az keyvault secret set \
--vault-name $AKV \
--name "registry-${REGISTRY_BASE_ARTIFACTS}-password" \
--value $(az acr token create \
--name "registry-${REGISTRY_BASE_ARTIFACTS}-user" \
--registry $REGISTRY_BASE_ARTIFACTS \
--repository node content/read \
-o tsv \
--query credentials.passwords[0].value)
ベース成果物のレジストリの hello-world タスクに資格情報を追加します。
az acr task credential add \
-n hello-world \
-r $REGISTRY \
--login-server $REGISTRY_BASE_ARTIFACTS_URL \
-u https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_BASE_ARTIFACTS}-user \
-p https://${AKV}.vault.azure.net/secrets/registry-${REGISTRY_BASE_ARTIFACTS}-password \
--use-identity [system]
タスクを更新して、BASE_ARTIFACTS
レジストリを使用するように REGISTRY_FROM_URL
を変更する
az acr task update \
-n hello-world \
-r $REGISTRY \
--set KEYVAULT=$AKV \
--set REGISTRY_FROM_URL=${REGISTRY_BASE_ARTIFACTS_URL}/ \
--set ACI=$ACI \
--set ACI_RG=$ACI_RG
hello-world タスクを実行して、ベース イメージの依存関係を変更します。
az acr task run -r $REGISTRY -n hello-world
"有効な" 変更を使用してベース イメージを更新する
base-image-node
リポジトリ内のDockerfile
を開きます。BACKGROUND_COLOR
をGreen
に変更して有効な変更をシミュレートします。
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Green
変更をコミットし、更新のシーケンスを監視します。
watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table
実行したら、Ctrl + C キーを押し、ログを監視します。
az acr task logs -r $REGISTRY_PUBLIC
完了したら、base-image-import タスクを監視します。
watch -n1 az acr task list-runs -r $REGISTRY_BASE_ARTIFACTS -o table
実行したら、Ctrl + C キーを押し、ログを監視します。
az acr task logs -r $REGISTRY_BASE_ARTIFACTS
完了したら、hello-world タスクを監視します。
watch -n1 az acr task list-runs -r $REGISTRY -o table
実行したら、Ctrl + C キーを押し、ログを監視します。
az acr task logs -r $REGISTRY
完了したら、更新された hello-world
イメージをホストしているサイトの IP アドレスを取得します。
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
ブラウザーでそのサイトにアクセスします。背景は緑色 (有効) のはずです。
ゲート ワークフローを表示する
赤色の背景色で、前のセクションの手順をもう一度実行します。
base-image-node
リポジトリ内のDockerfile
を開きますBACKGROUND_COLOR
をRed
に変更して無効な変更をシミュレートします。
ARG REGISTRY_NAME=
FROM ${REGISTRY_NAME}node:15-alpine
ENV NODE_VERSION 15-alpine
ENV BACKGROUND_COLOR Red
変更をコミットし、更新のシーケンスを監視します。
watch -n1 az acr task list-runs -r $REGISTRY_PUBLIC -o table
実行したら、Ctrl + C キーを押し、ログを監視します。
az acr task logs -r $REGISTRY_PUBLIC
完了したら、base-image-import タスクを監視します。
watch -n1 az acr task list-runs -r $REGISTRY_BASE_ARTIFACTS -o table
実行したら、Ctrl + C キーを押し、ログを監視します。
az acr task logs -r $REGISTRY_BASE_ARTIFACTS
この時点で、base-import-node タスクの検証失敗が表示され、hello-world
の更新を発行するシーケンスが停止されるはずです。 出力は次のようになります。
[...]
2020/10/30 03:57:39 Launching container with name: validate-base-image
Validating Image
NODE_VERSION: 15-alpine
BACKGROUND_COLOR: Red
ERROR: Invalid Color: Red
2020/10/30 03:57:40 Container failed during run: validate-base-image. No retries remaining.
failed to run step ID: validate-base-image: exit status 1
hello-world
に更新を発行する
hello-world
イメージへの変更は、最新の検証済み node
イメージを使用して続行されます。
ゲート検証に合格したベース node
イメージに対して追加の変更があると、hello-world
イメージへのベース イメージの更新がトリガーされます。
クリーンアップ
この記事で使用したリソースが不要になったら、削除してください。
az group delete -n $REGISTRY_RG --no-wait -y
az group delete -n $REGISTRY_PUBLIC_RG --no-wait -y
az group delete -n $REGISTRY_BASE_ARTIFACTS_RG --no-wait -y
az group delete -n $AKV_RG --no-wait -y
az group delete -n $ACI_RG --no-wait -y
次のステップ
この記事では、ACR タスクを使用して自動ゲート ワークフローを作成し、更新されたベース イメージを環境に導入しました。 Azure Container Registry でイメージを管理するには、関連情報を参照してください。