Руководство. Автоматизация сборок образов контейнеров в облаке при фиксации исходного кода
Помимо быстрых задач, пакет "Задачи Реестра контейнеров Azure" поддерживает автоматическую сборку образов контейнеров Docker при фиксации исходного кода в репозитории Git. Поддерживаемые контексты Git для Задач ACR включают общедоступные или частные репозитории GitHub или Azure.
Примечание.
Сейчас Задачи ACR не поддерживают триггеры фиксации или запроса на вытягивание в репозиториях GitHub Enterprise.
В этом руководстве решение "Задачи Реестра контейнеров Azure" компилирует и отправляет один образ контейнера, указанный в Dockerfile, при фиксации исходного кода в репозитории Git. Чтобы создать многофакторную задачу , которая использует YAML-файл для определения шагов для сборки, отправки и при необходимости тестирования нескольких контейнеров при фиксации кода, см . руководство. Запуск рабочего процесса многофакторного контейнера в облаке при фиксации исходного кода. Обзор решения "Задачи ACR" см. в статье Automate OS and framework patching with ACR Tasks (Автоматизация установки исправлений для ОС и платформы с помощью службы "Задачи ACR").
В этом руководстве рассматриваются следующие темы:
- Создать задачу
- Тестирование задачи
- Представление состояния задачи
- Активация задачи с помощью фиксации кода
В этом руководстве предполагается, что вы уже выполнили шаги в предыдущем руководстве. Если вы еще этого не сделали, выполните действия, описанные в разделе Предварительные требования в предыдущем руководстве, прежде чем перед продолжить.
Необходимые компоненты
Получение примера кода
В этом руководстве предполагается, что вы уже выполнили шаги в предыдущем руководстве, создали вилку и клонировали пример репозитория. Если вы еще этого не сделали, выполните действия, описанные в разделе Предварительные требования в предыдущем руководстве, прежде чем перед продолжить.
Реестр контейнеров
Для выполнения заданий данного руководства необходимо иметь реестр контейнеров Azure в подписке Azure. Если вам нужен реестр, см. сведения в предыдущем руководстве или в статье Краткое руководство. Создание реестра контейнеров с использованием Azure CLI.
Создание личного маркера доступа GitHub
Чтобы инициировать задачу при фиксации кода в репозитории Git, решению "Задачи ACR" требуется личный маркер доступа (PAT) для доступа к репозиторию. Если у вас еще нет личного маркера доступа, выполните следующие действия, чтобы создать его на GitHub.
Перейдите на страницу создания PAT на GitHub по адресу https://github.com/settings/tokens/new.
Введите краткое описание маркера, например "ACR Task Demo".
Выберите области для ACR, чтобы получить доступ к репозиторию. Для доступа к общедоступному репозиторию, как в этом учебнике, в разделе repo включите repo:status и public_repo
Примечание.
Чтобы создать личный маркер доступа для доступа к репозиторию private, выберите область для полного контроля репозитория.
Нажмите кнопку Generate token (Создать маркер) (может появиться запрос на подтверждение пароля).
Скопируйте и сохраните созданный маркер в защищенном расположении (вы используете этот маркер при определении задачи в следующем разделе).
Подготовка среды к работе с Azure CLI
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Создание задачи сборки
Теперь, когда вы выполнили шаги, необходимые для включения в решении "Задачи ACR" чтения состояния фиксации и создания веб-перехватчиков в репозитории, вы можете создать задачу, которая запускает сборку образа контейнера при фиксации кода в репозитории.
Сначала заполните эти переменные среды оболочки значениями, подходящими для вашей среды. Этот шаг не является обязательным, но он упрощает выполнение многолинейных команд Azure CLI в этом руководстве. Если вы не заполните эти переменные среды, вам придется вручную заменять каждое значение в примерах команд.
ACR_NAME=<registry-name> # The name of your Azure container registry
GIT_USER=<github-username> # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section
Теперь создайте задачу, выполнив приведенную ниже команду az acr task create.
Примечание.
Файл Dockerfile, используемый в следующем примере, зависит от общедоступного базового образа контейнера из Docker Hub. Чтобы повысить надежность при использовании общедоступного содержимого, импортируйте образ и управляйте им в частном реестре контейнеров Azure, а также обновите Dockerfile для использования базового образа, управляемого в частном режиме. Узнайте больше о работе с общедоступными образами.
az acr task create \
--registry $ACR_NAME \
--name taskhelloworld \
--image helloworld:{{.Run.ID}} \
--context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
--file Dockerfile \
--git-access-token $GIT_PAT
Эта задача указывает, что каждый раз при фиксации кода в главной ветви репозитория, указанной в --context
, решение "Задачи ACR" создает образ контейнера из кода в этой ветви. Для сборки образа используется Dockerfile, определяемый с помощью --file
из корня репозитория. Аргумент --image
указывает параметризованное значение {{.Run.ID}}
для части с версией в теге образа, гарантируя, что образ коррелирует с конкретной сборкой и имеет уникальный тег.
Выходные данные успешно выполненной команды az acr task create имеют следующий вид:
{
"agentConfiguration": {
"cpu": 2
},
"creationDate": "2010-11-19T22:42:32.972298+00:00",
"id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
"location": "westcentralus",
"name": "taskhelloworld",
"platform": {
"architecture": "amd64",
"os": "Linux",
"variant": null
},
"provisioningState": "Succeeded",
"resourceGroup": "myregistry",
"status": "Enabled",
"step": {
"arguments": [],
"baseImageDependencies": null,
"contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
"dockerFilePath": "Dockerfile",
"imageNames": [
"helloworld:{{.Run.ID}}"
],
"isPushEnabled": true,
"noCache": false,
"type": "Docker"
},
"tags": null,
"timeout": 3600,
"trigger": {
"baseImageTrigger": {
"baseImageTriggerType": "Runtime",
"name": "defaultBaseimageTriggerName",
"status": "Enabled"
},
"sourceTriggers": [
{
"name": "defaultSourceTriggerName",
"sourceRepository": {
"branch": "main",
"repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
"sourceControlAuthProperties": null,
"sourceControlType": "GitHub"
},
"sourceTriggerEvents": [
"commit"
],
"status": "Enabled"
}
]
},
"type": "Microsoft.ContainerRegistry/registries/tasks"
}
Тестирование задачи сборки
Теперь у вас есть задача, которая определяет сборку. Чтобы протестировать конвейер сборки, запустите сборку вручную, выполнив команду az acr task run:
az acr task run --registry $ACR_NAME --name taskhelloworld
По умолчанию при выполнении команда az acr task run
передает выходные данные журнала в консоль. В сокращенном примере выходных данных показаны только основные шаги.
2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon 23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:11 Executing step: push
2020/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
registry: myregistry.azurecr.io
repository: helloworld
tag: da2
digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
runtime-dependency:
registry: registry.hub.docker.com
repository: library/node
tag: 9-alpine
digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
git:
git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf
Run ID: ca6 was successful after 27s
Активация сборки с помощью фиксации
Теперь, когда вы протестировали задачу, выполнив ее вручную, запустите ее автоматически, изменив исходный код.
Сначала перейдите в каталог, содержащий локальный клон вашего репозитория:
cd acr-build-helloworld-node
Затем выполните следующие команды для создания, фиксации и передачи нового файла в вилку вашего репозитория GitHub:
echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main
Может потребоваться предоставить ваши учетные данные GitHub при выполнении команды git push
. Введите свое имя пользователя GitHub и укажите созданный ранее личный маркер доступа в качестве пароля.
Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>
После того как вы передали фиксацию в ваш репозиторий, веб-перехватчик, созданный решением "Задачи ACR", запускается и выполняет сборку в службе "Реестр контейнеров Azure". Отобразите журналы текущей задачи, чтобы проверить ее и отслеживать ход ее выполнения:
az acr task logs --registry $ACR_NAME
Выходные данные выглядят следующим образом. Они показывают выполняемую (или последнюю выполненную) задачу:
Showing logs of the last created run.
Run ID: ca7
[...]
Run ID: ca7 was successful after 38s
Вывод списка сборок
Чтобы просмотреть список выполняемых задач, которые решение "Задачи ACR" выполнило в реестре, запустите команду az acr task list-runs:
az acr task list-runs --registry $ACR_NAME --output table
Результат этой команды должен выглядеть примерно следующим образом: Отобразятся сборки, созданные решением "Задачи ACR", а также команда "Git Commit" в столбце TRIGGER для самой последней задачи:
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
ca7 taskhelloworld linux Succeeded Commit 2020-11-19T22:54:34Z 00:00:29
ca6 taskhelloworld linux Succeeded Manual 2020-11-19T22:51:47Z 00:00:24
ca5 linux Succeeded Manual 2020-11-19T22:23:42Z 00:00:23
Следующие шаги
Из этого руководства вы узнали, как использовать задачу, чтобы автоматически активировать сборки образов контейнера в Azure при фиксации исходного кода в репозитории Git. Перейдите к следующему руководству, чтобы узнать, как создавать задачи, которые активируют сборку при обновлении базового образа контейнера.