Pushen eines Images

Azure DevOps Services

Azure Pipelines können verwendet werden, um Bilder an Containerregistrierungen wie Azure Container Registry (ACR), Docker Hub, Google Container Registries und andere zu pushen.

Pushschritt in der Pipeline

Der folgende YAML-Codeausschnitt zeigt die Verwendung der Docker-Registrierungsdienstverbindung zusammen mit einer Docker-Aufgabe zum Anmelden und Push an eine Containerregistrierung. Instanzen der Docker-Registrierungsdienstverbindung dienen als sichere Optionen zum Speichern von Anmeldeinformationen, die zum Anmelden bei der Containerregistrierung erforderlich sind, bevor sie das Image pushen. Diese Dienstverbindungen können direkt in Docker-Aufgaben verwiesen werden, um sich bei der Registrierung anzumelden, ohne eine Skriptaufgabe für Docker-Anmeldung hinzuzufügen.

- task: Docker@2
  displayName: Push image
  inputs:
    containerRegistry: |
      $(dockerHub)
    repository: $(imageName)
    command: push
    tags: |
      test1
      test2

Azure Container Registry

Mit der option Azure Container Registry für die Docker-Registrierungsdienstverbindung kann das Abonnement (das der Azure Active Directory Identität des Benutzers zugeordnet ist, der in Azure DevOps angemeldet ist) und die Containerregistrierung innerhalb des Abonnements ausgewählt werden, um die Dienstverbindung zu erstellen. Diese Dienstverbindungen können später von einer Pipelineaufgabe wie im obigen YAML-Codeausschnitt dargestellt werden.

Beim Erstellen einer neuen Pipeline für ein Repository mit Dockerfile beschreibt das Build- und Push-To-Azure Container Registry-Dokument automatisch die Docker-Vorlage, die von Azure Pipelines beim Erkennen von Dockerfile im Repository empfohlen wird. Das Azure-Abonnement und Azure Container Registry Eingaben für die Vorlagenkonfiguration werden von Azure Pipelines verwendet, um die Docker-Registrierungsdienstverbindung automatisch zu erstellen und sogar eine funktionierende Build- und Pushpipeline zu erstellen, indem sie auf die erstellte Dienstverbindung verweisen.

Docker Hub

Wählen Sie die Option Docker Hub unter Docker-Registrierungsdienstverbindung aus, und geben Sie den Benutzernamen und das Kennwort an, das für die Überprüfung und Erstellung der Dienstverbindung erforderlich ist.

Google Container Registry

Die folgenden Schritte führen Sie durch die Erstellung der Docker-Registrierungsdienstverbindung, die der Google Container Registry zugeordnet ist:

  1. Öffnen Sie Ihr Projekt in der GCP-Konsole, und öffnen Sie dann Cloud Shell

  2. Um Zeit beim Eingeben der Projekt-ID und der Compute Engine-Zonenoptionen zu sparen, legen Sie Standardkonfigurationswerte fest, indem Sie die folgenden Befehle ausführen:

    gcloud config set project [PROJECT_NAME]
    gcloud config set compute/zone [ZONE]
    
  3. Ersetzen Sie [PROJECT_NAME] den Namen Ihres GCP-Projekts und ersetzen [ZONE] Sie durch den Namen der Zone, die Sie zum Erstellen von Ressourcen verwenden möchten. Wenn Sie nicht sicher sind, welche Zone ausgewählt werden soll, verwenden Sie us-central1-a. Beispiel:

    gcloud config set project azure-pipelines-test-project-12345
    gcloud config set compute/zone us-central1-a
    
  4. Aktivieren Sie die Containerregistrierungs-API für Ihr Projekt:

    gcloud services enable containerregistry.googleapis.com
    
  5. Erstellen Sie ein Dienstkonto für Azure Pipelines zum Veröffentlichen von Docker-Images:

    gcloud iam service-accounts create azure-pipelines-publisher --display-name "Azure Pipelines Publisher"
    
  6. Weisen Sie der Dienstkonto die Storage Administrator-IAM-Rolle zu:

    PROJECT_NUMBER=$(gcloud projects describe \
    $(gcloud config get-value core/project) \
    --format='value(projectNumber)')
    
    AZURE_PIPELINES_PUBLISHER=$(gcloud iam service-accounts list \
        --filter="displayName:Azure Pipelines Publisher" \
        --format='value(email)')
    
    gcloud projects add-iam-policy-binding \
        $(gcloud config get-value core/project) \
        --member serviceAccount:$AZURE_PIPELINES_PUBLISHER \
        --role roles/storage.admin
    
  7. Generieren Sie einen Dienstkontoschlüssel:

    gcloud iam service-accounts keys create \
    azure-pipelines-publisher.json --iam-account $AZURE_PIPELINES_PUBLISHER
    
    tr -d '\n' < azure-pipelines-publisher.json > azure-pipelines-publisher-oneline.json
    

    Starten Sie den Code-Editor, indem Sie in der oberen rechten Ecke der Cloud Shell auf die Schaltfläche klicken:

    Badge

  8. Öffnen Sie die Datei named azure-pipelines-publisher-oneline.json. Sie benötigen den Inhalt dieser Datei in einem der folgenden Schritte:

  9. Wählen Sie in Ihrer Azure DevOps Organisation Project Einstellungen aus, und wählen Sie dann Pipelines -> Dienstverbindungen aus.

  10. Wählen Sie "Neue Dienstverbindung" aus, und wählen Sie "Docker-Registrierung" aus.

  11. Geben Sie im Dialogfeld Werte für die folgenden Felder ein:

  • Docker Registry:https://gcr.io/[PROJECT-ID], wo [PROJECT-ID] der Name Ihres GCP-Projekts ist.
  • Docker-ID:_json_key
  • Docker-Kennwort: Einfügen des Inhalts von azure-pipelines-publisher-oneline.json
  • Dienstverbindungsname:gcrServiceConnection
  1. Wählen Sie "Speichern " aus, um die Dienstverbindung zu erstellen.