Distribuire modelli di ARM usando GitHub Actions

GitHub Actions è una suite di funzionalità in GitHub che serve ad automatizzare i flussi di lavoro dello sviluppo di software nella stessa posizione in cui si archivia il codice, ed a collaborare ai problemi e alle richieste pull.

Usare l'azione Deploy Azure Resource Manager Template Action (Distribuisci modello di Azure Resource Manager) per automatizzare la distribuzione di un modello di Azure Resource Manager (modello di ARM) in Azure.

Prerequisiti

Panoramica dei file del flusso di lavoro

Un flusso di lavoro viene definito da un file YAML (con estensione yml) nel percorso /.github/workflows/ del repository. Questa definizione contiene i vari passaggi e i parametri che costituiscono il flusso di lavoro.

Il file è costituito da due sezioni:

Sezione Attività
Autenticazione 1. Generare le credenziali per la distribuzione.
Distribuzione 1. Distribuire il modello di Resource Manager.

Generare le credenziali per la distribuzione

Creare un'entità servizio con il comando az ad sp create-for-rbacdell’interfaccia della riga di comando di Azure. Eseguire questo comando con Azure Cloud Shell nel portale di Azure oppure selezionando il pulsante Prova.

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

Il parametro --json-auth è disponibile nelle versioni >dell'interfaccia della riga di comando di Azure = 2.51.0. Versioni precedenti a questo utilizzo --sdk-auth con un avviso di deprecazione.

Nell'esempio precedente sostituire i segnaposto con l'ID sottoscrizione e il nome del gruppo di risorse. L'output è un oggetto JSON con le credenziali di assegnazione di ruolo che forniscono l'accesso all'app del servizio app simile a questo esempio. Copiare l'oggetto JSON per un uso successivo.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Configurare i segreti GitHub

  1. In GitHub, andare al proprio repository.

  2. Passare a Impostazioni nel menu di spostamento.

  3. Selezionare Segreti di sicurezza > e variabili > Azioni.

    Screenshot of adding a secret

  4. Selezionare Nuovo segreto repository.

  5. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto il nome AZURE_CREDENTIALS.

  6. Selezionare Aggiungi segreto.

Aggiungere un modello di Resource Manager

Aggiungere un modello di Resource Manager al repository GitHub. Questo modello crea un account di archiviazione.

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

È possibile inserire il file in un punto qualsiasi del repository. L'esempio di flusso di lavoro illustrato nella sezione successiva presuppone che il file di modello sia denominato azuredeploy.json e sia archiviato alla radice del repository.

Creare un flusso di lavoro

Il file del flusso di lavoro deve essere archiviato nella cartella .github/workflow alla radice del repository. Il file del flusso di lavoro può avere estensione .yml o .yaml.

  1. Dal repository GitHub, selezionare Actions dal menu in alto.
  2. Selezionare Nuovo flusso di lavoro.
  3. Selezionare Set up a workflow yourself (Configurare manualmente un flusso di lavoro).
  4. Se si preferisce un nome diverso da main.yml, rinominare il file del flusso di lavoro. Ad esempio: deployStorageAccount.yml.
  5. Sostituire il contenuto del file .yml con quanto segue:
  on: [push]
  name: Azure ARM
  jobs:
    build-and-deploy:
      runs-on: ubuntu-latest
      steps:

        # Checkout code
      - uses: actions/checkout@main

        # Log into Azure
      - uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

        # Deploy ARM template
      - name: Run ARM deploy
        uses: azure/arm-deploy@v1
        with:
          subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
          resourceGroupName: ${{ secrets.AZURE_RG }}
          template: ./azuredeploy.json
          parameters: storageAccountType=Standard_LRS

        # output containerName variable from template
      - run: echo ${{ steps.deploy.outputs.containerName }}

Nota

È possibile invece specificare un file di parametri in formato JSON nell'azione Distribuire ARM (ad esempio: .azuredeploy.parameters.json).

La prima sezione del file del flusso di lavoro include:

  • name: il nome del flusso di lavoro.
  • on: il nome degli eventi GitHub che attivano il flusso di lavoro. Il flusso di lavoro viene attivato quando si verifica un evento push nel ramo principale che modifica almeno uno dei due file specificati. I due file sono il file del flusso di lavoro e il file di modello.
  1. Selezionare Start commit (Avvia commit).
  2. Selezionare Commit directly to the main branch (Esegui il commit direttamente nel ramo principale).
  3. Selezionare Commit new file (Commit nuovo file) (o Commit modifiche).

Dato che il flusso di lavoro è configurato per essere attivato dal file del flusso di lavoro o dal file di modello da aggiornare, il flusso di lavoro viene avviato subito dopo il commit delle modifiche.

Controllare lo stato del flusso di lavoro

  1. Selezionare la scheda Actions. Verrà visualizzato un flusso di lavoro Crea deployStorageAccount.yml elencato. L'esecuzione del flusso di lavoro richiede 1-2 minuti.
  2. Selezionare il flusso di lavoro per aprirlo.
  3. Seleziona Esegui distribuzione ARM dal menu per verificare la distribuzione.

Pulire le risorse

Quando il gruppo di risorse e il repository non sono più necessari, pulire le risorse distribuite eliminando il gruppo di risorse e il repository GitHub.

Passaggi successivi