Использование ACR (реестр контейнеров Azure) в качестве входных данных для конвейера json Azure Devops

Не удалось найти способ передать изображение из ACR в качестве артефакта в JSON конвейера Azure DevOps.
Другими словами, я пытаюсь реплицировать артефакт из выпусков Azure DevOps (см. Прикрепленное изображение), хочу, чтобы у пользователя была возможность выбрать изображение из ACR при запуске конвейера JSON.

Изображение из ACR как артефакт в выпусках Azure DevOps


person vibhore miglani    schedule 03.02.2021    source источник
comment
Привет. У вас была возможность проверить ответ ниже? Как прошло? Не могли бы вы принять это в качестве ответа, если это сработало.   -  person Levi Lu-MSFT    schedule 22.02.2021


Ответы (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:
person Levi Lu-MSFT    schedule 04.02.2021
comment
Спасибо, Леви. Ваше предложение о заполнении тегов изображений в качестве значений списка может быть полезным, но в настоящее время список тегов необходимо динамически обновлять для моего варианта использования. Я не нашел способа динамически обновить этот список тегов фактическим списком тегов в ACR. Если я это сделаю, обновлю свой ответ. - person vibhore miglani; 04.03.2021

Вы можете использовать Блок ресурсов контейнера

Вы можете использовать первоклассный тип ресурса контейнера для реестра контейнеров 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
person danielorn    schedule 03.02.2021
comment
Привет Даниэльорн. Спасибо, но rerources.containers используется для запуска этапов сборки в этом контейнере. Я не хочу этого делать, не хочу передавать тег изображения и развертывать этот образ. Так что изображение - это артефакт для моего конвейера. - person vibhore miglani; 04.03.2021
comment
@vibhoremiglani Именно это и делает мой пример. Он срабатывает, когда новый тег помещается в указанный репозиторий, и затем вы можете получить доступ к реестру, имени репозитория и имени тега и использовать их для извлечения или развертывания образа. - person danielorn; 04.03.2021

Извините, что сообщаю об этом, но конвейеры azure yaml не поддерживают это.

Даниелорн предложил rerources.containers, который используется для запуска этапов сборки в этом контейнере. Я не хочу этого делать. Цель состоит в том, чтобы развернуть тег изображения от пользователя и развернуть этот образ. Поэтому необходимое изображение должно быть передано как артефакт, как в конвейере выпуска. К сожалению, на данный момент это не поддерживается в конвейерах YAMl, я получил подтверждение от лазурной команды.

person vibhore miglani    schedule 04.03.2021
comment
Ваш оператор resources.containers, который используется для запуска этапов сборки в этом контейнере, просто неверен, вы путаете его с jobs.container, который соответствует вашему описанию. В моем примере вы можете увидеть, как можно запустить конвейер при изменении изображения и получить доступ к тегу изображения, который запустил конвейер. - person danielorn; 04.03.2021
comment
Ваше описание того, чего вы хотите достичь, также немного неясно, хотите ли вы запускать конвейер при изменении изображения (например, вы запускаете конвейер при обновлении артефакта) или вы просто предоставляете пользователю раскрывающийся список, заполненный всеми тегами для определенного изображения? - person danielorn; 04.03.2021