Поделиться через


Docker@2 — задача Docker версии 2

Создание или отправка образов Docker, вход в систему или выход из системы, запуск или остановка контейнеров или выполнение команды Docker.

Создание или отправка образов Docker, вход или выход из системы либо выполнение команды Docker.

Синтаксис

# Docker v2
# Build or push Docker images, login or logout, start or stop containers, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout && command != start && command != stop. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout' | 'start' | 'stop'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
    #addBaseImageData: true # boolean. Add base image metadata to image(s). Default: true.
    #container: # string. Optional. Use when command = start || command = stop. Container.
# Docker v2
# Build or push Docker images, login or logout, start or stop containers, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout && command != start && command != stop. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout' | 'start' | 'stop'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
    #container: # string. Optional. Use when command = start || command = stop. Container.
# Docker v2
# Build or push Docker images, login or logout, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments. 
    #addPipelineData: true # boolean. Add Pipeline metadata to image(s). Default: true.
# Docker v2
# Build or push Docker images, login or logout, or run a Docker command.
- task: Docker@2
  inputs:
  # Container Repository
    #containerRegistry: # string. Container registry. 
    #repository: # string. Optional. Use when command != login && command != logout. Container repository. 
  # Commands
    command: 'buildAndPush' # 'buildAndPush' | 'build' | 'push' | 'login' | 'logout'. Required. Command. Default: buildAndPush.
    Dockerfile: '**/Dockerfile' # string. Required when command = build || command = buildAndPush. Dockerfile. Default: **/Dockerfile.
    #buildContext: '**' # string. Optional. Use when command = build || command = buildAndPush. Build context. Default: **.
    #tags: '$(Build.BuildId)' # string. Optional. Use when command = build || command = push || command = buildAndPush. Tags. Default: $(Build.BuildId).
    #arguments: # string. Optional. Use when command != login && command != logout && command != buildAndPush. Arguments.

Входные данные

containerRegistry - Реестр контейнеров
string.

Имя подключения к службе реестра Docker. Требуется для команд, выполняющих проверку подлинности с помощью реестра.


repository - Репозиторий контейнеров
string. Необязательный элемент. Используйте при command != login && command != logout && command != start && command != stop.

Указывает имя репозитория.


repository - Репозиторий контейнеров
string. Необязательный элемент. Используйте при command != login && command != logout.

Указывает имя репозитория.


command - Команды
string. Обязательный. Допустимые значения: buildAndPush, build, push, login, logout, start. stop Значение по умолчанию: buildAndPush.

Указывает выполняемую команду Docker.


command - Команды
string. Обязательный. Допустимые значения: buildAndPush, build, push, login, logout. Значение по умолчанию: buildAndPush.

Указывает выполняемую команду Docker.


Dockerfile - Dockerfile
string. Требуется, если command = build || command = buildAndPush. Значение по умолчанию: **/Dockerfile.

Указывает путь к файлу Docker. Задача использует первый файл Docker, который она находит для сборки образа.


buildContext - Контекст сборки
string. Необязательный элемент. Используйте при command = build || command = buildAndPush. Значение по умолчанию: **.

Указывает путь к контексту сборки. Передайте ** , чтобы указать каталог, содержащий файл Docker.


tags - Теги
string. Необязательный элемент. Используйте при command = build || command = push || command = buildAndPush. Значение по умолчанию: $(Build.BuildId).

Указывает список тегов с разделителями-запятыми. Эти теги используются в buildкомандах , push и buildAndPush .


arguments - Аргументы
string. Необязательный элемент. Используйте при command != login && command != logout && command != buildAndPush.

Указывает дополнительные аргументы для передачи клиенту Docker. При использовании значения buildAndPush параметра команды свойство arguments игнорируется.

Пример: использование команды сборки , --build-arg HTTP_PROXY=http://10.20.30.2:1234 --quiet.


addPipelineData - Добавление метаданных конвейера в образы
boolean. Значение по умолчанию: true.

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


addBaseImageData - Добавление метаданных базового образа в образы
boolean. Значение по умолчанию: true.

По умолчанию добавляются данные базового образа, такие как имя базового образа или дайджест, которые помогают отслеживать данные. Вы можете отказаться от этого поведения по умолчанию.


container - Контейнер
string. Необязательный элемент. Используйте при command = start || command = stop.

Указывает имя ресурса контейнера для запуска или остановки. Используйте эту команду с командами start и stop .


Параметры управления задачами

Помимо входных данных, все задачи имеют параметры управления. Дополнительные сведения см. в разделе Параметры управления и общие свойства задачи.

Выходные переменные

Эта задача определяет следующие выходные переменные, которые можно использовать в нисходящих шагах, заданиях и этапах.

DockerOutput
Указывает путь к файлам, содержащим выходные данные команды. Вы можете указать два пути к файлам в отдельных строках для команды и один путь к файлу buildAndPush для любой другой команды.

Комментарии

Ниже приведены основные преимущества использования задачи Docker вместо непосредственного использования двоичного файла клиента Docker в скрипте.

  • Интеграция со службой реестра Docker . Эта задача упрощает использование подключения к службе реестра Docker для подключения к любому реестру контейнеров. После входа можно добавить последующие задачи, которые выполняют другие задачи или скрипты, используя вход, используемый задачей Docker. Например, используйте задачу Docker для входа в любой Реестр контейнеров Azure, а затем используйте другую задачу или скрипт для сборки и отправки образа в реестр.

  • Метаданные, добавленные в виде меток . Задача добавляет метаданные, связанные с возможностью трассировки, к изображению в следующих метках:

    • com.azure.dev.image.build.buildnumber
    • com.azure.dev.image.build.builduri
    • com.azure.dev.image.build.definitionname
    • com.azure.dev.image.build.repository.name
    • com.azure.dev.image.build.repository.uri
    • com.azure.dev.image.build.sourcebranchname
    • com.azure.dev.image.build.sourceversion
    • com.azure.dev.image.release.definitionname
    • com.azure.dev.image.release.releaseid
    • com.azure.dev.image.release.releaseweburl
    • com.azure.dev.image.system.teamfoundationcollectionuri
    • com.azure.dev.image.system.teamproject

Устранение неполадок

Почему задача Docker игнорирует аргументы, переданные команде buildAndPush?

Задача Docker, настроенная с помощью команды buildAndPush, игнорирует переданные аргументы, так как они становятся неоднозначными для внутренних команд сборки и отправки. Вы можете разделить команду на отдельные шаги сборки и отправки и передать подходящие аргументы. Пример см. в этой публикации на сайте StackOverflow.

DockerV2 поддерживает только подключение к службе реестра Docker и не поддерживает подключение к службе ARM. Как использовать существующий субъект-службу Azure (SPN) для проверки подлинности в задаче Docker?

Вы можете создать подключение к службе реестра Docker, используя учетные данные имени субъекта-службы Azure. Выберите другие значения в разделе "Тип реестра" и укажите следующие сведения:

Docker Registry:    Your container registry URL (eg. https://myacr.azurecr.io)
Docker ID:          Service principal client ID
Password:           Service principal key

Примеры

Вход

В следующем фрагменте YAML показан вход в реестр контейнеров с помощью подключения к службе реестра Docker.

- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1

Сборка и отправка

Удобная команда с именем buildAndPush позволяет выполнять сборку и отправку образов в реестр контейнеров с помощью одной команды.

Следующий фрагмент YAML является примером создания и отправки нескольких тегов образа в несколько реестров.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Login to Docker Hub
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection2
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: |
      tag1
      tag2

В приведенном выше фрагменте образы contosoRepository:tag1 и contosoRepository:tag2 создаются и отправляются в реестры контейнеров, соответствующие dockerRegistryServiceConnection1 и dockerRegistryServiceConnection2.

Если вы хотите выполнить сборку и отправку в определенный реестр контейнеров с проверкой подлинности вместо сборки и отправки во все реестры контейнеров, прошедших проверку подлинности, явно укажите containerRegistry входные данные, command: buildAndPush как показано ниже.

steps:
- task: Docker@2
  displayName: Build and Push
  inputs:
    command: buildAndPush
    containerRegistry: dockerRegistryServiceConnection1
    repository: contosoRepository
    tags: |
      tag1
      tag2

Logout

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

- task: Docker@2
  displayName: Logout of ACR
  inputs:
    command: logout
    containerRegistry: dockerRegistryServiceConnection1

Запуск и остановка

Используйте эту задачу для управления контейнерами заданий и служб. Это редкое использование, но иногда используется в уникальных обстоятельствах.

resources:
  containers:
  - container: builder
    image: ubuntu:18.04
steps:
- script: echo "I can run inside the container (it starts by default)"
  target:
    container: builder
- task: Docker@2
  inputs:
    command: stop
    container: builder
# any task beyond this point would not be able to target the builder container
# because it's been stopped

Другие команды и аргументы

Входные данные команды и аргументов используются для передачи дополнительных аргументов для команд сборки или отправки с помощью двоичного файла клиента Docker, как показано в примере.

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
  displayName: Build
  inputs:
    command: build
    repository: contosoRepository # username/contosoRepository for DockerHub
    tags: tag1
    arguments: --secret id=mysecret,src=mysecret.txt

Примечание

Входные аргументы вычисляются для всех команд, кроме buildAndPush. buildAndPush — это удобная команда (build за которой следует push), arguments входные данные игнорируются при использовании.

Требования

Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования None
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента 2.172.0 или более поздней версии
Категория задач Сборка
Требование Описание
Типы конвейеров YAML, классическая сборка, классический выпуск
Выполняется в Агент, DeploymentGroup
Требования None
Capabilities Эта задача не удовлетворяет требованиям для последующих задач в задании.
Ограничения команд Любой
Устанавливаемые переменные Любой
Версия агента Все поддерживаемые версии агента.
Категория задач Сборка