Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приведен пример рабочего процесса в Реестре контейнеров 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
Для задач ACR требуется маркер доступа GitHub (PAT) для клонирования и создания веб-хуков Git. Инструкции по созданию маркера с необходимыми разрешениями для частного репозитория см. в статье Создание маркера доступа 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
Создайте образ 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
Следующая команда создает задачу из определения в 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_CODE1, в результате чего этап задачи 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 для реестра базовых артефактов:
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 для создания автоматизированного рабочего процесса контроля для введения обновленных базовых образов в вашу систему. Ознакомьтесь с дополнительными сведениями об управлении образами в Реестре контейнеров Azure.