Recapito continuo con GitHub Actions

È possibile usare un flusso di lavoro GitHub Actions per definire un flusso di lavoro per compilare e distribuire automaticamente il codice nell'app per le funzioni in Funzioni di Azure.

Un file YAML (.yml) che definisce la configurazione del flusso di lavoro viene mantenuto nel percorso /.github/workflows/ nel repository. Questa definizione contiene le azioni e i parametri che costituiscono il flusso di lavoro, specifico del linguaggio di sviluppo delle funzioni. Un flusso di lavoro di GitHub Actions per Funzioni esegue le attività seguenti, indipendentemente dalla lingua:

  1. Configurare l'ambiente.
  2. Compilare il progetto di codice.
  3. Distribuire il pacchetto in un'app per le funzioni in Azure.

L'azione Funzioni di Azure gestisce la distribuzione in un'app per le funzioni esistente in Azure.

È possibile creare manualmente un file di configurazione del flusso di lavoro per la distribuzione. È anche possibile generare il file da un set di modelli specifici della lingua in uno dei modi seguenti:

  • Nel portale di Azure
  • Con l'interfaccia della riga di comando di Azure
  • Dal repository GitHub

Se non si vuole creare il file YAML a mano, selezionare un metodo diverso nella parte superiore dell'articolo.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.

  • Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito.

  • Un'app per le funzioni funzionante ospitata in Azure con codice sorgente in un repository GitHub.

Generare le credenziali per la distribuzione

Poiché GitHub Actions usa il profilo di pubblicazione per accedere all'app per le funzioni durante la distribuzione, è prima necessario ottenere il profilo di pubblicazione e archiviarlo in modo sicuro come segreto GitHub.

Importante

Il profilo di pubblicazione è una credenziale preziosa che consente l'accesso alle risorse di Azure. Assicurarsi di trasportarlo sempre e archiviarlo in modo sicuro. In GitHub il profilo di pubblicazione deve essere archiviato solo nei segreti GitHub.

Scaricare il profilo di pubblicazione

Per scaricare il profilo di pubblicazione dell'app per le funzioni:

  1. Nel portale di Azureindividuare la pagina per l'app per le funzioni, espandere Impostazioni>Configurazione nella colonna sinistra.

  2. Nella pagina Configurazione, selezionare la scheda Impostazioni generali e assicurarsi che le Credenziali di pubblicazione dell'autenticazione di base di SCM siano impostate su On. Quando questa impostazione è Disattivata, non è possibile usare i profili di pubblicazione, quindi selezionare On e Salva.

  3. Tornare alla pagina Panoramica dell'app per le funzioni e quindi selezionare Ottieni profilo di pubblicazione.

    Scarica profilo di pubblicazione

  4. Salvare e copiare il contenuto del file.

Aggiungere il segreto di GitHub

  1. In GitHub, andare al proprio repository.

  2. Andare a Impostazioni.

  3. Selezionare Segreti e variabili > Azioni.

  4. Selezionare Nuovo segreto repository.

  5. Aggiungere un nuovo segreto con il nome AZURE_FUNCTIONAPP_PUBLISH_PROFILE e il valore impostato sul contenuto del file del profilo di pubblicazione.

  6. Selezionare Aggiungi segreto.

GitHub può ora eseguire l'autenticazione all'app per le funzioni in Azure.

Creare il flusso di lavoro da un modello

Il modo migliore per creare manualmente una configurazione del flusso di lavoro consiste nell'iniziare dal modello ufficialmente supportato.

  1. Scegliere Windows o Linux per assicurarsi di ottenere il modello per il sistema operativo corretto.

    Le distribuzioni in Windows usano runs-on: windows-latest.

  2. Copiare il modello specifico del linguaggio dal repository delle azioni di Funzioni di Azure usando il collegamento seguente:

  3. Aggiornare il parametro env.AZURE_FUNCTIONAPP_NAME con il nome della risorsa dell'app per le funzioni in Azure. Facoltativamente, potrebbe essere necessario aggiornare il parametro che imposta la versione del linguaggio usata dall'app, ad esempio DOTNET_VERSION per C#.

  4. Aggiungere questo nuovo file YAML nel percorso /.github/workflows/ nel repository.

Creare la configurazione del flusso di lavoro nel portale

Quando si usa il portale per abilitare GitHub Actions, Funzioni crea un file del flusso di lavoro basato sullo stack di applicazioni ed esegue il commit nel repository GitHub nella directory corretta.

Il portale ottiene automaticamente il profilo di pubblicazione e lo aggiunge ai segreti GitHub per il repository.

Durante la creazione dell'app per le funzioni

È possibile iniziare rapidamente a usare GitHub Actions tramite la scheda Distribuzione quando si crea una funzione nel portale di Azure. Per aggiungere un flusso di lavoro GtHub Actions quando si crea una nuova app per le funzioni:

  1. Nel portale di Azure, selezionare Distribuzione nel flusso di Crea app per le funzioni.

    Screenshot dell'opzione di Distribuzione nel menu Funzioni.

  2. Abilitare Distribuzione continua se si vuole che ogni aggiornamento del codice attivi un push di codice nel portale di Azure.

  3. Immettere l'organizzazione, il repository e il ramo GitHub.

    Screenshot dei dettagli dell'account utente di GitHub.

  4. Completare la configurazione dell'app per le funzioni. Il repository GitHub include ora un nuovo file del flusso di lavoro in /.github/workflows/.

Per un'app per le funzioni esistente

Per aggiungere un flusso di lavoro di GitHub Actions a un'app per le funzioni esistente:

  1. Passare all'app per le funzioni nel portale di Azure e selezionare Centro distribuzione.

  2. Per Origine, selezionare GitHub. Se non viene visualizzato il messaggio predefinito Compilazione con GitHub Actions, selezionare Cambia provider scegliere GitHub Actions e selezionare OK.

  3. Se l'accesso a GitHub non è già stato autorizzato, selezionare Autorizza. Specificare le credenziali di GitHub e selezionare Accedi. Per autorizzare un account GitHub diverso, selezionare Cambia account e accedere con un altro account.

  4. Selezionare Organizzazione, Repository e Ramo in GitHub. Per eseguire la distribuzione con GitHub Actions, è necessario avere accesso in scrittura a questo repository.

  5. In Impostazioni di autenticazione, scegliere se eseguire l'autenticazione di GitHub Actions con una identità assegnata dall'utente o usare le credenziali di autenticazione di base. Per l'autenticazione di base, vengono usate le credenziali correnti.

  6. Selezionare file di anteprima per visualizzare il file del flusso di lavoro aggiunto al repository GitHub in github/workflows/.

  7. Selezionare Salva per aggiungere il file del flusso di lavoro al repository.

Aggiungere la configurazione del flusso di lavoro al repository

È possibile usare il comando az functionapp deployment github-actions add per generare un file di configurazione del flusso di lavoro dal modello corretto per l'app per le funzioni. Il nuovo file YAML viene quindi archiviato nel percorso corretto (/.github/workflows/) nel repository GitHub specificato, mentre il file del profilo di pubblicazione per l'app viene aggiunto ai segreti GitHub nello stesso repository.

  1. Eseguire questo comando az functionapp, sostituendo i valori githubUser/githubRepo, MyResourceGroup e MyFunctionapp:

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

    Questo comando usa un metodo interattivo per recuperare un token di accesso personale per l'account GitHub.

  2. Nella finestra del terminale dovrebbe essere visualizzato un messaggio simile al seguente:

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. Copiare il codice XXXX-XXXX univoco, passare a https://github.com/login/device e immettere il codice copiato. Dopo aver immesso il codice, verrà visualizzato un messaggio simile al seguente:

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. Passare al repository GitHub e selezionare Azioni. Verificare che il flusso di lavoro sia stato eseguito.

Creare il file di configurazione del flusso di lavoro

È possibile creare il file di configurazione del flusso di lavoro di GitHub Actions dai modelli di Funzioni di Azure direttamente dal repository GitHub.

  1. In GitHub, andare al proprio repository.

  2. Selezionare Azioni e Nuovo flusso di lavoro.

  3. Cercare le funzioni.

    Screenshot della ricerca dei modelli di funzioni di GitHub Actions.

  4. Nei flussi di lavoro delle app per le funzioni visualizzate creati da Microsoft Azure individuare quello corrispondente alla lingua del codice e selezionare Configura.

  5. Nel file YAML appena creato aggiornare il parametro env.AZURE_FUNCTIONAPP_NAME con il nome della risorsa dell'app per le funzioni in Azure. Facoltativamente, potrebbe essere necessario aggiornare il parametro che imposta la versione del linguaggio usata dall'app, ad esempio DOTNET_VERSION per C#.

  6. Verificare che il nuovo file del flusso di lavoro venga salvato in /.github/workflows/ e selezionare Conferma modifiche....

Aggiornare una configurazione del flusso di lavoro

Se per qualche motivo, è necessario aggiornare o modificare una configurazione del flusso di lavoro esistente, passare semplicemente al percorso di /.github/workflows/ nel repository, aprire il file YAML specifico, apportare le modifiche necessarie e quindi eseguire il commit degli aggiornamenti nel repository.

Esempio: file di configurazione del flusso di lavoro

Nell'esempio di modello seguente viene usata la versione 1 del functions-action e un publish profile per l'autenticazione. Il modello dipende dal linguaggio scelto e dal sistema operativo in cui viene distribuita l'app per le funzioni:

Se l'app per le funzioni viene eseguita in Linux, selezionare Linux.

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

Azione di Funzioni di Azure

L'azione Funzioni di Azure (Azure/azure-functions) definisce il modo in cui il codice viene pubblicato in un'app per le funzioni esistente in Azure o in uno slot specifico nell'app.

Parametri

Per tutti i piani dell'app per le funzioni sono necessari i parametri seguenti:

Parametro Spiegazione
app-name Nome dell'app per le funzioni.
package Questo è il percorso nel progetto da pubblicare. Per impostazione predefinita, questo valore è impostato su ., il che significa che tutti i file e le cartelle nel repository GitHub verranno distribuiti.

Per il piano Flex Consumption sono necessari i parametri seguenti:

Parametro Spiegazione
sku Impostare su quando flexconsumption si esegue l'autenticazione con publish-profile. Quando si usano le credenziali di controllo degli accessi in base al ruolo o si distribuisce in un piano a consumo non flessibile, l'azione può risolvere il valore, pertanto il parametro non deve essere incluso.
remote-build Impostare questa opzione su true per abilitare un'azione di compilazione da Kudu quando il pacchetto viene distribuito in un'app Flex Consumption. La compilazione Oryx viene sempre eseguita durante una compilazione remota in Flex Consumption; non impostare scm-do-build-during-deployment o enable-oryx-build. Per impostazione predefinita, il parametro è impostato su false.

I parametri seguenti sono specifici dei piani Consumption, Elastic Premium e servizio app (Dedicated):

Parametro Spiegazione
scm-do-build-during-deployment (Facoltativo) Consentire al sito Kudu ( ad esempio https://<APP_NAME>.scm.azurewebsites.net/) di eseguire operazioni di pre-distribuzione, ad esempio compilazioni remote. Per impostazione predefinita, il parametro è impostato su false. Impostare questa opzione su true quando si vogliono controllare i comportamenti di distribuzione usando Kudu invece di risolvere le dipendenze nel flusso di lavoro di GitHub. Per altre informazioni, vedere l'impostazione SCM_DO_BUILD_DURING_DEPLOYMENT .
enable-oryx-build (Facoltativo) Consentire al sito Kudu di risolvere le dipendenze del progetto con Oryx. Per impostazione predefinita, il parametro è impostato su false. Se si vuole usare Oryx per risolvere le dipendenze anziché il flusso di lavoro GitHub, impostare sia scm-do-build-during-deployment che enable-oryx-build su true.

Parametri facoltativi per tutti i piani dell'app per le funzioni:

Parametro Spiegazione
slot-name Si tratta del nome dello slot di distribuzione in cui eseguire la distribuzione. Per impostazione predefinita, questo valore è vuoto, il che significa che GitHub Action verrà distribuito nel sito di produzione. Quando questa impostazione punta a uno slot non di produzione, verificare che il parametro publish-profile contenga le credenziali per lo slot anziché il sito di produzione. Attualmente non è supportato in Flex Consumption.
publish-profile Nome del segreto GitHub che contiene il profilo di pubblicazione.
respect-pom-xml Usato solo per le funzioni Java. Indica se è necessario che l'artefatto di distribuzione dell'app sia derivato dal file pom.xml. Quando si distribuiscono app per le funzioni Java, è necessario impostare questo parametro su true e impostare package su .. Per impostazione predefinita, questo parametro è impostato su false, il che significa che il parametro package deve puntare alla posizione dell'artefatto dell'app, ad esempio ./target/azure-functions/
respect-funcignore Se GitHub Actions rispetta il file con estensione funcignore per escludere file e cartelle definiti. Impostare questo valore su true quando il repository ha un file con estensione .funcignore e si vuole usarlo per escludere percorsi e file, ad esempio configurazioni dell'editor di testo, vscode/o un ambiente virtuale Python (con estensione venv/). L'impostazione predefinita è false.

Considerazioni

Quando si usa l'azione Funzioni di Azure, tenere presenti le considerazioni seguenti:

  • Quando si usa GitHub Actions, il codice viene distribuito nell'app per le funzioni usando la distribuzione ZIP per Funzioni di Azure.

  • Le credenziali richieste da GitHub per la connessione ad Azure per la distribuzione vengono archiviate come segreti nel repository GitHub e accessibili nella distribuzione come secrets.<SECRET_NAME>.

  • Il modo più semplice per l'autenticazione di GitHub Actions con Funzioni di Azure per la distribuzione consiste nell'usare un profilo di pubblicazione. È anche possibile eseguire l'autenticazione usando un'entità servizio. Per altre informazioni, vedere questo repository GitHub Actions.

  • Le azioni per la configurazione dell'ambiente e l'esecuzione di una compilazione vengono generate dai modelli e sono specifiche della lingua.

  • I modelli usano env elementi per definire impostazioni univoche per la compilazione e la distribuzione.

Passaggi successivi