Выполнение многошаговых задач сборки, тестирования и исправления в службе "Задачи ACR"

Многошаговые задачи расширяют функциональные возможности сборки и отправки одного образа в службе "Задачи ACR" с помощью многошаговых рабочих процессов с несколькими контейнерами. Используйте многошаговые задачи для создания и отправки нескольких образов (последовательно или параллельно). Затем запустите эти образы в качестве команд в рамках выполнения одной задачи. Каждый шаг определяет операцию сборки или отправки образа контейнера, а также может определять выполнение контейнера. Каждый шаг в многошаговой задаче использует контейнер в качестве среды выполнения.

Внимание

Если вы ранее создавали задачи в предварительной версии, используя команду az acr build-task, эти задачи необходимо повторно создать, используя команду az acr task.

Например, можно запустить многошаговую задачу, позволяющую автоматически выполнять действия в следующей последовательности:

  1. Сборка образа веб-приложения.
  2. Выполнение контейнера веб-приложения.
  3. Сборка тестового образа веб-приложения.
  4. Выполнение контейнера для тестирования веб-приложения, который выполняет тестирование работающего контейнера приложения.
  5. Если тесты проходят успешно, создайте пакет архива диаграмм Helm.
  6. Выполнение команды helm upgrade с использованием нового пакета архива диаграмм Helm.

Все действия выполняются в рамках Azure, а значит вычисления переносятся на вычислительные ресурсы Azure, а вы в это время можете управлять инфраструктурой. Помимо Реестра контейнеров Azure вы платите только за используемые ресурсы. Сведения о ценах см. в разделе Создание контейнера страницы цен на Реестр контейнеров Azure.

Распространенные сценарии задач

Многошаговые задачи реализуют следующие сценарии:

  • Сборка, маркировка и отправка одного или нескольких образов контейнеров (последовательно или параллельно).
  • Выполнение модульного теста и запись его результатов и объема протестированного кода.
  • Выполнение функциональных тестов и запись их результатов. Служба "Задачи ACR" поддерживает запуск нескольких контейнеров, выполняя ряд запросов между ними.
  • Выполнение на основе задач, включая шаги обработки до сборки образа контейнера и после нее.
  • Развертывание одного или нескольких контейнеров в целевую среду с использованием избранного модуля развертывания.

Определение многошаговой задачи

Многошаговая задача в службе "Задачи ACR" определяется как серия шагов в файле YAML. Каждый шаг может указывать зависимости от успешного выполнения одного или нескольких предыдущих шагов. Доступны следующие типы шагов задач:

  • build. Сборка одного или нескольких образов контейнеров (последовательно или параллельно) с использованием знакомого синтаксиса docker build.
  • push. Отправка созданных образов в реестр контейнеров. Поддерживаются такие закрытые реестры, как Реестр контейнеров Azure, а также общедоступный Центр Docker.
  • cmd. Выполнение контейнера таким образом, чтобы он мог работать в качестве функции в контексте выполняемой задачи. Вы можете передавать параметры в [ENTRYPOINT] контейнера и указать такие свойства, как env, detach, и другие знакомые параметры docker run. Тип шага cmd включает модульное и функциональное тестирование, а также параллельное выполнение контейнеров.

Следующие фрагменты кода демонстрируют, как объединить эти типы шагов задач. Многошаговая задача может быть такой же простой, как создание единого образа из файла Docker и отправка его в реестр с помощью файла YAML, аналогично этому примеру.

version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID .
  - push: ["$Registry/hello-world:$ID"]

Или она может быть сложной, как это вымышленное многошаговое определение, включающее шаги по сборке и тестированию пакета Helm и его развертыванию (реестр контейнеров и конфигурация репозитория Helm не показаны).

version: v1.1.0
steps:
  - id: build-web
    build: -t $Registry/hello-world:$ID .
    when: ["-"]
  - id: build-tests
    build: -t $Registry/hello-world-tests ./funcTests
    when: ["-"]
  - id: push
    push: ["$Registry/helloworld:$ID"]
    when: ["build-web", "build-tests"]
  - id: hello-world-web
    cmd: $Registry/helloworld:$ID
  - id: funcTests
    cmd: $Registry/helloworld:$ID
    env: ["host=helloworld:80"]
  - cmd: $Registry/functions/helm package --app-version $ID -d ./helm ./helm/helloworld/
  - cmd: $Registry/functions/helm upgrade helloworld ./helm/helloworld/ --reuse-values --set helloworld.image=$Registry/helloworld:$ID

Файлы YAML для выполнения многошаговых задач и файлы Docker для нескольких сценариев см. в примерах задач.

Выполнение простой задачи

Задачи поддерживают и выполнение вручную, называемое быстрым выполнением, и автоматическое выполнение при фиксации в Git или обновлении основного образа.

Чтобы выполнить задачу, сначала определите шаги задачи в файле YAML, а затем выполните команду Azure CLI az acr run.

Ниже приведен пример команды Azure CLI, которая запускает задачу, используя пример YAML-файла задачи. Ее шаги выполняют сборку, а затем отправку образа. Перед выполнением команды обновите переменную \<acrName\>, указав имя собственного реестра контейнеров Azure.

az acr run --registry <acrName> -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git

При выполнении задачи выходные данные должны отображать выполнение каждого шага, определенного в файле YAML. В следующих выходных данных шаги отображаются как acb_step_0 и acb_step_1.

az acr run --registry myregistry -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
Sending context to registry: myregistry...
Queued a run with ID: yd14
Waiting for an agent...
2018/09/12 20:08:44 Using acb_vol_0467fe58-f6ab-4dbd-a022-1bb487366941 as the home volume
2018/09/12 20:08:44 Creating Docker network: acb_default_network
2018/09/12 20:08:44 Successfully set up Docker network: acb_default_network
2018/09/12 20:08:44 Setting up Docker configuration...
2018/09/12 20:08:45 Successfully set up Docker configuration
2018/09/12 20:08:45 Logging in to registry: myregistry.azurecr-test.io
2018/09/12 20:08:46 Successfully logged in
2018/09/12 20:08:46 Executing step: acb_step_0
2018/09/12 20:08:46 Obtaining source code and scanning for dependencies...
2018/09/12 20:08:47 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  109.6kB
Step 1/1 : FROM hello-world
 ---> 4ab4c602aa5e
Successfully built 4ab4c602aa5e
Successfully tagged myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:48 Executing step: acb_step_1
2018/09/12 20:08:48 Pushing image: myregistry.azurecr-test.io/hello-world:yd14, attempt 1
The push refers to repository [myregistry.azurecr-test.io/hello-world]
428c97da766c: Preparing
428c97da766c: Layer already exists
yd14: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
2018/09/12 20:08:55 Successfully pushed image: myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:55 Step id: acb_step_0 marked as successful (elapsed time in seconds: 2.035049)
2018/09/12 20:08:55 Populating digests for step id: acb_step_0...
2018/09/12 20:08:57 Successfully populated digests for step id: acb_step_0
2018/09/12 20:08:57 Step id: acb_step_1 marked as successful (elapsed time in seconds: 6.832391)
The following dependencies were found:
- image:
    registry: myregistry.azurecr-test.io
    repository: hello-world
    tag: yd14
    digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/hello-world
    tag: latest
    digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
  git: {}


Run ID: yd14 was successful after 19s

Дополнительные сведения об автоматизированных сборках при фиксации в Git или обновлении основного образа см. в статях об автоматизации сборок образов и сборке с обновлением основного образа.

Следующие шаги

Справочные сведения и примеры многошаговых задач можно найти здесь: