Использование и обслуживание общедоступного содержимого с помощью Задач Реестра контейнеров Azure
В этой статье приведен пример рабочего процесса в Реестре контейнеров Azure, который помогает управлять использованием и обслуживанием общедоступного содержимого:
- Импорт локальных копий зависимых общедоступных образов.
- Проверка общедоступных образов с помощью средств проверки безопасности и функционального тестирования.
- Перемещение образов в закрытые реестры для внутреннего использования.
- Активация обновлений базовых образов для приложений, зависящих от общедоступного содержимого.
- Для автоматизации этого рабочего процесса используются Задачи Реестра контейнеров Azure.
На изображении ниже показана сводка рабочего процесса.
Рабочий процесс условного импорта помогает управлять зависимостями организации от управляемых внешним образом артефактов — например, образов, источником которых являются общедоступные реестры, включая Docker Hub, GCR, Quay, Реестр контейнеров GitHub, Реестр контейнеров Майкрософт и даже другие реестры контейнеров Azure.
Дополнительные сведения о рисках, связанных с общедоступным содержимым, и об использовании Реестра контейнеров Azure для их устранения см. в записи блога об использовании общедоступного содержимого OCI и в статье об управлении общедоступным содержимым с помощью Реестра контейнеров Azure.
Для выполнения задач этих инструкций можно использовать Azure Cloud Shell или локальный экземпляр Azure CLI. Рекомендуется использовать Azure CLI 2.10 или более поздней версии. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Обзор сценария
В этом пошаговом руководстве настраиваются следующие компоненты:
- Три реестра контейнеров, представляющие:
- имитируемый Docker Hub (
publicregistry
) для поддержки смены базового образа; - реестр команды (
contoso
) для совместного использования частных образов; - общий реестр компании или команды (
baseartifacts
) для импортированного общедоступного содержимого;
- имитируемый Docker Hub (
- задача ACR в каждом реестре. Задачи:
- создание имитации общедоступного образа
node
; - импорт и проверка образа
node
в общем реестре компании или команды; - создание и развертывание образа
hello-world
.
- создание имитации общедоступного образа
- Определения задач ACR, включая конфигурации для:
- коллекция учетных данных реестра, которые являются указателями на хранилище ключей;
- коллекция секретов в
acr-task.yaml
, которые являются указателями на хранилище ключей; - коллекция настроенных значений, используемых в файле
acr-task.yaml
;
- хранилище ключей Azure для хранения всех секретов;
- экземпляр контейнера Azure, в котором размещено приложение сборки
hello-world
.
Необходимые компоненты
Приведенные ниже действия позволяют настроить значения ресурсов, создаваемые и используемые в этом пошаговом руководстве.
Настройка переменных среды
Настройте переменные, уникальные для вашей среды. Мы следуем рекомендациям по размещению ресурсов с долгосрочным содержимым в отдельных группах ресурсов, чтобы избежать их случайного удаления. Однако при желании эти переменные можно поместить в одну группу ресурсов.
Примеры в этой статье отформатированы для выполнения в оболочке 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
Затем измените следующие переменные для этих вилок.
Элемент :main
, добавляемый в конец URL-адреса Git, представляет ветвь репозитория по умолчанию.
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
Для клонирования и установки веб-перехватчиков Git необходим маркер доступа GitHub (PAT) для ACR. Инструкции по созданию маркера с необходимыми разрешениями для частного репозитория см. в статье Создание маркера доступа GitHub.
GIT_TOKEN=<set-git-token-here>
Учетные данные Docker Hub
Чтобы избежать регулирования и запросов на идентификацию при извлечении образов из Docker Hub, создайте маркер Docker Hub. Сначала установите указанные ниже переменные среды.
REGISTRY_DOCKERHUB_USER=<yourusername>
REGISTRY_DOCKERHUB_PASSWORD=<yourtoken>
Создание реестров
С помощью команд Azure CLI создайте три реестра контейнеров уровня "Премиум" (каждый в отдельной группе ресурсов):
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
Задайте и проверьте PAT Git в хранилище ключей:
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
Чтобы имитировать образ node
в Docker Hub, создайте задачу 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. Для передачи учетных данных Docker в любой реестр, включая Docker Hub, можно использовать команду acr task credentials.
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
Создайте образ hello-world
на основе имитации общедоступного образа node
.
Создание маркера для доступа на извлечение к имитируемому общедоступному реестру
Создайте маркер доступа к имитируемому общедоступному реестру в области 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"
Создайте маркер доступа к реестру, в котором размещен образ 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
Следующая команда создает задачу из определения в acr-tasks.yaml
в репозитории hello-world
. Отдельные этапы задачи создают образ hello-world
, а затем развертывают его в службе "Экземпляры контейнеров Azure". Группа ресурсов для службы "Экземпляры контейнеров Azure" была создана в предыдущем разделе. Посредством вызова az container create
в задаче с единственным отличием в image:tag
в этом пошаговом руководстве задача развертывается в одном экземпляре.
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 и управления ими, предоставив ей доступ к группе ресурсов:
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
После создания получите IP-адрес контейнера, в котором размещен образ hello-world
.
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
В браузере перейдите по IP-адресу, чтобы увидеть запущенное приложение.
Обновление базового образа "сомнительным" изменением
В этом разделе имитируется изменение базового образа, которое может вызвать проблемы в среде.
- Откройте
Dockerfile
в вилке репозиторияbase-image-node
. - Измените
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
Со временем вы должны увидеть состояние Succeeded
для триггера Commit
:
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------- ---------- --------- --------- -------------------- ----------
ca4 hub-node linux Succeeded Commit 2020-10-24T05:02:29Z 00:00:22
Нажмите CTRL + C, чтобы прервать выполнение команды watch, а затем просмотрите журналы последнего запуска:
az acr task logs -r $REGISTRY_PUBLIC
После создания образа node
команда watch
для задач ACR автоматически приступит к сборке образа hello-world
:
watch -n1 az acr task list-runs -r $REGISTRY -o table
Со временем вы должны увидеть состояние Succeeded
для триггера Image Update
:
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, чтобы прервать выполнение команды watch, а затем просмотрите журналы последнего запуска:
az acr task logs -r $REGISTRY
После завершения получите IP-адрес сайта, на котором размещен обновленный образ hello-world
:
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
В браузере перейдите на сайт, у которого должен быть оранжевый фон, сигнализирующий о сомнительном изменении.
Запись после изменения
На этом этапе у вас есть образ hello-world
, который был автоматически создан на основе операций фиксации Git и изменений в базовом образе node
. В этом примере задача выполняет сборку на основе базового образа в Реестре контейнеров Azure, но можно использовать любой поддерживаемый реестр.
Обновление базового образа автоматически вызывает запуск задачи при обновлении образа node
. Как мы видим, нужны не все обновления.
Условный импорт общедоступного содержимого
Чтобы предотвратить нарушение в критически важных рабочих нагрузках вследствие изменений в вышестоящих процессах, можно добавить проверку безопасности и функциональные тесты.
В этом разделе вы создадите задачу ACR для выполнения следующих действий:
- Сборка тестового образа
- Запуск скрипта функционального теста
./test.sh
для тестового образа - В случае успешной проверки образа — импорт общедоступного образа в реестр baseimages
Добавление тестирования автоматизации
Для условного импорта содержимого вышестоящих процессов реализуется автоматическое тестирование. В этом примере скрипт test.sh
проверяет $BACKGROUND_COLOR
. Если тест завершается ошибкой, возвращается EXIT_CODE
1
, в результате чего этап задачи 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-код задачи
Проверьте файл acr-task.yaml
в репозитории import-baseimage-node
, который выполняет следующие действия:
- Создайте тестовый базовый образ с помощью следующего файла 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
Примечание.
Если задача завершается с ошибкой ./test.sh: Permission denied
, убедитесь, что у скрипта есть разрешения на выполнение, и выполните фиксацию в репозитории Git:
chmod +x ./test.sh
Обновление образа hello-world
для сборки на основе условного образа node
Создайте маркер доступа для доступа к реестру base-artifacts с областью read
из репозитория node
. Затем задайте его в хранилище ключей:
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 для реестра base-artifacts:
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]
Обновите задачу, изменив REGISTRY_FROM_URL
на адрес реестра BASE_ARTIFACTS
.
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
Обновление базового образа "допустимым" изменением
- Откройте
Dockerfile
в репозиторииbase-image-node
. - Измените
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
После завершения получите IP-адрес сайта, на котором размещен обновленный образ hello-world
:
az container show \
--resource-group $ACI_RG \
--name ${ACI} \
--query ipAddress.ip \
--out tsv
В браузере перейдите на сайт, у которого должен быть зеленый фон, сигнализирующий о допустимом изменении.
Просмотр условного рабочего процесса
Снова выполните действия, описанные в предыдущем разделе, с красным цветом фона.
- Откройте
Dockerfile
в репозиторииbase-image-node
. - Измените
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 для создания автоматизированного рабочего процесса gating, чтобы представить обновленные базовые образы в вашей среде. Ознакомьтесь с дополнительными сведениями об управлении образами в Реестре контейнеров Azure.