Condividi tramite


Usare Azure Pipelines per compilare ed eseguire il push di immagini del contenitore nei registri

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

Questo articolo illustra l'installazione e la configurazione per l'uso di Azure Pipelines per compilare ed eseguire il push di un'immagine Docker in un Registro Azure Container, nell'hub Docker e in Google Artifact Registry. Vengono inoltre fornite informazioni dettagliate sull'uso di System.AccessToken per l'autenticazione sicura all'interno della pipeline.

Questo articolo illustra la configurazione e la configurazione per l'uso di Azure Pipelines per compilare ed eseguire il push di un'immagine Docker in un hub Docker e in Google Artifact Registry. Vengono inoltre fornite informazioni dettagliate sull'uso di System.AccessToken per l'autenticazione sicura all'interno della pipeline.

Si apprenderà come creare una pipeline YAML per compilare ed eseguire il push di un'immagine Docker in un registro contenitori. L'attività Docker@2 viene usata per compilare ed eseguire il push dell'immagine nel registro contenitori.

Prerequisiti

  • Un progetto Azure DevOps.
  • Registro contenitori (Docker Hub, Google Artifact Registry o Registro Azure Container).
  • Un repository GitHub con un Dockerfile. Se non è disponibile, è possibile usare il repository di esempio Nel browser, passare al repository di esempio e quindi copiarlo tramite fork nell'account GitHub.
  • Docker. Se si usa un agente self-hosted, assicurarsi che Docker sia installato e che il motore Docker in esecuzione con privilegi elevati. Gli agenti ospitati da Microsoft includono Docker preinstallato.
  • Un progetto Azure DevOps.
  • Registro contenitori (Docker Hub o Google Artifact Registry).
  • Un repository GitHub con un Dockerfile. Se non è disponibile, è possibile usare il repository di esempio Nel browser, passare al repository di esempio e quindi copiarlo tramite fork nell'account GitHub.
  • Docker. Se si usa un agente self-hosted, assicurarsi che Docker sia installato e che il motore Docker in esecuzione con privilegi elevati. Gli agenti ospitati da Microsoft includono Docker preinstallato.

Creare una connessione al servizio Docker

Prima di eseguire il push delle immagini del contenitore in un registro, è necessario creare una connessione al servizio in Azure DevOps. Questa connessione al servizio archivia le credenziali necessarie per l'autenticazione sicura con il registro contenitori. Passare alla pagina Connessioni al servizio nel progetto Azure DevOps per creare una nuova connessione al servizio e selezionare il tipo di connessione registro Docker.

Esistono diversi processi per creare una connessione al servizio per un hub Docker e un Registro artefatti di Google.

Scegliere l'opzione Docker Hub in Connessione al servizio registro Docker e specificare il nome utente e la password per creare una connessione al servizio Docker.

Creare una pipeline di Azure per compilare ed eseguire il push di un'immagine Docker

L'attività Docker@2 è progettata per semplificare il processo di compilazione, push e gestione delle immagini Docker all'interno di Azure Pipelines. Questa attività supporta un'ampia gamma di comandi Docker, tra cui compilazione, push, accesso, disconnessione, avvio, arresto ed esecuzione.

I passaggi seguenti illustrano come creare una pipeline YAML che usa l'attività Docker@2 per compilare ed eseguire il push dell'immagine.

  1. Passare al progetto Azure DevOps e selezionare Pipeline dal menu a sinistra.

  2. Selezionare Nuova pipeline per creare una nuova pipeline.

  3. Selezionare GitHub o GitHub Enterprise Server come percorso per il codice sorgente.

  4. Se non è già stato fatto, autorizzare Azure Pipelines a connettersi all'account GitHub Enterprise Server.

    1. Selezionare Connetti a GitHub Enterprise Server.
    2. Immettere i dettagli dell'account e quindi selezionare Verifica e salva.
  5. Selezionare il repository. Se si viene reindirizzati a GitHub

  6. Selezionare il modello della pipeline di avvio per creare una configurazione della pipeline di base.

  7. Sostituire il contenuto di azure-pipelines.yml con il codice seguente.

  8. In base al fatto che si distribuisca un'app Linux o Windows, assicurarsi di impostare rispettivamente su vmImage ubuntu-latest o windows-latest. Se si usa un agente self-hosted, impostare vmImage sul nome del pool che contiene l'agente self-hosted con la funzionalità Docker. È possibile aggiungere la demands: docker proprietà per assicurarsi che sia selezionato un agente con Docker installato.

  9. Sostituire <docker connection> con il nome della connessione al servizio Docker creata in precedenza.

  10. Sostituire <target repository name> con il nome del repository nel registro contenitori in cui si vuole eseguire il push dell'immagine. Ad esempio: <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. Al termine, selezionare Salva ed esegui.

  12. Quando si salva il file azure-pipelines.yml nel repository, viene richiesto di aggiungere un messaggio di commit. Immettere un messaggio e quindi selezionare Salva ed esegui.

Quando si usano agenti self-hosted, assicurarsi che Docker sia installato nell'host dell'agente e che il motore/daemon Docker sia in esecuzione con privilegi elevati.

Per compilare l'immagine, Docker deve essere installato nell'host dell'agente e il motore/daemon Docker deve essere in esecuzione con privilegi elevati. Usare la procedura seguente per creare la pipeline usando l'editor della pipeline YAML.

  1. Passare alla raccolta e creare un progetto.

  2. Nel progetto selezionare Pipeline.

  3. Seleziona Crea pipeline.

  4. Selezionare GitHub Enterprise Server come percorso per il codice sorgente.

  5. Se non è già stato fatto, autorizzare Azure Pipelines a connettersi all'account GitHub Enterprise Server.

    1. Selezionare Connetti a GitHub Enterprise Server.
    2. Immettere i dettagli dell'account e quindi selezionare Verifica e salva.
  6. Selezionare il repository. Se si viene reindirizzati a GitHub per installare l'app Azure Pipelines, selezionare Approva e installa.

  7. Per configurare la pipeline, selezionare il modello Di compilazione di un'immagine Docker.

  8. Nell'editor della pipeline YAML sostituire il contenuto del file YAML con il codice seguente. Sostituire il nome del pool con il nome del pool che contiene l'agente self-hosted con la funzionalità Docker.

  9. In base al fatto che si distribuisca un'app Linux o Windows, assicurarsi di impostare rispettivamente su vmImage ubuntu-latest o windows-latest.

  10. Sostituire <target repository name> con il nome del repository nel registro contenitori in cui si vuole eseguire il push dell'immagine. Ad esempio: <your-docker-hub-username>/<repository-name>.

  11. Sostituire <docker connection> con il nome della connessione al servizio Docker creata in precedenza.

    
    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. Seleziona Salva ed Esegui.

  13. Nella pagina Salva ed esegui selezionare Salva ed esegui di nuovo.

È possibile controllare l'esecuzione della pipeline e visualizzare i log per visualizzare l'immagine Docker compilata e sottoposta a push nel registro contenitori.

Uso di System.AccessToken per l'autenticazione nell'attività Docker@2

È possibile eseguire l'autenticazione con un registro contenitori usando l'oggetto System.AccessToken fornito da Azure DevOps. Questo token consente l'accesso sicuro alle risorse all'interno della pipeline senza esporre credenziali sensibili.

L'esempio di pipeline YAML seguente, l'attività Docker@2 viene usata per accedere al registro contenitori ed eseguire il push dell'immagine Docker. System.AccessToken viene impostato come variabile di ambiente per autenticare i comandi Docker.

Sostituire <docker connection> con il nome della connessione al servizio del Registro di sistema Docker. Sostituire <your repository> con il nome del repository Docker.

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)