Docker-Aufgabe

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Verwenden Sie diese Aufgabe, um Docker-Images mithilfe einer Docker-Registrierungsdienstverbindung zu erstellen und per Push in eine beliebige Containerregistrierung zu pushen.

Übersicht

Im Folgenden finden Sie die wichtigsten Vorteile der Verwendung von Docker-Aufgaben im Vergleich zur direkten Verwendung der Docker-Clientbin binär im Skript:

  • Integration in die Verbindung mit dem Docker-Registrierungsdienst : Die Aufgabe erleichtert die Verwendung einer Docker-Registrierungsdienstverbindung zum Herstellen einer Verbindung mit jeder Containerregistrierung. Nach der Anmeldung kann der Benutzer Folgeaufgaben erstellen, um alle Aufgaben/Skripts auszuführen, indem er die Anmeldung nutzt, die bereits von der Docker-Aufgabe durchgeführt wurde. Beispielsweise können Sie den Docker-Task verwenden, um sich bei einem beliebigen Azure Container Registry und dann mithilfe eines nachfolgenden Task/Skripts ein Image zu erstellen und in diese Registrierung zu pushen.

  • Als Bezeichnungen hinzugefügte Metadaten: Der Task fügt dem Bild Metadaten im Zusammenhang mit der Nachverfolgbarkeit in Form der folgenden Bezeichnungen hinzu:

    • 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

Aufgabeneingaben

Parameter BESCHREIBUNG
command
Befehl
(Erforderlich) Mögliche Werte: buildAndPush, build, push, login, logout
In Version 2.173.0 hinzugefügt: start, stop
Standardwert: buildAndPush
containerRegistry
Containerregistrierung
(Optional) Name der Verbindung mit dem Docker-Registrierungsdienst
repository
Repository
(Optional) Der Name des Repositorys in der Containerregistrierung, der der Docker-Registrierungsdienstverbindung entspricht, die als Eingabe für angegeben wurde containerRegistry. Präfix mit username/ für DockerHub.
container
Container
(Erforderlich für Befehle und startstop) Die Containerressource zum Starten oder Beenden
tags
Tags
(Optional) Mehrzeileneingabe, wobei jede Zeile ein Tag enthält, das in - oder -buildpushBefehlen verwendet werden buildAndPush soll.
Standardwert: $(Build.BuildId)
Dockerfile
Dockerfile
(Optional) Pfad zur Dockerfile-Datei. Die Aufgabe verwendet die erste gefundene Dockerfile-Datei, um das Image zu erstellen.
Standardwert: **/Dockerfile
buildContext
Buildkontext
(Optional) Pfad zum Buildkontext
Standardwert: **
arguments
Argumente
(Optional) Zusätzliche Argumente, die an den Docker-Client übergeben werden sollen
Beachten Sie, dass die - buildAndPush Eigenschaft ignoriert command wird, arguments wenn Sie den Wert für den -Parameter verwenden.
addPipelineData
Fügen Sie dem Image Pipelinemetadaten hinzu.
(Optional) Standardmäßig werden Pipelinedaten wie der Name des Quellverzweigungs und die Build-ID hinzugefügt, was die Nachverfolgbarkeit erleichtert. Beispielsweise können Sie ein Image überprüfen, um herauszufinden, welche Pipeline das Image erstellt hat. Sie können dieses Standardverhalten deaktivieren.
Mögliche Werte: true, false
Standardwert: true
addBaseImageData
Hinzufügen von Basisimagemetadaten zu Images
(Optional) Standardmäßig werden Basisimagedaten wie Der Name des Basisimages und der Digest hinzugefügt, was die Nachverfolgbarkeit erleichtert. Sie können dieses Standardverhalten deaktivieren.
Mögliche Werte: true, false
Standardwert: true

Anmelden

Der folgende YAML-Codeausschnitt zeigt die Containerregistrierungsanmeldung mithilfe einer Docker-Registrierungsdienstverbindung:

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

Erstellen und Pushen

Ein komfortabler Befehl namens buildAndPush ermöglicht das Erstellen und Pushen von Images in die Containerregistrierung in einem einzigen Befehl. Der folgende YAML-Codeausschnitt ist ein Beispiel für das Erstellen und Pushen mehrerer Tags eines Images in mehrere Registrierungen:

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

Im obigen Codeausschnitt werden die contosoRepository:tag1contosoRepository:tag2 Images und erstellt und an die Containerregister für und pushen dockerRegistryServiceConnection1dockerRegistryServiceConnection2.

Wenn sie eine bestimmte authentifizierte Containerregistrierung erstellen und pushen möchten, anstatt alle authentifizierten Containerregistrierungen gleichzeitig zu erstellen und zu pushen, containerRegistrycommand: buildAndPush kann die Eingabe explizit zusammen mit angegeben werden, wie unten dargestellt:

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

Logout

Der folgende YAML-Codeausschnitt zeigt die Abmelde von Containerregistrierungen mithilfe einer Docker-Registrierungsdienstverbindung:

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

Starten/Beenden

Diese Aufgabe kann auch zum Steuern von Auftrags- und Dienstcontainern verwendet werden. Diese Verwendung ist ungewöhnlich, wird aber gelegentlich für besondere Umstände verwendet.

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

Andere Befehle und Argumente

Die Befehls- und Argumenteingaben können verwendet werden, um zusätzliche Argumente für Build- oder Pushbefehle mithilfe der Docker-Clientbin binär zu übergeben, wie unten dargestellt:

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

Hinweis

Die Argumenteingabe wird für alle Befehle außer ausgewertet buildAndPush. Ebenso buildAndPush wie ein Komfortbefehl (build gefolgt von push) arguments wird die Eingabe für diesen Befehl ignoriert.

Problembehandlung

Warum ignoriert der Docker-Task Argumente, die an den Befehl buildAndPush übergeben werden?

Die mit dem Befehl buildAndPush konfigurierte Docker-Aufgabe ignoriert die übergebenen Argumente, da sie für die intern ausgeführten Build- und Pushbefehle mehrdeutig werden. Sie können Ihren Befehl in separate Build- und Pushschritte aufteilen und die geeigneten Argumente übergeben. Ein Beispiel finden Sie in diesem Stackoverflow-Beitrag .

DockerV2 unterstützt nur Docker-Registrierungsdienstverbindung und keine ARM-Dienstverbindung. Wie kann ich einen vorhandenen Azure-Dienstprinzipal (SPN) für die Authentifizierung im Docker-Task verwenden?

Sie können eine Docker-Registrierungsdienstverbindung mit Ihren Azure SPN-Anmeldeinformationen erstellen. Wählen Sie unter Registrierungstyp die Option Andere aus, und geben Sie die Details wie folgt an:

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

Open Source

Diese Aufgabe wird Open Source auf GitHub. Feedback und Beiträge sind willkommen.