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.
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un repository GitHub con il codice del sito Web statico. Se non si ha un account GitHub, iscriversi gratuitamente.
- Sito Web statico funzionante ospitato in Archiviazione di Azure. Informazioni su come ospitare un sito Web statico in Archiviazione di Azure. Per seguire questo esempio, è necessario distribuire anche Rete CDN di Azure.
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 nell'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
Per usare l'azione di accesso di Azure con OIDC, è necessario configurare una credenziale di identità federata in un'applicazione Microsoft Entra o in un'identità gestita assegnata dall'utente.
Opzione 1: Applicazione Microsoft Entra
- Creare un'applicazione Microsoft Entra con un'entità servizio portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.
- Copiare i valori per ID client, ID sottoscrizione e ID directory (tenant) da usare più avanti nel flusso di lavoro di GitHub Actions.
- Assegnare un ruolo appropriato all'entità servizio portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.
- Configurare una credenziale di identità federata in un'applicazione Microsoft Entra per considerare attendibili i token rilasciati da GitHub Actions nel repository GitHub.
Opzione 2: Identità gestita assegnata dall'utente
- Creare un'identità gestita assegnata dall'utente.
- Copiare i valori per ID client, ID sottoscrizione e ID directory (tenant) da usare più avanti nel flusso di lavoro di GitHub Actions.
- Assegnare un ruolo appropriato all'identità gestita assegnata dall'utente.
- Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente per considerare attendibili i token emessi da GitHub Actions nel repository GitHub.
Configurare i segreti di GitHub
È necessario specificare l'ID client, l'ID directory (tenant) e l'ID sottoscrizione dell'applicazione all'azione di accesso. Questi valori possono essere forniti direttamente nel flusso di lavoro oppure possono essere archiviati nei segreti gitHub e riportati nel flusso di lavoro. Salvare i valori come segreti GitHub è l'opzione più sicura.
In GitHub, andare al proprio repository.
Selezionare Sicurezza > Segreti e variabili > Azioni.
Selezionare Nuovo segreto repository.
Nota
Per migliorare la sicurezza del flusso di lavoro nei repository pubblici, usare i segreti dell'ambiente anziché i segreti del repository. Se l'ambiente richiede l'approvazione, un processo non può accedere ai segreti dell'ambiente finché uno dei revisori necessari non lo approva.
Creare segreti per
AZURE_CLIENT_ID
,AZURE_TENANT_ID
eAZURE_SUBSCRIPTION_ID
. Copiare questi valori dall'applicazione Microsoft Entra o dall'identità gestita assegnata dall'utente per i segreti GitHub:Segreto GitHub Applicazione Microsoft Entra o identità gestita assegnata dall'utente AZURE_CLIENT_ID ID client AZURE_SUBSCRIPTION_ID ID sottoscrizione AZURE_TENANT_ID ID della directory (tenant) Nota
Per motivi di sicurezza, è consigliabile usare i segreti di GitHub anziché passare i valori direttamente al flusso di lavoro.
Aggiungere il flusso di lavoro
Passare ad Actions per il repository GitHub.
Selezionare Set up your workflow yourself (Configurare manualmente il flusso di lavoro).
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 with OpenID Connect on: push: branches: [ main ]
Aggiungere una sezione autorizzazioni.
name: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read
Aggiungere azioni di estrazione e accesso. Queste azioni verificheranno il codice del sito ed eseguiranno l'autenticazione con Azure usando i segreti GitHub creati in precedenza.
name: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Usare l'azione dell'interfaccia della riga di comando di Azure per caricare il codice nell'archivio BLOB e per eliminare l'endpoint della rete CDN. Per
az storage blob upload-batch
sostituire il segnaposto con il nome dell'account di archiviazione. Lo script verrà caricato nel$web
contenitore. Peraz cdn endpoint purge
sostituire i segnaposto con il nome del profilo della rete CDN, il nome dell'endpoint della rete CDN e il gruppo di risorse. Per velocizzare l'eliminazione della rete CDN, è possibile aggiungere l'opzione--no-wait
aaz 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"
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: CI with OpenID Connect on: push: branches: [ main ] permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - 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
Passare ad Actions per il repository GitHub.
Aprire il primo risultato per visualizzare i log dettagliati dell'esecuzione del flusso di lavoro.
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.