Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Puoi usare un workflow di GitHub Actions per compilare e distribuire automaticamente il codice delle funzioni su Azure utilizzando il Azure/functions-actionfile .
Per distribuire utilizzando GitHub Actions, completa questi tre passaggi chiave:
- Crea un'identità gestita assegnata dall'utente in Azure con una credenziale federata che si fida del tuo repository GitHub, e assegnagli il ruolo di Contributore del sito web nella tua app funzionale.
- Aggiungi l'ID client, l'ID tenant e l'ID dell'abbonamento dell'identità come segreti del repository in GitHub.
- Aggiungi un file YAML di workflow al tuo repository che utilizza
azure/loginOpenID Connect (OIDC) per autenticare, poi chiamaAzure/functions-actionper distribuire.
Quando usi il portale Azure per abilitare GitHub Actions, Functions esegue automaticamente queste attività, sia nel tuo abbonamento Azure che nel tuo repository GitHub.
Crea una configurazione del workflow per Funzioni di Azure
Gestisci un file YAML (.yml) che definisce la configurazione del workflow nel /.github/workflows/ percorso nel tuo repository. Questa definizione contiene le azioni e i parametri che costituiscono il flusso di lavoro, specifico del linguaggio di sviluppo delle funzioni.
Scegli un metodo per creare il file del tuo flusso di lavoro usando il selettore in cima all'articolo:
| metodo | Migliore per | Supporto OIDC |
|---|---|---|
| Modello di workflow | Controllo completo: copia un template pronto per OIDC e personalizzalo | Richiede la configurazione |
| Portale di Azure | Configurazione più semplice: il portale può creare per te l'identità, le credenziali e il file di workflow | Configurato per te |
| Marketplace GitHub | GitHub-first: inizia dai template integrati del marketplace di GitHub | Richiede configurazione e modifica del template |
Informazioni generali sull'autenticazione
GitHub Actions deve autenticarsi con Azure per distribuire il tuo codice. Questo articolo utilizza OpenID Connect (OIDC), che è il metodo di autenticazione raccomandato. L'OIDC utilizza credenziali federate per creare una relazione di fiducia tra il tuo repository GitHub e un'identità gestita assegnata dall'utente in Microsoft Entra. Nessun segreto è memorizzato su GitHub.
Esempio di autenticazione OIDC
Il seguente esempio inline mostra il modello principale di autenticazione e distribuzione OIDC utilizzato in tutti i modelli di workflow:
permissions:
id-token: write
contents: read
steps:
- name: 'Login via OIDC'
uses: azure/login@v3
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
Considerazioni sull'autenticazione OIDC su GitHub Actions
- L'OIDC utilizza la federazione dell'identità del carico di lavoro e supporta solo le identità gestite assegnate dall'utente.
- Quando abiliti una distribuzione basata su GitHub Actions nel portale Azure, l'autenticazione OIDC viene utilizzata di default.
- Con OIDC, l'ID client, l'ID tenant e l'ID di abbonamento dell'identità gestita sono memorizzati come segreti del repository GitHub.
- Usa il controllo degli accessi basato sul ruolo di Azure (Azure RBAC) per limitare l'accesso solo alle risorse Azure richieste per il tuo deployment.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito.
Codice sorgente del Project in un repository GitHub.
Una comprensione di base dei flussi di lavoro di GitHub Actions. Se sei nuovo a GitHub Actions, consulta Understanding GitHub Actions.
Un'app funzionante ospitata su Azure (solo codice o basata su container).
(Solo dispiegamenti di container) Un container registry existente, come Registro Azure Container.
- interfaccia della riga di comando di Azure durante lo sviluppo in locale. È anche possibile usare il interfaccia della riga di comando di Azure in Azure Cloud Shell.
Crea un'identità gestita per il deployment di GitHub Actions
OpenID Connect (OIDC) è il metodo di autenticazione consigliato per le implementazioni di GitHub Actions su Funzioni di Azure. Con OIDC, configuri un'identità gestita assegnata dall'utente in Azure e crei una relazione di fiducia con il tuo repository GitHub. Il flusso di lavoro può quindi autenticarsi con Azure senza memorizzare le credenziali come segreti.
Usare il comando az identity create per creare un'identità gestita assegnata all'utente.
az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \ --query "{clientId: clientId, tenantId: tenantId}" -o tableSostituire
<RESOURCE_GROUP>con il nome del gruppo di risorse.Dall'output, si notano i
clientIdvalori di etenantId. Ottieni anche il tuo ID di abbonamento:az account show --query "{subId: id}" -o tableTi servono questi tre valori più avanti, quando aggiungi le credenziali a GitHub.
Usa il comando az role assignment create per assegnare il
Website Contributorruolo all'identità gestita, con ambito alla tua app di funzione:IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv) FUNCTION_APP_ID=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query 'id' -o tsv) az role assignment create --assignee $IDENTITY_PRINCIPAL --role "Website Contributor" --scope $FUNCTION_APP_IDSostituisci
<APP_NAME>e<RESOURCE_GROUP>con i nomi della tua app e del gruppo risorse, rispettivamente.Usa il comando create di un'identità federata di az per creare una credenziale federata che si fida dei token dal tuo repository GitHub:
az identity federated-credential create \ --identity-name myGitHubDeployIdentity \ --resource-group <RESOURCE_GROUP> \ --name github-deploy-credential \ --issuer https://token.actions.githubusercontent.com \ --subject repo:<GITHUB_ORG>/<REPO_NAME>:ref:refs/heads/<BRANCH_NAME> \ --audiences api://AzureADTokenExchangeSostituire
<RESOURCE_GROUP>,<GITHUB_ORG>,<REPO_NAME>e<BRANCH_NAME>con i propri valori. L'argomento deve corrispondere al ramo che attiva il tuo flusso di lavoro.(Opzionale) Se stai distribuendo un container da Registro Azure Container, assegna anche il
acrpullruolo all'identità gestita:IDENTITY_PRINCIPAL=$(az identity show --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> --query 'principalId' -o tsv) az role assignment create --assignee $IDENTITY_PRINCIPAL --role acrpull \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME>Sostituire
<SUBSCRIPTION_ID>,<RESOURCE_GROUP>e<REGISTRY_NAME>con i propri valori.
Aggiungi credenziali a GitHub
Usa i valori che hai copiato quando hai creato l'identità gestita.
In GitHub passare al repository.
Vai su Impostazioni>Segreti e variabili>Azioni.
Nella scheda Segreti , seleziona Nuovo segreto del repository.
Crea ciascuno dei seguenti segreti:
Name Valore AZURE_CLIENT_IDLa clientIddell'identità gestitaAZURE_TENANT_IDLa tenantIddell'identità gestitaAZURE_SUBSCRIPTION_IDL'ID di abbonamento che contiene la tua app di funzione
Per le implementazioni di container da un registro privato, servono anche segreti specifici per registro. Per maggiori informazioni, vedi Azione di accesso Docker.
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.
Scegliere Windows o Linux per assicurarsi di ottenere il modello per il sistema operativo corretto.
Usa il modello di workflow OIDC specifico per linguaggio dal repository azioni di Funzioni di Azure. Copia l'intero contenuto del file in un nuovo file chiamato
.github/workflows/deploy-function-app.ymlnel tuo repository:name: Build and deploy .NET project to Azure Function App using OIDC on: push: branches: [ main ] workflow_dispatch: env: AZURE_FUNCTIONAPP_NAME: 'APP_NAME' # Set this to your function app name on Azure AZURE_FUNCTIONAPP_PROJECT_PATH: '.' # Set this to the path to your function app project, defaults to the repository root. The deploy action will package the contents of this path. DOTNET_VERSION: '10.0.x' # Set this to the .NET version of your project BUILD_ARTIFACT_NAME: 'released-package' # Set this according to your team's naming convention jobs: build: runs-on: windows-latest # Assumes your target function app is Windows-based permissions: id-token: write # Required for OIDC contents: read # Required for actions/checkout defaults: run: shell: bash working-directory: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }} steps: - name: 'Checkout repository' uses: actions/checkout@v6 - name: 'Set up .NET version: ${{ env.DOTNET_VERSION }}' uses: actions/setup-dotnet@v5 with: dotnet-version: ${{ env.DOTNET_VERSION }} # Perform additional steps such as running tests, if needed - name: 'Build and prepare .NET project for deployment' run: dotnet publish --configuration Release --output ./output - name: Upload artifact for the deployment job uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_ARTIFACT_NAME }} path: ${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/output include-hidden-files: true # Required for .NET projects deploy: runs-on: windows-latest # Assumes your target function app is Windows-based needs: build permissions: id-token: write # Required for OIDC steps: - name: 'Download artifact from build job' uses: actions/download-artifact@v8 with: name: ${{ env.BUILD_ARTIFACT_NAME }} path: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact' - name: 'Log in to Azure with AZ CLI' uses: azure/login@v3 with: client-id: ${{ vars.AZURE_CLIENT_ID }} tenant-id: ${{ vars.AZURE_TENANT_ID }} subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} - name: 'Run the Azure Functions action' uses: Azure/functions-action@v1 id: deploy-to-function-app with: app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} package: '${{ env.AZURE_FUNCTIONAPP_PROJECT_PATH }}/downloaded-artifact'Nel template, aggiorna le
env:variabili per il tuo progetto. Ogni template richiedeAZURE_FUNCTIONAPP_NAME. Le altre variabili dipendono dal tuo linguaggio:Variabile Richiesto Description AZURE_FUNCTIONAPP_NAMESì Il nome della tua app funzione in Azure DOTNET_VERSIONSì La versione .NET del tuo progetto (ad esempio, 10.0.x)AZURE_FUNCTIONAPP_PROJECT_PATHNO Percorso verso la cartella del tuo progetto. Predefinito: .(radice repository)I template OIDC includono già il
azure/loginpassaggio con l'autenticazione OIDC. Verifica che isecrets.AZURE_CLIENT_IDriferimenti ,secrets.AZURE_TENANT_ID, esecrets.AZURE_SUBSCRIPTION_IDcorrispondano ai segreti del repository che hai creato.Aggiungere questo nuovo file YAML nel percorso
/.github/workflows/nel repository.
Creare la configurazione del flusso di lavoro nel portale
Quando usi il portale per abilitare GitHub Actions, Functions gestisce tutta la configurazione automaticamente. Non è necessario creare manualmente un'identità gestita, configurare le credenziali o scrivere un file di workflow. Functions svolge questi compiti per te:
Nel tuo abbonamento Azure:
- Crea un'identità gestita assegnata dall'utente e le assegna il ruolo di Contributore del sito web nella tua app di funzione.
- Aggiunge una credenziale federata all'identità gestita per l'autenticazione OIDC su GitHub.
Nel tuo archivio GitHub:
- Aggiunge i valori dell'ID client, dell'ID dell'abbonamento e dell'ID tenant come segreti di GitHub Actions.
- Crea un file di workflow basato sul tuo stack applicativo e lo fa commit su
.github/workflows.
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 GitHub Actions quando si crea una nuova app per le funzioni:
Nel portale Azure, selezionare Distribuzione nel flusso Crea app per le funzioni.
Abilitare Continuous Deployment se si vuole che ogni aggiornamento del codice attivi un push di codice nel portale di Azure.
Nelle impostazioni di GitHub, seleziona Autorizza per connettere il tuo account GitHub. Accedi con l'account GitHub che ha accesso di scrittura al tuo repository.
Inserire l'organizzazione GitHub, il repository e il ramo.
Opzionalmente, seleziona File di anteprima per vedere come appare il file di workflow prima che venga generato e aggiunto al tuo repository.
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 GitHub Actions a un'app per le funzioni esistente:
Vai all'app funzione nel portale Azure e seleziona Centro di distribuzione> distribuzione.
Seleziona Continuous Deployment (CI/CD). In Origine selezionare GitHub. Se non vedi la creazione di messaggi predefinita con GitHub Actions, seleziona Change provider, scegli GitHub Actions e seleziona OK.
Se non hai già autorizzato l'accesso a GitHub, seleziona Autorizza. Specificare le credenziali GitHub e selezionare Accedere. Per autorizzare un account di GitHub diverso, selezionare Modifica account e accedere con un altro account.
Seleziona la tua Organizzazione, Repository e Branch su GitHub. Per distribuire utilizzando GitHub Actions, devi avere accesso di scrittura a questo repository.
Per l'opzione Workflow, seleziona Aggiungi workflow. Questa opzione crea un nuovo file di workflow in
/.github/workflows/. Per utilizzare un flusso di lavoro esistente, seleziona Usa il flusso di lavoro disponibile e scegli il file del tuo flusso di lavoro.Nelle impostazioni di Autenticazione, scegli Identità assegnata dall'utente per usare OpenID Connect (OIDC), consigliata perché non richiede di memorizzare segreti in GitHub. Seleziona il tuo abbonamento e il nome di identità (Nuovo ) suggerito. Viene creata una nuova identità gestita assegnata dall'utente e viene concesso l'accesso al ruolo di Contributore del Sito Web. Se utilizzi un'identità esistente, devi prima concederle l'accesso al ruolo di Contributore del Sito Web.
Importante
Quando selezioni Autenticazione Base, il tuo profilo di pubblicazione, che contiene segreti condivisi, viene memorizzato in GitHub Secrets. Devi anche abilitare l'autenticazione SCM di base, che rende la tua app meno sicura.
Seleziona Anteprima file per visualizzare il file del flusso di lavoro aggiunto al repository GitHub in
.github/workflows/.Selezionare Salva per aggiungere il file del flusso di lavoro al repository. Seleziona la scheda Log per visualizzare lo stato delle implementazioni attuali e precedenti.
Creare il file di configurazione del flusso di lavoro
È possibile creare il file di configurazione del flusso di lavoro GitHub Actions dai modelli di Funzioni di Azure direttamente dal repository GitHub.
In GitHub passare al repository.
Selezionare Azioni e Nuovo flusso di lavoro.
Cercare le funzioni.
Nei flussi di lavoro delle app per le funzioni visualizzate creati da Microsoft Azure trovare quello corrispondente al linguaggio di codice e selezionare Configura.
Nel file YAML appena creato aggiornare il parametro
env.AZURE_FUNCTIONAPP_NAMEcon il nome della risorsa dell'app per le funzioni in Azure. Potresti anche dover aggiornare il parametro che imposta la versione del linguaggio usata dalla tua app, ad esempioDOTNET_VERSIONper C# oPYTHON_VERSIONper app Python.I template predefiniti potrebbero usare l'autenticazione del profilo pubblica invece dell'OIDC raccomandato. Per passare all'OIDC e allinearsi ai comportamenti dei portali, apporta le seguenti modifiche:
Rimuovi i
publish-profileparametri ,scm-do-build-during-deployment, eenable-oryx-builddaAzure/functions-action.Rimuovi l'impostazione
environmentdal lavoro (se presente), poiché l'oggetto della credenziale federata deve corrispondere al trigger del ramo.Aggiungi un
azure/loginpassaggio prima delAzure/functions-actionpassaggio:- name: 'Login via OIDC' uses: azure/login@v3 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 with: app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }} package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}Aggiungi i seguenti permessi al lavoro:
permissions: id-token: write contents: read
Verifica che il nuovo file di workflow sia salvato con un nome appropriato in
/.github/workflows/e seleziona Commit modifiche.
Azione di Funzioni di Azure
L'azione Funzioni di Azure (Azure/functions-action) 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
La tabella seguente descrive i parametri di input supportati da Azure/functions-action:
| Parametro | Description |
|---|---|
| app-name | (Richiesto) Il nome della tua function app in Azure. |
| package | (Richiesto) Il percorso verso il tuo progetto per pubblicare. Predefinito: . (tutti i file nel repository). |
| Costruzione remota | Imposta per true abilitare un'azione di compilazione da Kudu quando si implementa su un'app Flex Consumption. La build Oryx viene sempre eseguita; Non impostare anche scm-do-build-during-deployment o enable-oryx-build. Impostazione predefinita: false. |
| SCM-do-build-during-deployment | Consentire al sito Kudu di eseguire operazioni pre-deployment come le build remote. Imposta in true modo che Kudu costruisca il tuo progetto durante il deployment. Impostazione predefinita: false. Per altre informazioni, vedere SCM_DO_BUILD_DURING_DEPLOYMENT. |
| enable-oryx-build | Permette a Kudu di risolvere le dipendenze di progetto usando Oryx. Imposta sia questo che scm-do-build-during-deployment per true usare Oryx invece del flusso di lavoro. Impostazione predefinita: false. Solo Linux. |
| slot-name | Lo slot di distribuzione in cui distribuire. Predefinito: slot di produzione. |
| publish-profile | Nome del segreto GitHub che contiene il profilo di pubblicazione. Non è necessario quando si utilizza l'autenticazione OIDC raccomandata. |
| sku | Impostato su flexconsumption quando si autentica con pubblicazione profilo su un piano Flex Consumption. Non è necessario con l'autenticazione OIDC o altri piani di hosting. |
| respect-pom-xml | (solo Java) Imposta per true derivare l'artefatto di distribuzione da pom.xml. Quando true, imposta il pacchetto su .. Impostazione predefinita: false. |
| rispetto-funcignore | Imposta per true onorare il file .funcignore ed escludere i percorsi elencati. Impostazione predefinita: false. |
La tabella seguente mostra quali parametri sono supportati per ciascun piano di hosting:
| Parametro | Flex Consumption | Elastic Premium | Dedicated | Consumo |
|---|---|---|---|---|
| app-name | Richiesto | Richiesto | Richiesto | Richiesto |
| package | Richiesto | Richiesto | Richiesto | Richiesto |
| Costruzione remota | Optional | — | — | — |
| SCM-do-build-during-deployment | — | Optional | Optional | Optional |
| enable-oryx-build | — | Opzionale (Linux) | Opzionale (Linux) | Opzionale (Linux) |
| slot-name | Non supportato | Optional | Optional | Optional |
| publish-profile | Non consigliata | Non consigliata | Non consigliata | Non consigliata |
| sku | Pubblica solo il profilo | — | — | — |
| respect-pom-xml | Opzionale (Java) | Opzionale (Java) | Opzionale (Java) | Opzionale (Java) |
| rispetto-funcignore | Optional | Optional | Optional | Optional |
Metodi di distribuzione
Quando usi GitHub Actions, il metodo di distribuzione dipende dal tuo piano di hosting:
| Piano di hosting | Metodo di distribuzione |
|---|---|
| Consumo flessibile | Una distribuzione |
| Elastic Premium | Implementazione Zip |
| Dedicato (servizio app) | Implementazione Zip |
| Consumo | Windows: Distribuzione tramite Zip Linux: URL del pacchetto esterno* |
La possibilità di eseguire le app in Linux in un piano a consumo è pianificata per il ritiro. Per altre informazioni, vedere Hosting del piano a consumo di Funzioni di Azure.
Per altre informazioni, vedere Deployment technologies in Funzioni di Azure.