Tarea de Docker
Use esta tarea para compilar e insertar imágenes de Docker en cualquier registro de contenedor mediante la conexión del servicio de registro de Docker.
Información general
A continuación se incluyen las principales ventajas de usar la tarea de Docker en comparación con el uso directo del binario de cliente de Docker en el script :
Integración con la conexión del servicio de registro de Docker: la tarea facilita el uso de una conexión de servicio de registro de Docker para conectarse a cualquier registro de contenedor. Una vez iniciada la sesión, el usuario puede crear tareas de seguimiento para ejecutar cualquier tarea o script aprovechando el inicio de sesión ya realizado por la tarea de Docker. Por ejemplo, puede usar la tarea docker para iniciar sesión en cualquier Azure Container Registry y, a continuación, usar una tarea o script subsiguientes para compilar e insertar una imagen en este registro.
Metadatos agregados como etiquetas: la tarea agrega metadatos relacionados con la rastreabilidad a la imagen en forma de las etiquetas siguientes:
- 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
Entradas de tareas
| Parámetros | Descripción |
|---|---|
commandComando |
(Obligatorio) Valores posibles: buildAndPush , build , , pushlogin , logoutSe agregó en la versión 2.173.0: start , stopValor predeterminado: buildAndPush |
containerRegistryRegistro de contenedor |
(Opcional) Nombre de la conexión del servicio de registro de Docker |
repositoryRepositorio |
(Opcional) Nombre del repositorio dentro del registro de contenedor correspondiente a la conexión del servicio de registro de Docker especificada como entrada para containerRegistry |
containerContenedor |
(Obligatorio para los comandos start y ) El recurso de contenedor que se debe iniciar o stop detener |
tagsEtiquetas |
(Opcional) Entrada multilínea donde cada línea contiene una etiqueta que se va a usar en buildpush los comandos buildAndPush oValor predeterminado: $(Build.BuildId) |
DockerfileDockerfile |
(Opcional) Ruta de acceso al Dockerfile. La tarea usará el primer dockerfile que encuentre para compilar la imagen. Valor predeterminado: **/Dockerfile |
buildContextContexto de compilación |
(Opcional) Ruta de acceso al contexto de compilación Valor predeterminado: ** |
argumentsArgumentos |
(Opcional) Argumentos adicionales que se pasarán al cliente de Docker Tenga en cuenta que si usa el buildAndPush valor para el parámetro , se commandarguments omitirá la propiedad . |
addPipelineData Agregar datos de canalización |
(Opcional) Agrega los metadatos mencionados anteriormente como etiquetas a la imagen. Valores posibles: true, falseValor predeterminado: true |
Iniciar sesión
El siguiente fragmento de código de YAML muestra el inicio de sesión del registro de contenedor mediante una conexión de servicio de registro de Docker:
- task: Docker@2
displayName: Login to ACR
inputs:
command: login
containerRegistry: dockerRegistryServiceConnection1
Compilación e inserción
Un comando de conveniencia llamado buildAndPush permite compilar e insertar imágenes en el registro de contenedor en un solo comando. El siguiente fragmento de código YAML es un ejemplo de creación e insertar varias etiquetas de una imagen en varios registros:
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
tags: |
tag1
tag2
En el fragmento de código anterior, las imágenes contosoRepository:tag1contosoRepository:tag2 y se construyen e insertan en los registros de contenedor correspondientes dockerRegistryServiceConnection1 a y dockerRegistryServiceConnection2 .
Si se desea compilar e insertar en un registro de contenedor autenticado específico en lugar de compilar e insertar en todos los registros de contenedor autenticados a la vez, la entrada se puede especificar explícitamente junto con , como se muestra a containerRegistrycommand: buildAndPush continuación:
steps:
- task: Docker@2
displayName: Build and Push
inputs:
command: buildAndPush
containerRegistry: dockerRegistryServiceConnection1
repository: contosoRepository
tags: |
tag1
tag2
Logout
El siguiente fragmento de código de YAML muestra el cierre de sesión del registro de contenedor mediante una conexión de servicio de registro de Docker:
- task: Docker@2
displayName: Logout of ACR
inputs:
command: logout
containerRegistry: dockerRegistryServiceConnection1
Inicio y detenerse
Esta tarea también se puede usar para controlar los contenedores de trabajos y servicios. Este uso es poco frecuente, pero en ocasiones se usa en circunstancias únicas.
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
Otros comandos y argumentos
Las entradas de comandos y argumentos se pueden usar para pasar argumentos adicionales para comandos de compilación o inserción mediante el binario de cliente de Docker, como se muestra a continuación:
steps:
- task: Docker@2
displayName: Login to ACR
inputs:
command: login
containerRegistry: dockerRegistryServiceConnection1
- task: Docker@2
displayName: Build
inputs:
command: build
repository: contosoRepository
tags: tag1
arguments: --secret id=mysecret,src=mysecret.txt
Nota
La entrada de argumentos se evalúa para todos los comandos excepto buildAndPush . Como buildAndPush es un comando de conveniencia ( seguido de ), la entrada se omite para este buildpusharguments comando.
Solución de problemas
¿Por qué la tarea de Docker omite los argumentos pasados al comando buildAndPush?
La tarea de Docker configurada con el comando buildAndPush omite los argumentos pasados porque se convierten en ambiguos para los comandos de compilación e inserción que se ejecutan internamente. Puede dividir el comando en pasos de compilación e inserción independientes y pasar los argumentos adecuados. Consulte esta entrada de stackoverflow para obtener un ejemplo.
DockerV2 solo admite la conexión de servicio del Registro de Docker y no admite la conexión de servicio arm. ¿Cómo puedo usar una entidad de servicio de Azure (SPN) existente para la autenticación en la tarea de Docker?
Puede crear una conexión de servicio del registro de Docker con sus credenciales de SPN de Azure. Elija el tipo Otros del Registro y proporcione los detalles como se muestra a continuación:
Docker Registry: Your container registry URL (eg. https://myacr.azurecr.io)
Docker ID: Service principal client ID
Password: Service principal key
Código Abierto
Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.