Freigeben über


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

Azure DevOps Services

Dieser Artikel führt Sie durch die Erstellung einer Pipeline, um ein Docker Image zu erstellen und an eine Azure Container Registry oder einen Docker Hub zu pushen.

Voraussetzungen

Produkt Voraussetzungen
Azure DevOps - Ein Azure DevOps-Projekt.
- Berechtigungen:
    - Um Zugriff auf alle Pipelines im Projekt zu gewähren: Sie müssen Mitglied der Gruppe Projektadministratoren sein.
    - Um Dienst-Verbindungen zu erstellen: Sie müssen die Rolle Administrator oder Creator für Dienstverbindungen haben.
– Wenn Sie einen selbst gehosteten Agent verwenden, stellen Sie sicher, dass Docker installiert ist und das Docker-Modul mit erhöhten Rechten ausgeführt wird. Von Microsoft gehostete Agents haben Docker vorinstalliert.
GitHub - Ein GitHub--Konto.
- Ein GitHub-Repository mit einer Dockerdatei. Verwenden Sie das Beispiel-Repository, wenn Sie kein eigenes Projekt haben.
- Eine GitHub-Dienstverbindung zur Autorisierung von Azure Pipelines.
Azure - Ein Azure-Abonnement.
- Eine Azure Container Registry.
Produkt Voraussetzungen
Azure DevOps - Ein Azure DevOps-Projekt.
- Berechtigungen:
    - Um Zugriff auf alle Pipelines im Projekt zu gewähren: Sie müssen Mitglied der Projektadministratoren-Gruppe sein.
    - Um Dienst-Verbindungen zu erstellen: Sie müssen die Rolle Administrator oder Creator für Dienstverbindungen haben.
– Wenn Sie einen selbst gehosteten Agent verwenden, stellen Sie sicher, dass Docker installiert ist und das Docker-Modul mit erhöhten Rechten ausgeführt wird. Von Microsoft gehostete Agents haben Docker vorinstalliert.
GitHub - Ein GitHub--Konto.
- Ein GitHub-Repository mit einer Dockerfile. Verwenden Sie das Beispiel-Repository, wenn Sie kein eigenes Projekt haben.
- Eine GitHub-Dienstverbindung zur Autorisierung von Azure Pipelines.
Docker Hub - Ein Docker Hub-Konto.
- Ein Docker Hub-IMAGE-Repository.

Erstellen einer Docker-Registrierungsdienstverbindung

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. Weitere Informationen finden Sie unter Docker Registry-Dienstverbindungen.

  1. Wählen Sie in Ihrem Azure DevOps-Projekt Projekteinstellungen>Dienstverbindungen.

    Screenshot der Auswahl der Projekteinstellungen. Screenshot der Auswahl der Projekteinstellungen.

  2. Wählen Sie Neue Dienstverbindung und Docker-Registry.

    Screenshot der Auswahl von Docker Registry.

  3. Wählen Sie Docker Hub aus, und geben Sie die folgenden Informationen ein:

    Feld Beschreibung
    Docker-ID Geben Sie Ihre Docker-ID ein.
    Docker-Kennwort Geben Sie Ihr Docker-Kennwort ein.
    Dienstverbindungsname Geben Sie einen Namen für die Dienstverbindung ein.
    Zugriffserlaubnis für alle Pipelines gewähren Wählen Sie diese Option aus, um zugriff auf alle Pipelines zu gewähren.

    Screenshot des Dialogs Docker Hub-Dienstverbindung.

  4. Klicken Sie auf Verify and save.

Erstellen Sie eine Pipeline zum Erstellen und Pushen eines Docker Images

Die Docker@2 Aufgabe wird verwendet, um das Image in die Containerregistrierung zu erstellen und zu übertragen. 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.

Führen Sie die folgenden Schritte aus, um eine YAML-Pipeline zu erstellen, die die Docker@2 Aufgabe verwendet, um das Image zu erstellen und zu übertragen.

  1. Wählen Sie in Ihrem Azure DevOps Projekt Pipelines und Neue Pipeline.

  2. Wählen Sie GitHub- als Speicherort Ihres Quellcodes aus, und wählen Sie Ihr Repository aus.

    • Wenn Sie zu GitHub umgeleitet werden, um sich anzumelden, geben Sie Ihre GitHub-Anmeldeinformationen ein.
    • Wenn Sie zu GitHub umgeleitet werden, um die Azure Pipelines-App zu installieren, wählen Sie Zustimmen und installieren aus.
  3. Wählen Sie Ihr Repository aus.

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

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

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      repositoryName: '<target repository name>' 
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker registry service connection>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. Bearbeiten Sie die YaML-Pipelinedatei wie folgt:

    • Ersetzen Sie ihn <target repository name> durch den Namen des Repositorys in der Containerregistrierung, in dem Sie das Image übertragen möchten.
    • Ersetzen Sie <docker registry service connection> durch den Namen der zuvor erstellten Docker-Registrierungsdienstverbindung.
  7. Wenn Sie fertig sind, wählen Sie Speichern und ausführen>Speichern und ausführen.

  8. Wählen Sie Job, um die Protokolle anzuzeigen und zu überprüfen, ob die Pipeline erfolgreich ausgeführt wurde.

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

  2. Wählen Sie Neue Pipeline aus.

  3. Wählen Sie GitHub- als Speicherort Ihres Quellcodes aus, und wählen Sie Ihr Repository aus.

    • Wenn Sie zu GitHub umgeleitet werden, um sich anzumelden, geben Sie Ihre GitHub-Anmeldeinformationen ein.
    • Wenn Sie zu GitHub umgeleitet werden, um die Azure Pipelines-App zu installieren, wählen Sie Zustimmen und installieren aus.
  4. Wählen Sie die Vorlage Docker – Build and push an image to Azure Container Registry.

  5. Wählen Sie Ihr Azure Abonnement und Fortfahren.

  6. Wählen Sie Ihre Container Registry aus und wählen Sie dann Validieren und konfigurieren.

    Beispiel für eine YAML-Pipeline:

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '7f9dc28e-5551-43ee-891f-33bf61a995de'
      imageRepository: 'usernamepipelinesjavascriptdocker'
      containerRegistry: 'repoistoryname.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    
  7. Wählen Sie erneut Speichern und ausführen und Speichern und ausführen.

  8. Wählen Sie Job, um die Protokolle anzuzeigen und zu überprüfen, ob die Pipeline erfolgreich ausgeführt wurde.

Die Docker-Vorlage erstellt die Dienstverbindung zu Ihrer Azure Container Registry und verwendet die Docker@2-Aufgabe, um das Docker-Image zu erstellen und an die Registrierung zu pushen.

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.

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.