Condividi tramite


Compilare e pubblicare immagini Docker in Registro Azure Container

Azure DevOps Services | Azure DevOps Server 2022

Usando Azure Pipelines, è possibile configurare un flusso di lavoro della pipeline per compilare e pubblicare le immagini Docker in Registro Azure Container. In questo articolo verrà spiegato come:

  • Creare un Registro Azure Container
  • Configurare un agente self-hosted in una macchina virtuale di Azure
  • Configurare l'identità del servizio gestito
  • Creare una connessione al servizio Registro Docker
  • Compilare e pubblicare l'immagine in Registro Azure Container

Prerequisiti

Ottenere il codice

Creare una copia tramite fork o clonare l'app di esempio da seguire con questa esercitazione.

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Creare un Registro Azure Container

  1. Passare al portale di Azure.

  2. Selezionare Crea una risorsa nel pannello di spostamento a sinistra e quindi contenitori e quindi Registro Contenitori.

  3. Selezionare la sottoscrizione e quindi selezionare il gruppo di risorse o crearne uno nuovo.

  4. Immettere un nome del Registro di sistema per il registro contenitori. Il nome del Registro di sistema deve essere univoco in Azure e deve contenere almeno 5 caratteri.

  5. Selezionare la località e lo SKU preferiti e quindi selezionare Rivedi e crea.

  6. Rivedere le impostazioni e quindi selezionare Crea al termine.

Configurare una macchina virtuale dell'agente self-hosted

Per usare l'identità del servizio gestita con Azure Pipelines per pubblicare immagini Docker in Registro Azure Container, è necessario configurare il proprio agente self-hosted in una macchina virtuale di Azure.

Creazione di una macchina virtuale

  1. Passare al portale di Azure.

  2. Selezionare Crea una risorsa nel pannello di spostamento a sinistra e quindi selezionare Macchina virtuale ->Crea.

  3. Selezionare la sottoscrizione e quindi selezionare il gruppo di risorse usato per creare il registro contenitori.

  4. Assegnare un nome alla macchina virtuale e scegliere un'immagine.

  5. Immettere il nome utente e la password e quindi selezionare Rivedi e crea.

  6. Rivedere le impostazioni e quindi selezionare Crea al termine.

  7. Fare clic su Vai alla risorsa al termine della distribuzione.

Creare un pool di agenti

  1. Dal progetto Azure DevOps selezionare l'icona a forma di ingranaggio Icona a forma di ingranaggio per passare alle impostazioni del progetto.

  2. Selezionare Pool di agenti e quindi Aggiungi pool.

  3. Selezionare Nuovo e quindi Self-hosted dal menu a discesa Tipo di pool.

  4. Assegnare un nome al pool e quindi selezionare La casella di controllo Concedi l'autorizzazione di accesso a tutte le pipeline.

  5. Al termine, fare clic su Crea.

  6. Selezionare ora il pool appena creato e quindi selezionare Nuovo agente.

  7. In questa finestra verranno fornite le istruzioni per configurare l'agente nella macchina virtuale creata in precedenza. Selezionare il pulsante Copia per copiare il collegamento di download negli Appunti.

    Screenshot che mostra come configurare un agente.

Creare un token di accesso personale

  1. Dal progetto Azure DevOps selezionare Impostazioni utente e quindi token di accesso personali.

  2. Selezionare Nuovo token per creare un nuovo token di accesso personale.

  3. Immettere un nome per il pat e quindi scegliere una data di scadenza.

  4. Selezionare Personalizzato definito in Ambiti e quindi selezionare Mostra tutti gli ambiti.

  5. Selezionare Pool di agenti ->Lettura e gestione e Gruppi di distribuzione ->Lettura e gestione.

  6. Al termine, selezionare Crea e salvare il pat in una posizione sicura.

Configurare un agente self-hosted

  1. In portale di Azure connettersi alla macchina virtuale.

  2. In un prompt dei comandi di PowerShell con privilegi elevati eseguire il comando seguente per scaricare l'agente.

    Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing  -OutFile <FILE_PATH> 
    ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
    
  3. Eseguire il comando seguente per estrarre e creare l'agente.

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. Eseguire il comando seguente per avviare la configurazione dell'agente.

    .\config.cmd
    
  5. Immettere l'URL del server quando viene richiesto l'input. Esempio: https://dev.azure.com/fabrikamFiber

  6. Premere INVIO quando viene richiesto il tipo di autenticazione per scegliere l'autenticazione PAT .

  7. Incollare il token di accesso personale creato in precedenza e quindi premere INVIO.

  8. Immettere il nome del pool di agenti e quindi immettere il nome dell'agente.

  9. Lasciare il valore predefinito per la cartella di lavoro e quindi immettere Y se si vuole eseguire l'agente come servizio.

    Screenshot che mostra come configurare un agente in una macchina virtuale di Azure.

  10. Ora che l'agente è pronto per iniziare ad ascoltare i processi, installare Docker nella macchina virtuale. Eseguire il comando seguente per scaricare Docker.

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. Passare al percorso di download e quindi eseguire il comando seguente per installare e avviare Docker.

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. Tornare ora alla cartella dell'agente ed eseguire il file cmd per eseguire l'agente nella macchina virtuale di Azure.

    .\run.cmd
    
  13. L'agente dovrebbe essere elencato ora nel pool di agenti -> Agenti nel portale di Azure DevOps.

    Screenshot che mostra l'agente disponibile nella scheda Agenti.

Configurare l'identità gestita

  1. In portale di Azure passare alla macchina virtuale creata in precedenza.

  2. Selezionare Identità nel pannello di spostamento a sinistra e quindi abilitare l'identità assegnata dal sistema.

  3. Al termine, selezionare Salva e quindi confermare la scelta.

    Screenshot che mostra come abilitare l'identità assegnata dal sistema.

  4. Selezionare Assegnazioni di ruolo di Azure e quindi Selezionare Aggiungi assegnazione di ruolo.

  5. Selezionare Gruppo di risorse dal menu a discesa Ambito .

  6. Selezionare la sottoscrizione e il gruppo di risorse e quindi selezionare il ruolo AcrPush .

  7. Ripetere i passaggi 5 e 6 per aggiungere il ruolo AcrPull .

    Screenshot che mostra come configurare i ruoli acrpull e push.

Creare una connessione al servizio del Registro di sistema Docker

  1. Dal progetto Azure DevOps selezionare l'icona a forma di ingranaggio Icona a forma di ingranaggio per passare alle impostazioni del progetto.

  2. Selezionare Connessioni al servizio nel riquadro sinistro.

  3. Selezionare Nuova connessione al servizio e quindi registro Docker e quindi Avanti.

  4. Selezionare Registro Azure Container e quindi selezionare Identità del servizio gestita come tipo di autenticazione.

  5. Immettere il nome della sottoscrizione id sottoscrizione e il server di accesso del Registro Azure Container. Incollare l'ID tenant assegnato dal sistema della macchina virtuale creato nel passaggio precedente nel campo di testo ID tenant.

  6. Immettere un nome per la connessione al servizio e quindi selezionare la casella di controllo Concedi autorizzazione di accesso a tutte le pipeline. Per selezionare questa opzione, è necessario il ruolo Amministratore connessione del servizio.

  7. Al termine, selezionare Salva .

    Screenshot che mostra come configurare un'identità del servizio del Registro di sistema Docker con identità del servizio gestita.

Compilare e pubblicare in Registro Azure Container

  1. Dal progetto Azure DevOps selezionare Pipeline e quindi crea pipeline.

  2. Selezionare il servizio che ospita il codice sorgente (Azure Repos, GitHub e così via).

  3. Selezionare il repository e quindi selezionare Starter pipeline (Pipeline di avvio).

  4. Eliminare la pipeline yaml predefinita e usare il frammento di codice seguente:

    trigger:
    - main
    
    variables:
      dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>'
      imageRepository: '<IMAGE_NAME>'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
    stages:
    - stage: Build
      displayName: Build and publish stage
      jobs:
      - job: Build
        displayName: Build job
        pool:
          name: '<YOUR_AGENT_POOL_NAME>'
        steps:
        - task: DockerInstaller@0
          inputs:
            dockerVersion: '17.09.0-ce'
    
        - task: Docker@2
          displayName: Build and publish image to Azure Container Registry
          inputs:
            command: buildAndPush
            containerRegistry: $(dockerRegistryServiceConnection)
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            tags: |
              $(tag)
    
  5. Al termine dell'esecuzione della pipeline, è possibile verificare l'immagine in Azure. Passare al Registro Azure Container in portale di Azure e quindi selezionare Repository.

    Screenshot che mostra l'immagine in portale di Azure.

Pulire le risorse

Se non si prevede di continuare a usare questa applicazione, eliminare il gruppo di risorse per evitare addebiti in corso.

az group delete --name myapp-rg