Condividi tramite


Usare il flusso di lavoro di GitHub Actions per distribuire il sito Web statico in Archiviazione di Azure

Introduzione a GitHub Actions usando un flusso di lavoro per distribuire un sito statico in un account di archiviazione di Azure. Dopo aver configurato un flusso di lavoro di GitHub Actions, sarà possibile distribuire automaticamente il sito in Azure da GitHub quando si apportano modifiche al codice del sito.

Nota

Se si usa App Web statiche di Azure, non è necessario configurare manualmente un flusso di lavoro di GitHub Actions. App Web statiche di Azure crea automaticamente un flusso di lavoro di GitHub Actions.

Prerequisiti

Una sottoscrizione di Azure e un account GitHub.

Nota

È comune usare una rete per la distribuzione di contenuti (rete CDN) per ridurre la latenza agli utenti in tutto il mondo e ridurre il numero di transazioni all'account di archiviazione. La distribuzione di contenuto statico in un servizio di archiviazione basato sul cloud può ridurre la necessità di un'istanza di calcolo potenzialmente costosa. Per altre informazioni, vedere Modello di hosting di contenuti statici.

Generare le credenziali per la distribuzione

Creare un'entità servizio con il comando az ad sp create-for-rbac nell'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, il nome del gruppo di risorse e il nome dell'app. 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 di GitHub

  1. In GitHub passare al 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 il flusso di lavoro

  1. Passare ad Actions per il repository GitHub.

    GitHub Actions menu item

  2. Selezionare Set up your workflow yourself (Configurare manualmente il flusso di lavoro).

  3. Eliminare tutti quello che segue la sezione on: del file del flusso di lavoro. Il flusso di lavoro rimanente, ad esempio, potrà essere simile al seguente.

    name: CI
    
    on:
        push:
            branches: [ main ]
    
  4. Rinominare il flusso di lavoro Blob storage website CI e aggiungere le azioni checkout e login. Queste azioni verificheranno il codice del sito ed eseguiranno l'autenticazione con Azure usando il AZURE_CREDENTIALS segreto GitHub creato in precedenza.

    name: Blob storage website CI
    
    on:
        push:
            branches: [ main ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
  5. Usare l'azione dell'interfaccia della riga di comando di Azure per caricare il codice nell'archivio BLOB e per eliminare l'endpoint rete CDN. Per az storage blob upload-batchsostituire il segnaposto con il nome dell'account di archiviazione. Lo script verrà caricato nel $web contenitore. Per az cdn endpoint purgesostituire i segnaposto con il nome del profilo rete CDN, rete CDN nome dell'endpoint e il gruppo di risorse. Per velocizzare l'eliminazione rete CDN, è possibile aggiungere l'opzione --no-wait a az cdn endpoint purge. Per migliorare la sicurezza, è anche possibile aggiungere l'opzione con la --account-key chiave dell'account di archiviazione.

        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME>  --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
  6. Completare il flusso di lavoro aggiungendo un'azione di disconnessione da Azure. Ecco il flusso di lavoro completato. Il file verrà visualizzato nella cartella .github/workflows del repository.

    name: Blob storage website CI
    
    on:
        push:
            branches: [ main ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
        - name: Upload to blob storage
          uses: azure/CLI@v1
          with:
            inlineScript: |
                az storage blob upload-batch --account-name <STORAGE_ACCOUNT_NAME> --auth-mode key -d '$web' -s .
        - name: Purge CDN endpoint
          uses: azure/CLI@v1
          with:
            inlineScript: |
               az cdn endpoint purge --content-paths  "/*" --profile-name "CDN_PROFILE_NAME" --name "CDN_ENDPOINT" --resource-group "RESOURCE_GROUP"
    
      # Azure logout
        - name: logout
          run: |
                az logout
          if: always()
    

Esaminare la distribuzione

  1. Passare ad Actions per il repository GitHub.

  2. Aprire il primo risultato per visualizzare i log dettagliati dell'esecuzione del flusso di lavoro.

    Log of GitHub Actions run

Pulire le risorse

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

Passaggi successivi