Esercizio - Pubblicare una specifica di modello

Completato

Il team ha creato alcuni file Bicep con protezione avanzata conformi al nuovo modello di governance dell'azienda. Uno dei file Bicep con protezione avanzata distribuisce un'app servizio app di Azure basata su Linux. In questo esercizio si userà un flusso di lavoro di distribuzione per pubblicare il file Bicep come specifica di modello.

Durante il processo, si eseguiranno queste operazioni:

  • Aggiungere un processo lint al flusso di lavoro.
  • Aggiungere un processo del flusso di lavoro per pubblicare la specifica del modello.
  • Eseguire manualmente il flusso di lavoro e verificare che venga completato correttamente.
  • Controllare la specifica del modello pubblicata in Azure.

Aggiungere un processo lint al flusso di lavoro

Il repository contiene una bozza di un flusso di lavoro che è possibile usare come punto di partenza.

  1. In Visual Studio Code espandere la cartella .github/workflows nella radice del repository.

  2. Aprire il file template-spec-linux-app-service.yml.

    Screenshot di Visual Studio Code che mostra il percorso del file di definizione del flusso di lavoro.

    La definizione del flusso di lavoro include due trigger. In questo esercizio non viene modificato il file Bicep per la specifica del modello, quindi il trigger push non viene mai attivato. Per provare il flusso di lavoro, richiamarlo manualmente usando il trigger workflow_dispatch.

  3. In fondo al file, dove viene visualizzato un commento che indica # To be added, aggiungere la definizione del processo lint seguente:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    

    Il repository contiene un file bicepconfig.json che configura il linter per generare errori anziché avvisi. Eventuali errori durante il processo lint causeranno l'esito negativo del flusso di lavoro.

    Suggerimento

    I file YAML sono sensibili al rientro. Se si digita o si incolla questo codice, assicurarsi che il rientro sia corretto. Più avanti in questo esercizio verrà visualizzata la definizione completa del flusso di lavoro YAML in modo da verificare la corrispondenza del file.

Aggiungere un processo di pubblicazione al flusso di lavoro

È ora possibile aggiungere un secondo processo per pubblicare la specifica del modello in Azure.

  1. Aggiungere il codice seguente al termine del file template-spec-linux-app-service.yml:

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/cli@v1
        name: Publish template spec
        with:
          inlineScript: |
            az ts create \
              --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
              --name ${{ env.TEMPLATE_SPEC_NAME }} \
              --version ${{ github.run_number }} \
              --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
              --location ${{ env.AZURE_REGION }} \
              --yes
    

    Questo processo estrae il codice dal repository e accede ad Azure usando i segreti GitHub creati. Esegue quindi il comando az ts create per pubblicare la specifica del modello in Azure.

    Suggerimento

    Per semplificare le operazioni, il flusso di lavoro usa il numero di esecuzione del flusso di lavoro come numero di versione della specifica di modello. Nell'unità successiva si apprenderà uno schema di controllo delle versioni più complesso.

  2. Salvare le modifiche apportate al file .

Verificare ed eseguire il commit della definizione del flusso di lavoro

  1. Verificare che il file template-spec-linux-app-service.yml sia simile all'esempio seguente:

    name: template-spec-linux-app-service
    concurrency: template-spec-linux-app-service
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'template-specs/linux-app-service/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyReusable
      AZURE_REGION: westus3
      TEMPLATE_SPEC_NAME: linux-app-service
      TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/cli@v1
          name: Publish template spec
          with:
            inlineScript: |
              az ts create \
                --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \
                --name ${{ env.TEMPLATE_SPEC_NAME }} \
                --version ${{ github.run_number }} \
                --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \
                --location ${{ env.AZURE_REGION }} \
                --yes
    

    In caso contrario, aggiornarlo in modo che corrisponda a questo esempio e salvarlo.

  2. Eseguire il commit e il push delle modifiche nel repository Git eseguendo i comandi seguenti nel terminale di Visual Studio Code:

    git add .
    git commit -m "Add lint and publish jobs to Linux App Service template spec workflow"
    git push
    
  3. Questa è la prima volta che si esegue il push in questo repository, quindi è possibile che venga richiesto di accedere.

    In Windows digitare 1 per eseguire l'autenticazione usando un Web browser e quindi premere INVIO.

    In macOS selezionare Autorizza.

  4. Verrà visualizzata una finestra del browser. Potrebbe essere necessario accedere di nuovo a GitHub. Seleziona Autorizza.

Attivare il flusso di lavoro

  1. Nel browser selezionare la scheda Azioni.

    Screenshot di GitHub che mostra la scheda Azioni.

    Le esecuzioni del flusso di lavoro non riuscite sono già elencate, ma non è necessario preoccuparsi di esse. Le esecuzioni non sono riuscite perché le definizioni del flusso di lavoro non erano state ancora completate al momento della creazione del repository.

  2. Selezionare il flusso di lavoro template-spec-linux-app-service, selezionare il pulsante Esegui flusso di lavoro e quindi selezionare Esegui flusso di lavoro.

    Screenshot di GitHub che mostra le selezioni per l'esecuzione del flusso di lavoro della specifica di modello.

    GitHub avvia una nuova esecuzione del flusso di lavoro. Potrebbe essere necessario aggiornare la finestra del browser per visualizzare l'esecuzione.

  3. Selezionare l'esecuzione più recente nell'elenco.

    Screenshot di GitHub che evidenzia l'ultima esecuzione del flusso di lavoro della specifica di modello.

    Attendere il completamento dell'esecuzione del flusso di lavoro. Al termine, la specifica del modello viene pubblicata in Azure.

  4. Si noti il numero di esecuzione del flusso di lavoro, probabilmente 2.

    Screenshot di GitHub che mostra un'esecuzione del flusso di lavoro riuscita ed evidenzia il numero di esecuzione.

Esaminare la specifica di modello in Azure

È anche possibile visualizzare la specifica di modello pubblicata nel portale di Azure.

  1. Nel browser passare al portale di Azure.

  2. Passare al gruppo di risorse ToyReusable e selezionare la specifica di modello linux-app-service.

    Screenshot del portale di Azure che mostra il gruppo di risorse con la specifica di modello evidenziata.

  3. Esaminare i dettagli della specifica di modello.

    Screenshot del portale di Azure che mostra i dettagli della specifica di modello.

    Si noti che il numero di Versione più recente e Versione corrisponde al numero di esecuzione del flusso di lavoro. Il flusso di lavoro usa il numero di esecuzione per il numero di versione della specifica di modello.