Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Помимо быстрых задач, пакет "Задачи Реестра контейнеров Azure" поддерживает автоматическую сборку образов контейнеров Docker при фиксации исходного кода в репозитории Git. Поддерживаемые контексты Git для Задач ACR включают общедоступные или частные репозитории GitHub или Azure.
Примечание.
Сейчас Задачи ACR не поддерживают триггеры фиксации или запроса на вытягивание в репозиториях GitHub Enterprise.
В этом руководстве задача ACR создает и загружает один образ контейнера, указанный в Dockerfile, при фиксации исходного кода в репозиторий Git. Чтобы создать многошаговую задачу, которая использует файл YAML для задания шагов по сборке, отправке и, при необходимости, тестированию нескольких контейнеров во время фиксации кода, см. руководство: Запуск многошагового рабочего процесса контейнера в облаке при фиксации исходного кода. Обзор решения "Задачи ACR" см. в статье Automate OS and framework patching with ACR Tasks (Автоматизация установки исправлений для ОС и платформы с помощью службы "Задачи ACR").
В этом руководстве рассматриваются следующие темы:
- Создать задачу
- Тестирование задачи
- Представление состояния задачи
- Запустите задачу с помощью коммита кода
В этом руководстве предполагается, что вы уже выполнили шаги в предыдущем руководстве. Если вы еще этого не сделали, выполните действия, описанные в разделе Предварительные требования в предыдущем руководстве, прежде чем перед продолжить.
Предварительные условия
Получение примера кода
В этом руководстве предполагается, что вы уже выполнили шаги в предыдущем руководстве, сделали форк и клонировали пример репозитория. Если вы еще этого не сделали, выполните действия, описанные в разделе Предварительные требования в предыдущем руководстве, прежде чем перед продолжить.
Реестр контейнеров
Для выполнения заданий данного руководства необходимо иметь реестр контейнеров Azure в подписке Azure. Если вам нужен реестр, см. сведения в предыдущем руководстве или в статье Краткое руководство. Создание реестра контейнеров с использованием Azure CLI.
Создание личного маркера доступа GitHub
Чтобы инициировать задачу при фиксации кода в репозитории Git, решению "Задачи ACR" требуется личный маркер доступа (PAT) для доступа к репозиторию. Если у вас еще нет PAT, выполните следующие действия, чтобы создать его в GitHub:
Перейдите на страницу создания личного маркера доступа на сайте GitHub.
Введите краткое описание маркера, например "ACR Task Demo".
Выберите области для ACR, чтобы получить доступ к репозиторию. Для доступа к общедоступному репозиторию, как в этом учебнике, в разделе repo включите repo:status и public_repo
Примечание.
Чтобы создать личный маркер доступа для доступа к репозиторию private, выберите область для полного контроля репозитория.
Нажмите кнопку Generate token (Создать маркер) (может появиться запрос на подтверждение пароля).
Скопируйте и сохраните созданный маркер в защищенном расположении (вы используете этот маркер при определении задачи в следующем разделе).
Подготовка среды к работе с Azure CLI
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Создание задачи сборки
Теперь, когда вы выполнили шаги, необходимые для включения в ACR Tasks возможности чтения состояния фиксации изменений и создания вебхуков в репозитории, вы можете создать задачу, которая запускает сборку образа контейнера при фиксации изменений в репозитории.
Сначала заполните эти переменные среды оболочки значениями, подходящими для вашей среды. Этот шаг не является обязательным, но он упрощает выполнение многолинейных команд 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 передает журнал в вашу консоль при её выполнении. В сокращенном выводе показаны только ключевые шаги.
2023/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2023/11/19 22:51:00 Setting up Docker configuration...
2023/11/19 22:51:02 Successfully set up Docker configuration
2023/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2023/11/19 22:51:03 Successfully logged in
2023/11/19 22:51:03 Executing step: build
2023/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2023/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
2023/11/19 22:51:11 Executing step: push
2023/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
2023/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2023/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2023/11/19 22:51:21 Populating digests for step id: build...
2023/11/19 22:51:22 Successfully populated digests for step id: build
2023/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 Tasks, срабатывает и инициирует сборку в Azure Container Registry. Отобразите журналы текущей задачи, чтобы проверить ее и отслеживать ход ее выполнения:
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".
RUN ID TASK PLATFORM STATUS TRIGGER STARTED DURATION
-------- -------------- ---------- --------- --------- -------------------- ----------
ca7 taskhelloworld linux Succeeded Commit 2023-11-19T22:54:34Z 00:00:29
ca6 taskhelloworld linux Succeeded Manual 2023-11-19T22:51:47Z 00:00:24
ca5 linux Succeeded Manual 2023-11-19T22:23:42Z 00:00:23
Следующие шаги
Из этого руководства вы узнали, как использовать задачу, чтобы автоматически активировать сборки образов контейнера в Azure при фиксации исходного кода в репозитории Git. Перейдите к следующему руководству, чтобы узнать, как создавать задачи, которые вызывают сборку при обновлении базового контейнерного образа.