Esercizio - Compilare l'immagine dell'applicazione

Completato

In questa unità viene creata la pipeline di gestione temporanea di GitHub Actions compilando l'immagine dell'applicazione ed eseguendo il push in Registro Azure Container.

L'immagine seguente mostra la pipeline CI/CD progettata:

Diagram that shows the procession from triggers, through three build steps, to the deploy steps in a pipeline.

In questo esercizio si crea la pipeline di staging seguendo questa procedura:

  • Creare il flusso di lavoro di GitHub Actions.
  • Creare il on push trigger.
  • Compilare ed eseguire il push dell'immagine dell'applicazione.
  • Impostare i segreti.
  • Eseguire il processo.

Creare il flusso di lavoro di GitHub Actions

I flussi di lavoro di GitHub sono divisi in processi e i processi sono divisi in passaggi. Ogni passaggio può avere più comandi e usare più azioni da eseguire.

Per iniziare a creare la pipeline, passare al fork del repository di esempio nel sito Web GitHub.

  1. Seleziona la scheda Azioni.

  2. Selezionare il collegamento per configurare manualmente un flusso di lavoro.

    Screenshot that shows the Get started with GitHub Actions page on the GitHub website.

    A questo punto, la pipeline è solo un file vuoto nella directory .github/workflows nel repository. GitHub offre i componenti predefiniti necessari per creare la maggior parte delle pipeline. Per iniziare, copiare e incollare il codice seguente nel riquadro Modifica nuovo file :

    # This is a basic workflow to help you get started with Actions
    
    name: CI
    
    # Controls when the action will run. Triggers the workflow on push or pull request
    # events but only for the main branch
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      build:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
        # Steps represent a sequence of tasks that will be executed as part of the job
        steps:
          # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          # Runs a single command using the runners shell
          - name: Run a one-line script
            run: echo Hello, world!
    
          # Runs a set of commands using the runners shell
          - name: Run a multi-line script
            run: |
              echo Add other actions to build,
              echo test, and deploy your project.
    
  3. Sopra il riquadro Edit new file (Modifica nuovo file) rinominare il file main.yml in build-staging.yml.

    Screenshot that shows an example file being edited in the Edit new file pane on the GitHub website.

  4. Modificare la name chiave da CI a Build and push the latest build to staging.

    # This is a basic workflow to help you get started with Actions
    
    name: Build and push the latest build to staging
    

Modificare il trigger 'on'

Il modello di flusso di lavoro di base include due trigger:

  • Tutti i push nel ramo principale.
  • Tutte le richieste pull nel ramo principale.

Non è necessaria la pipeline per l'esecuzione in una richiesta pull, quindi modificarla in modo da mantenere solo il trigger push modificando i trigger nella on chiave. Rimuovere il secondo trigger e lasciare solo i tag push.

name: Build and push the latest build to staging

on:
  push:
    branches: [ main ]

Configurare il passaggio di checkout

Iniziare quindi a lavorare sui passaggi del processo. In questo processo si implementano sia le attività di compilazione che le attività di distribuzione nel diagramma di progettazione della pipeline.

  1. In jobsrinominare la build chiave in build_push_image.

  2. Si vuole che questo flusso di lavoro venga eseguito in Ubuntu 20.04, quindi modificare la runs-on chiave da ubuntu-latest a ubuntu-20.04.

  3. Eliminare gli ultimi due comandi nella steps chiave, che sono solo esempi per il modello.

    Il file, senza i commenti, dovrebbe essere simile all'esempio seguente:

    name: Build and push the latest build to staging
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    

A questo punto è disponibile un passaggio che usa l'azione checkout . Questa azione clona il repository nell'ambiente del processo. Questo passaggio equivale alla prima azione, Clona repository, nel diagramma di progettazione della pipeline.

Aggiungere i passaggi di Docker

Aggiungere quindi azioni per compilare l'immagine Docker. È possibile modificare l'utilizzo per queste azioni. In questo esempio vengono usati solo alcuni parametri disponibili. Per altre informazioni, vedere la documentazione relativa a build-push-action di GitHub.

  1. Nella scheda Marketplace nel pannello destro cercare docker login e selezionare il primo risultato pubblicato da Docker.

    Screenshot showing the search results listing Docker Login.

    Nota

    Le azioni Docker precedenti alla versione 2 avevano il flusso di accesso predefinito, ma nelle versioni 2 e successive queste azioni sono separate, quindi sono necessarie due azioni per impostare correttamente il flusso di lavoro.

  2. In Installazione selezionare l'icona di copia per copiare il file YAML di utilizzo.

    Screenshot showing the copy function and selecting the Docker Login task.

  3. Incollare il codice YAML copiato sotto l’azione actions/checkout@v2.

    Importante

    Quando si usa YAML, prestare attenzione ai rientri. La chiave name deve essere allineata alla chiave uses precedente.

  4. Aggiungere i valori seguenti alle registrychiavi , usernamee password :

    • registry: ${{ secrets.ACR_NAME }}
    • username: ${{ secrets.ACR_LOGIN }}
    • password: ${{ secrets.ACR_PASSWORD }}
  5. Eliminare le altre chiavi perché non vengono usate in questo esercizio.

  6. Nel pannello destro in Marketplace cercare le immagini Docker di compilazione e push e selezionare il primo risultato pubblicato da Docker.

    Screenshot that shows the search results that list Build and push Docker images.

  7. In Installazione selezionare l'icona di copia per copiare il file YAML di utilizzo.

  8. Incollare il codice YAML copiato sotto l'ultima chiave dell'azione docker-login copiata in precedenza.

  9. Rinominare la name chiave da Build and push Docker images a Build and push staging images.

  10. Aggiungere i valori seguenti alle contextchiavi , pushe tags :

    • context: .
    • push: true
    • tags: ${{secrets.ACR_NAME}}/contoso-website:latest
  11. Eliminare le altre chiavi perché non vengono usate in questo esercizio.

  12. Aggiungere un'altra azione chiamata docker/setup-buildx-action tra l'azione di estrazione e l'azione di accesso per configurare il motore di compilazione per Docker da usare. Copiare il frammento di codice seguente e incollarlo tra le checkout azioni e login .

    - name: Set up Buildx
      uses: docker/setup-buildx-action@v3.0.0
    

    Il file finale, senza i commenti, dovrebbe essere simile all'esempio seguente:

    name: Build and push the latest build to staging
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Set up Buildx
            uses: docker/setup-buildx-action@v3.0.0
    
          - name: Docker Login
            uses: docker/login-action@v3.0.0
            with:
              registry: ${{ secrets.ACR_NAME }}
              username: ${{ secrets.ACR_LOGIN }}
              password: ${{ secrets.ACR_PASSWORD }}
    
          - name: Build and push staging images
            uses: docker/build-push-action@v5.0.0
            with:
              context: .
              push: true
              tags: ${{secrets.ACR_NAME}}/contoso-website:latest
    

Eseguire il commit delle modifiche

Per eseguire il commit delle modifiche, selezionare il pulsante Commit changes (Esegui commit delle modifiche ) in alto a destra. Nella schermata Commit changes (Commit changes) immettere una descrizione per il commit e quindi selezionare Commit changes (Commit changes).

Screenshot that shows the Commit changes button in the Commit changes pane.

Se si seleziona Commit changes (Commit changes) viene attivata una nuova compilazione, ma la compilazione non riesce perché non sono ancora stati impostati i segreti.

Impostare i segreti

Per impostare i segreti, nella pagina del repository GitHub selezionare la scheda Impostazioni e quindi selezionare Segreti e variabili>Azioni dal menu a sinistra. Definire i segreti seguenti usati dal flusso di lavoro:

  • ACR_NAMEACR_Name: valore restituito dallo script di installazione
  • ACR_LOGINACR Login Username: valore restituito dallo script di installazione
  • ACR_PASSWORDACR Login Password: valore restituito dallo script di installazione
  • RESOURCE_GROUPResource Group Name: valore restituito dallo script di installazione
  • CLUSTER_NAME: contoso-video

Per definire ogni segreto:

  1. Selezionare Nuovo segreto repository.
  2. In Nome immettere il nome del segreto dall'elenco precedente.
  3. Per Segreto immettere il valore salvato dallo script di installazione oppure eseguire una query di Cloud Shell per ottenere il valore.
  4. Selezionare Aggiungi segreto.

Eseguire query facoltative per ottenere i valori dei segreti

Se non si hanno i valori restituiti dallo script di installazione, è possibile eseguire i comandi seguenti in Azure Cloud Shell per ottenere le informazioni:

  • ACR_NAME:

    az acr list --query "[?contains(resourceGroup, 'mslearn-gh-pipelines')].loginServer" -o table
    
  • ACR_LOGIN:

    az acr credential show --name <ACR_NAME> --query "username" -o table
    
  • ACR_PASSWORD:

    az acr credential show --name <ACR_NAME> --query "passwords[0].value" -o table
    
  • RESOURCE_GROUP:

    az aks list -o tsv --query "[?name=='contoso-video'].resourceGroup"
    

Eseguire il processo

  1. Seleziona la scheda Azioni.

  2. Selezionare l'unica esecuzione nell'elenco, il processo di build-staging.yml non riuscito.

  3. In alto a destra selezionare Riesegua processi Riesegua tutti i processi e nella schermata Esegui di nuovo tutti i processi selezionare Riesegua processi.>

    Screenshot that shows the Re-run jobs and Re-run all jobs buttons.

  4. Al termine della compilazione, eseguire az acr repository list --name <ACR_NAME> -o table in Cloud Shell per verificare che il contoso-website repository del Registro Container venga visualizzato nei risultati.

Passare all'unità successiva per compilare il flusso di lavoro di produzione.