Verwenden von Azure Pipelines zum Erstellen und Pushen von Containerimages in Registrierungen

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Dieser Artikel führt Sie durch die Einrichtung und Konfiguration für die Verwendung von Azure Pipelines zum Erstellen und Übertragen eines Docker-Images an eine Azure Container Registry, Docker Hub und Google Artifact Registry. Darüber hinaus wird die Verwendung der System.AccessToken sicheren Authentifizierung in Ihrer Pipeline beschrieben.

Dieser Artikel führt Sie durch das Setup und die Konfiguration für die Verwendung von Azure Pipelines zum Erstellen und Pushen eines Docker-Images an einen Docker Hub und die Google Artifact Registry. Darüber hinaus wird die Verwendung der System.AccessToken sicheren Authentifizierung in Ihrer Pipeline beschrieben.

Sie erfahren, wie Sie eine YAML-Pipeline erstellen und ein Docker-Image in eine Containerregistrierung übertragen. Die Docker@2 Aufgabe wird verwendet, um das Image in die Containerregistrierung zu erstellen und zu übertragen.

Voraussetzungen

  • Ein Azure DevOps-Projekt.
  • Eine Containerregistrierung (Docker Hub, Google Artifact Registry oder Azure Container Registry).
  • GitHub-Repository mit einem Dockerfile. Wenn Sie über keins verfügen, können Sie das Beispiel-Repository in Ihrem Browser verwenden, wechseln Sie zum Beispiel-Repository, und verzweigen Sie es dann zu Ihrem GitHub-Konto.
  • Docker Wenn Sie einen selbst gehosteten Agent verwenden, stellen Sie sicher, dass Docker installiert ist und das Docker-Modul mit erhöhten Berechtigungen ausgeführt wird. Von Microsoft gehostete Agents haben Docker vorinstalliert.
  • Ein Azure DevOps-Projekt.
  • Eine Containerregistrierung (Docker Hub oder Google Artifact Registry).
  • GitHub-Repository mit einem Dockerfile. Wenn Sie über keins verfügen, können Sie das Beispiel-Repository in Ihrem Browser verwenden, wechseln Sie zum Beispiel-Repository, und verzweigen Sie es dann zu Ihrem GitHub-Konto.
  • Docker Wenn Sie einen selbst gehosteten Agent verwenden, stellen Sie sicher, dass Docker installiert ist und das Docker-Modul mit erhöhten Berechtigungen ausgeführt wird. Von Microsoft gehostete Agents haben Docker vorinstalliert.

Erstellen einer Docker-Dienstverbindung

Bevor Sie Containerimages in eine Registrierung übertragen, müssen Sie eine Dienstverbindung in Azure DevOps erstellen. Diese Dienstverbindung speichert die Anmeldeinformationen, die für die sichere Authentifizierung bei der Containerregistrierung erforderlich sind. Wechseln Sie zur Seite "Dienstverbindungen " in Ihrem Azure DevOps-Projekt, um eine neue Dienstverbindung zu erstellen, und wählen Sie den Verbindungstyp "Docker Registry " aus.

Es gibt verschiedene Prozesse zum Erstellen einer Dienstverbindung für einen Docker Hub und eine Google Artifact Registry.

Wählen Sie unter Dienstverbindung für die Docker-Registrierung die Option Docker Hub aus, und geben Sie Ihren Benutzernamen und Ihr Kennwort an, um eine Docker-Dienstverbindung zu erstellen.

Erstellen einer Azure-Pipeline zum Erstellen und Pushen eines Docker-Images

Die Docker@2 Aufgabe wurde entwickelt, um den Prozess des Erstellens, Pushens und Verwaltens von Docker-Images in Ihren Azure-Pipelines zu optimieren. Diese Aufgabe unterstützt eine vielzahl von Docker-Befehlen, einschließlich Build, Push, Anmeldung, Abmelden, Start, Beenden und Ausführen.

In den folgenden Schritten wird beschrieben, wie Sie eine YAML-Pipeline erstellen, die die Docker@2 Aufgabe verwendet, um das Image zu erstellen und zu übertragen.

  1. Navigieren Sie zu Ihrem Azure DevOps-Projekt, und wählen Sie "Pipelines " im linken Menü aus.

  2. Wählen Sie "Neue Pipeline" aus, um eine neue Pipeline zu erstellen.

  3. Wählen Sie GitHub oder GitHub Enterprise Server als Speicherort für Ihren Quellcode aus.

  4. Wenn Sie Azure Pipelines noch autorisiert haben, eine Verbindung zu Ihrem GitHub Enterprise Server-Konto herzustellen, dann tun Sie es jetzt.

    1. Wählen Sie Verbindung zu GitHub Enterprise Server herstellen aus.
    2. Geben Sie Ihre Kontodetails ein und wählen Sie anschließend Überprüfen und speichern aus.
  5. Wählen Sie Ihr Repository aus. Wenn Sie zu GitHub umgeleitet werden

  6. Wählen Sie die Startpipelinevorlage aus, um eine grundlegende Pipelinekonfiguration zu erstellen.

  7. Ersetzen Sie den Inhalt von azure-pipelines.yml durch den folgenden Code.

  8. Je nachdem, ob Sie eine Linux- oder Windows-App bereitstellen, stellen Sie sicher, dass Sie vmImage auf ubuntu-latest bzw. windows-latest festlegen. Wenn Sie einen selbst gehosteten Agent verwenden, legen Sie diesen auf den Namen des Pools fest vmImage , der den selbst gehosteten Agent mit Docker-Funktion enthält. Sie können die demands: docker Eigenschaft hinzufügen, um sicherzustellen, dass ein Agent mit Docker installiert ist.

  9. Ersetzen Sie den <docker connection> Namen der zuvor erstellten Docker-Dienstverbindung.

  10. Ersetzen Sie ihn <target repository name> durch den Namen des Repositorys in der Containerregistrierung, in dem Sie das Image übertragen möchten. Beispiel: <your-docker-hub-username>/<repository-name>.

    
     trigger:
     - main
    
     pool:
     vmImage: 'ubuntu-latest' 
    
     variables:
     repositoryName: '<target repository name>'
    
     steps:
     - task: Docker@2
     inputs:
     containerRegistry: '<docker connection>'
     repository: $(repositoryName)
     command: 'buildAndPush'
     Dockerfile: '**/Dockerfile'
    
    
  11. Wenn Sie fertig sind, klicken Sie auf Speichern und ausführen.

  12. Wenn Sie die azure-pipelines.yml Datei in Ihrem Repository speichern, werden Sie aufgefordert, eine Commit-Nachricht hinzuzufügen. Geben Sie eine Nachricht ein und wählen Sie anschließend Speichern und ausführen aus.

Achten Sie bei der Verwendung von selbstgehosteten Agents darauf, dass Docker auf dem Host des Agents installiert ist und die Docker-Engine/der Docker-Daemon mit erhöhten Rechten ausgeführt wird.

Docker muss auf dem Host des Agents installiert sein und die Docker-Engine/der Docker-Daemon muss mit erhöhten Rechten ausgeführt werden, damit Sie das Bild erstellen können. Führen Sie die folgenden Schritte aus, um Ihre Pipeline mithilfe des YAML-Pipeline-Editors zu erstellen.

  1. Wechseln Sie zu Ihrer Sammlung und erstellen Sie ein Projekt.

  2. Wählen Sie in Ihrem Projekt Pipelines aus.

  3. Wählen Sie Pipeline erstellen aus.

  4. Wählen Sie als Standort Ihres Quellcodes GitHub Enterprise Server aus.

  5. Wenn Sie Azure Pipelines noch autorisiert haben, eine Verbindung zu Ihrem GitHub Enterprise Server-Konto herzustellen, dann tun Sie es jetzt.

    1. Wählen Sie Verbindung zu GitHub Enterprise Server herstellen aus.
    2. Geben Sie Ihre Kontodetails ein und wählen Sie anschließend Überprüfen und speichern aus.
  6. Wählen Sie Ihr Repository aus. Wenn Sie zu GitHub umgeleitet werden, um die Azure Pipelines-App zu installieren, wählen Sie Zustimmen und installieren aus.

  7. Wählen Sie die Vorlage Ein Docker-Image erstellen aus, um Ihre Pipeline zu konfigurieren.

  8. Ersetzen Sie im YAML-Pipeline-Editor den Inhalt der YAML-Datei durch den folgenden Code. Ersetzen Sie den Poolnamen mit dem Namen des Pools, der Ihren selbstgehosteten Agent mit Docker-Funktion enthält.

  9. Je nachdem, ob Sie eine Linux- oder Windows-App bereitstellen, stellen Sie sicher, dass Sie vmImage auf ubuntu-latest bzw. windows-latest festlegen.

  10. Ersetzen Sie ihn <target repository name> durch den Namen des Repositorys in der Containerregistrierung, in dem Sie das Image übertragen möchten. Beispiel: <your-docker-hub-username>/<repository-name>.

  11. Ersetzen Sie den <docker connection> Namen der zuvor erstellten Docker-Dienstverbindung.

    
    trigger:
    - main
    
    pool:
    name: default
    demands: docker
    
    variables:
    repositoryName: '<target repository name>'
    
    steps:
    - task: Docker@2
    inputs:
    containerRegistry: '<docker connection>'
    repository: $(repositoryName)
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'
    
    
  12. Klicken Sie auf Speichern und ausführen.

  13. Wählen Sie auf der Seite Speichern und ausführen erneut die Option Speichern und ausführen aus.

Sie können die Pipelineausführung überwachen und die Protokolle anzeigen, um das Docker-Image anzuzeigen, das erstellt und an die Containerregistrierung übertragen wird.

Verwenden von System.AccessToken für die Authentifizierung in Docker@2 Aufgabe

Sie können sich mit einer Containerregistrierung mithilfe der System.AccessToken von Azure DevOps bereitgestellten Registrierung authentifizieren. Dieses Token ermöglicht den sicheren Zugriff auf Ressourcen in Ihrer Pipeline, ohne vertrauliche Anmeldeinformationen verfügbar zu machen.

Im folgenden YAML-Pipelinebeispiel wird die Docker@2 Aufgabe verwendet, um sich bei der Containerregistrierung anzumelden und das Docker-Image zu übertragen. Der System.AccessToken Befehl wird als Umgebungsvariable festgelegt, um die Docker-Befehle zu authentifizieren.

Ersetzen Sie den <docker connection> Namen der Docker-Registrierungsdienstverbindung. Ersetzen Sie den <your repository> Namen Ihres Docker-Repositorys.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  SYSTEM_ACCESSTOKEN: $(System.AccessToken)

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- task: Docker@2
  inputs:
    command: buildAndPush
    repository: '<your repository>'
    dockerfile: '**/Dockerfile'
    tags: |
      $(Build.BuildId)
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)