Не удалось найти способ передать изображение из ACR в качестве артефакта в JSON конвейера Azure DevOps.
Другими словами, я пытаюсь реплицировать артефакт из выпусков Azure DevOps (см. Прикрепленное изображение), хочу, чтобы у пользователя была возможность выбрать изображение из ACR при запуске конвейера JSON.
Использование ACR (реестр контейнеров Azure) в качестве входных данных для конвейера json Azure Devops
Ответы (3)
Вы можете использовать ресурсы контейнера, чтобы использовать образ контейнера как часть вашего конвейера yaml. И вы можете использовать параметры времени выполнения, позволяющие пользователю выбирать изображения во время работы конвейера. См. Пример ниже:
1. Определите параметры времени выполнения, чтобы пользователь мог выбирать изображения.
parameters:
- name: ACRimage
type: string
default: image1
values:
- image1
- image2
- image3
Затем, нажав Run
для запуска конвейера, пользователю будет предоставлена возможность выбрать, какое изображение использовать в конвейере.
2. Добавьте ресурсы контейнера ACR в свой конвейер.
Прежде чем вы сможете добавить ресурс контейнера ACR. Вам необходимо создать подключение к службе реестра Docker
Затем вы можете определить ресурс контейнера в своем конвейере, как показано ниже:
resources:
containers:
- container: ACRimage
image: ${{parameters.ACRimage}}
endpoint: ACR-service-connection
Итак, полный конвейер yaml выглядит так:
parameters:
- name: ACRimage
type: string
default: image1
values:
- image1
- image2
- image3
resources:
containers:
- container: ACRimage
image: ${{parameters.ACRimage}}
endpoint: ACR-service-connection
trigger: none
pool:
vmImage: 'ubuntu-latest'
steps:
Вы можете использовать Блок ресурсов контейнера
Вы можете использовать первоклассный тип ресурса контейнера для реестра контейнеров Azure (ACR), чтобы использовать ваши ACR-образы. Этот тип ресурсов можно использовать как часть ваших заданий, а также для включения автоматических триггеров конвейера.
trigger:
- none # Disbale trigger on the repository itself
resources:
containers:
- container: string # identifier for the container resource
type: ACR
azureSubscription: string # Azure subscription (ARM service connection) for container registry;
resourceGroup: string # resource group for your ACR
registry: string # registry for container images
repository: string # name of the container image repository in ACR
trigger: true
Если вы хотите запускать только определенные теги (или исключать определенные теги), вы можете заменить значение trigger
, как показано ниже.
trigger:
tags:
include: [ string ] # image tags to consider the trigger events, defaults to any new tag
exclude: [ string ] # image tags on discard the trigger events, defaults to none
Полный пример конвейера:
trigger:
- none # Disable trigger on the repository itself
resources:
containers:
- container: myId # identifier for the container resource
type: ACR
azureSubscription: test # Azure subscription (ARM service connection) for container registry;
resourceGroup: registry # resource group for your ACR
registry: myregistry # registry for container images
repository: hello-world # name of the container image repository in ACR
trigger: true
pool:
vmImage: 'ubuntu-latest'
steps:
- bash: |
echo "The registry is: $(resources.container.myId.registry)"
echo "The repository is: $(resources.container.myId.repository)"
echo "The tag is: $(resources.container.myId.tag)"
Если вы отправите новый образ в репозиторий helloworld, конвейер запустится
docker pull hello-world:latest
docker tag hello-world:latest myregistry.azurecr.io/hello-world:newtag
docker push hello-world:latest myregistry.azurecr.io/hello-world:newtag
Результатом шага скрипта будет
The registry is: myregistry
The repository is: hello-world
The tag is: newtag
Извините, что сообщаю об этом, но конвейеры azure yaml не поддерживают это.
Даниелорн предложил rerources.containers, который используется для запуска этапов сборки в этом контейнере. Я не хочу этого делать. Цель состоит в том, чтобы развернуть тег изображения от пользователя и развернуть этот образ. Поэтому необходимое изображение должно быть передано как артефакт, как в конвейере выпуска. К сожалению, на данный момент это не поддерживается в конвейерах YAMl, я получил подтверждение от лазурной команды.
resources.containers
, который используется для запуска этапов сборки в этом контейнере, просто неверен, вы путаете его с jobs.container
, который соответствует вашему описанию. В моем примере вы можете увидеть, как можно запустить конвейер при изменении изображения и получить доступ к тегу изображения, который запустил конвейер.
- person danielorn; 04.03.2021