Använda Azure Pipelines för att skapa och skicka containeravbildningar till register

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

Den här artikeln vägleder dig genom konfigurationen för att använda Azure Pipelines för att skapa och skicka en Docker-avbildning till ett Azure Container Registry, Docker Hub och Google Artifact Registry. Dessutom beskrivs användningen av System.AccessToken för säker autentisering i din pipeline.

Den här artikeln vägleder dig genom konfigurationen för att använda Azure Pipelines för att skapa och skicka en Docker-avbildning till en Docker Hub och Google Artifact Registry. Dessutom beskrivs användningen av System.AccessToken för säker autentisering i din pipeline.

Du lär dig hur du skapar en YAML-pipeline för att skapa och skicka en Docker-avbildning till ett containerregister. Den Docker@2 uppgiften används för att skapa och skicka avbildningen till containerregistret.

Förutsättningar

  • Ett Azure DevOps-projekt.
  • Ett containerregister (Docker Hub, Google Artifact Registry eller Azure Container Registry).
  • En GitHub-lagringsplats med en Dockerfile. Om du inte har en kan du använda exempellagringsplatsen I webbläsaren går du till exempellagringsplatsen och förgrenar den till ditt GitHub-konto.
  • Docker. Om du använder en lokalt installerad agent kontrollerar du att Docker är installerat och att Docker-motorn körs med förhöjd behörighet. Microsoft-värdbaserade agenter har Docker förinstallerat.
  • Ett Azure DevOps-projekt.
  • Ett containerregister (Docker Hub eller Google Artifact Registry).
  • En GitHub-lagringsplats med en Dockerfile. Om du inte har en kan du använda exempellagringsplatsen I webbläsaren går du till exempellagringsplatsen och förgrenar den till ditt GitHub-konto.
  • Docker. Om du använder en lokalt installerad agent kontrollerar du att Docker är installerat och att Docker-motorn körs med förhöjd behörighet. Microsoft-värdbaserade agenter har Docker förinstallerat.

Skapa en Docker-tjänstanslutning

Innan du skickar containeravbildningar till ett register måste du skapa en tjänstanslutning i Azure DevOps. Den här tjänstanslutningen lagrar de autentiseringsuppgifter som krävs för att autentisera säkert med containerregistret. Gå till sidan Tjänstanslutningar i ditt Azure DevOps-projekt för att skapa en ny tjänstanslutning och välj anslutningstypen Docker Registry .

Det finns olika processer för att skapa en tjänstanslutning för en Docker Hub och ett Google Artifact Registry.

Välj alternativet Docker Hub under Docker-registertjänstanslutning och ange ditt användarnamn och lösenord för att skapa en Docker-tjänstanslutning.

Skapa en Azure Pipeline för att skapa och push-överföra en Docker-avbildning

Den Docker@2 uppgiften är utformad för att effektivisera processen med att skapa, push-överföra och hantera Docker-avbildningar i dina Azure Pipelines. Den här uppgiften stöder en mängd olika Docker-kommandon, inklusive build, push, login, logout, start, stop och run.

Följande steg beskriver hur du skapar en YAML-pipeline som använder den Docker@2 uppgiften för att skapa och push-överföra avbildningen.

  1. Gå till ditt Azure DevOps-projekt och välj Pipelines på den vänstra menyn.

  2. Välj Ny pipeline för att skapa en ny pipeline.

  3. Välj GitHub eller GitHub Enterprise Server som plats för källkoden.

  4. Om du inte redan har gjort det kan du auktorisera Azure Pipelines att ansluta till ditt GitHub Enterprise Server-konto.

    1. Välj Anslut till GitHub Enterprise Server.
    2. Ange din kontoinformation och välj sedan Verifiera och spara.
  5. Välj din lagringsplats. Om du omdirigeras till GitHub

  6. Välj mallen Startpipeline för att skapa en grundläggande pipelinekonfiguration.

  7. Ersätt innehållet i azure-pipelines.yml med följande kod.

  8. Beroende på om du distribuerar en Linux- eller Windows-app måste du ange vmImage antingen ubuntu-latest eller windows-latest. Om du använder en lokalt installerad agent anger du vmImage namnet på poolen som innehåller den lokalt installerade agenten med Docker-funktionen. Du kan lägga till demands: docker egenskapen för att säkerställa att en agent med Docker installerad är markerad.

  9. Ersätt <docker connection> med namnet på Docker-tjänstanslutningen som du skapade tidigare.

  10. Ersätt <target repository name> med namnet på lagringsplatsen i containerregistret där du vill push-överföra avbildningen. Exempel: <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. När du är klar väljer du Spara och kör.

  12. När du sparar azure-pipelines.yml-filen på lagringsplatsen uppmanas du att lägga till ett incheckningsmeddelande. Ange ett meddelande och välj sedan Spara och kör.

När du använder lokalt installerade agenter måste du se till att Docker är installerat på agentens värd och att Docker-motorn/daemonen körs med förhöjd behörighet.

För att skapa avbildningen måste Docker installeras på agentens värd och Docker-motorn/daemon måste köras med förhöjd behörighet. Använd följande steg för att skapa din pipeline med yaml-pipelineredigeraren.

  1. Gå till samlingen och skapa ett projekt.

  2. I projektet väljer du Pipelines.

  3. Välj Skapa pipeline.

  4. Välj GitHub Enterprise Server som plats för källkoden.

  5. Om du inte redan har gjort det kan du auktorisera Azure Pipelines att ansluta till ditt GitHub Enterprise Server-konto.

    1. Välj Anslut till GitHub Enterprise Server.
    2. Ange din kontoinformation och välj sedan Verifiera och spara.
  6. Välj din lagringsplats. Om du omdirigeras till GitHub för att installera Azure Pipelines-appen väljer du Godkänn och installera.

  7. Om du vill konfigurera din pipeline väljer du mallen Skapa en Docker-avbildning .

  8. I YAML-pipelineredigeraren ersätter du innehållet i YAML-filen med följande kod. Ersätt poolnamnet med namnet på poolen som innehåller din egen värdbaserade agent med Docker-funktionen.

  9. Beroende på om du distribuerar en Linux- eller Windows-app måste du ange vmImage antingen ubuntu-latest eller windows-latest.

  10. Ersätt <target repository name> med namnet på lagringsplatsen i containerregistret där du vill push-överföra avbildningen. Exempel: <your-docker-hub-username>/<repository-name>

  11. Ersätt <docker connection> med namnet på Docker-tjänstanslutningen som du skapade tidigare.

    
    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. Välj Spara och kör.

  13. På sidan Spara och kör väljer du Spara och kör igen.

Du kan se pipelinekörningen och visa loggarna för att se Docker-avbildningen som skapas och push-överföras till containerregistret.

Använda System.AccessToken för autentisering i Docker@2 uppgift

Du kan autentisera med ett containerregister med hjälp av den System.AccessToken som tillhandahålls av Azure DevOps. Den här token ger säker åtkomst till resurser i din pipeline utan att exponera känsliga autentiseringsuppgifter.

I följande YAML-pipelineexempel används den Docker@2 uppgiften för att logga in i containerregistret och push-överföra Docker-avbildningen. System.AccessToken Anges som en miljövariabel för att autentisera Docker-kommandona.

Ersätt <docker connection> med anslutningsnamnet för Docker-registertjänsten. Ersätt <your repository> med namnet på Docker-lagringsplatsen.

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)