Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan använda ett GitHub Actions-arbetsflöde för att automatiskt bygga och distribuera din funktionskod till Azure genom att använda .Azure/functions-action
För att distribuera med hjälp av GitHub Actions, genomför dessa tre viktiga steg:
- Skapa en användartilldelad hanterad identitet i Azure med en federerad inloggningsbehörighet som litar på ditt GitHub-arkiv, och tilldela den rollen som webbplatsbidragsgivare i din funktionsapp.
- Lägg till identitetens klient-ID, tenant-ID och prenumerations-ID som repository-hemligheter i GitHub.
- Lägg till en arbetsflödes-YAML-fil i ditt repository som använder
azure/loginOpenID Connect (OIDC) för autentisering, sedan anropAzure/functions-actionför att distribuera.
När du använder Azure-portalen för att aktivera GitHub Actions utför Functions automatiskt dessa uppgifter, både i din Azure-prenumeration och i ditt GitHub-arkiv.
Skapa en arbetsflödeskonfiguration för Azure Functions
Du underhåller en YAML-fil (.yml) som definierar arbetsflödeskonfigurationen i sökvägen /.github/workflows/ i ditt repository. Den här definitionen innehåller de åtgärder och parametrar som utgör arbetsflödet, vilket är specifikt för utvecklingsspråket för dina funktioner.
Välj en metod för att skapa din arbetsflödesfil med hjälp av väljaren högst upp i artikeln:
| Method | Bäst för | OIDC-stöd |
|---|---|---|
| Arbetsflödesmall | Full kontroll: kopiera en OIDC-klar mall och anpassa den | Kräver konfiguration |
| Azure Portal | Enklaste installationen: portalen kan skapa identitet, inloggningsuppgifter och arbetsflödesfiler åt dig | Konfigurerad för dig |
| GitHub-marknadsplats | GitHub-först: börja med GitHub:s inbyggda marknadsplatsmallar | Kräver konfiguration och malländring |
Översikt över autentisering
GitHub Actions måste autentiseras med Azure för att distribuera din kod. Denna artikel använder OpenID Connect (OIDC), som är den rekommenderade autentiseringsmetoden. OIDC använder federerade inloggningsuppgifter för att skapa en förtroenderelation mellan ditt GitHub-arkiv och en användartilldelad hanterad identitet i Microsoft Entra. Inga hemligheter lagras i GitHub.
Exempel på OIDC-autentisering
Följande inline-exempel visar det centrala OIDC-autentiserings- och distributionsmönstret som används i alla arbetsflödesmallar:
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 }}
GitHub Actions OIDC-autentiseringsöverväganden
- OIDC använder arbetsbelastningsidentitetsfederation och stöder endast användar-tilldelade hanterade identiteter.
- När du aktiverar en GitHub Actions-baserad distribution i Azure-portalen används OIDC-autentisering som standard.
- Med OIDC lagras den hanterade identitetens klient-ID, tenant-ID och prenumerations-ID som GitHub-arkivhemligheter.
- Använd Azure rollbaserad åtkomstkontroll (Azure RBAC) för att begränsa åtkomsten endast till de Azure-resurser som krävs för din installation.
Förutsättningar
Ett Azure konto med en aktiv prenumeration. Skapa ett konto kostnadsfritt.
Ett GitHub konto. Om du inte har ett sådant kan du registrera dig utan kostnad.
Project-källkod i ett GitHub-arkiv.
En grundläggande förståelse för GitHub Actions-arbetsflöden. Om du är ny på GitHub Actions, se Förstå GitHub Actions.
En fungerande funktionsapp som hostas på Azure (endast kod eller containerbaserad).
(Endast containerutplaceringar) Ett befintligt containerregister, såsom Azure Container Registry.
- Azure CLI när du utvecklar lokalt. Du kan också använda Azure CLI i Azure Cloud Shell.
Skapa en hanterad identitet för GitHub Actions-distribution
OpenID Connect (OIDC) är den rekommenderade autentiseringsmetoden för GitHub Actions-distributioner till Azure Functions. Med OIDC konfigurerar du en användartilldelad hanterad identitet i Azure och skapar en förtroenderelation med ditt GitHub-arkiv. Arbetsflödet kan sedan autentisera sig med Azure utan att lagra inloggningsuppgifter som hemligheter.
Använd kommandot az identity create för att skapa en användartilldelad hanterad identitet:
az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \ --query "{clientId: clientId, tenantId: tenantId}" -o tableErsätt
<RESOURCE_GROUP>med namnet på din resursgrupp.Från utdatan, notera
clientIdochtenantIdvärdena. Skaffa också ditt prenumerations-ID:az account show --query "{subId: id}" -o tableDu behöver dessa tre värden senare när du lägger till inloggningsuppgifter på GitHub.
Använd kommandot az role assignment create för att tilldela
Website Contributorrollen till den hanterade identiteten, begränsad till din funktionsapp: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_IDErsätt
<APP_NAME>och<RESOURCE_GROUP>med namnen på din app respektive resursgrupp.Använd az identity federated-credential create-kommandot för att skapa en federerad legitimation som litar på tokens från ditt GitHub-arkiv:
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://AzureADTokenExchangeErsätt
<RESOURCE_GROUP>,<GITHUB_ORG>,<REPO_NAME>och<BRANCH_NAME>med dina värden. Ämnet måste matcha den gren som triggar ditt arbetsflöde.(Valfritt) Om du distribuerar en container från Azure Container Registry, tilldela
acrpulläven rollen till den hanterade identiteten: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>Ersätt
<SUBSCRIPTION_ID>,<RESOURCE_GROUP>och<REGISTRY_NAME>med dina värden.
Lägg till inloggningsuppgifter på GitHub
Använd de värden du kopierade när du skapade den hanterade identiteten.
I GitHub går du till lagringsplatsen.
Gå till Inställningar>, Hemligheter och variabler, Åtgärder>.
På fliken Hemligheter , välj Ny hemlighet i arkivet.
Skapa var och en av följande hemligheter:
Name Value AZURE_CLIENT_IDDen clientIdhanterade identitetenAZURE_TENANT_IDDen tenantIdhanterade identitetenAZURE_SUBSCRIPTION_IDPrenumerations-ID:t som innehåller din funktionsapp
För containerutplaceringar från ett privat register behöver du också registerspecifika hemligheter. För mer information, se Docker Login Action.
Skapa arbetsflödet från en mall
Det bästa sättet att skapa en arbetsflödeskonfiguration manuellt är att börja från mallen som stöds officiellt.
Välj antingen Windows eller Linux för att se till att du får mallen för rätt operativsystem.
Använd den språkspecifika OIDC-arbetsflödesmallen från Azure Functions actions repository. Kopiera hela filinnehållet till en ny fil som heter
.github/workflows/deploy-function-app.ymli ditt arkiv: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'I mallen, uppdatera variablerna
env:för ditt projekt. Varje mall kräverAZURE_FUNCTIONAPP_NAME. De andra variablerna beror på ditt språk:Variabel Krävs Description AZURE_FUNCTIONAPP_NAMEYes Your function app name in Azure DOTNET_VERSIONYes .NET-versionen av ditt projekt (till exempel, 10.0.x)AZURE_FUNCTIONAPP_PROJECT_PATHNej Väg till din projektmapp. Standard: .(repository-rot)OIDC-mallarna inkluderar redan steget
azure/loginmed OIDC-autentisering. Kontrollera att , , ochsecrets.AZURE_CLIENT_IDreferenserna stämmer överens medsecrets.AZURE_TENANT_ID.secrets.AZURE_SUBSCRIPTION_IDLägg till den här nya YAML-filen i sökvägen
/.github/workflows/i din lagringsplats.
Skapa arbetsflödeskonfigurationen i portalen
När du använder portalen för att aktivera GitHub Actions hanterar Functions all installation automatiskt. Du behöver inte manuellt skapa en hanterad identitet, konfigurera behörigheter eller skriva en arbetsflödesfil. Functions utför dessa uppgifter åt dig:
I din Azure-prenumeration:
- Skapar en användartilldelad hanterad identitet och tilldelar den rollen som webbplatsbidragsgivare i din funktionsapp.
- Lägger till en federerad inloggningsinformation till den hanterade identiteten för GitHub OIDC-autentisering.
I ditt GitHub-arkiv:
- Lägger till klient-ID, prenumerations-ID och tenant-ID-värden som GitHub Actions-hemligheter.
- Skapar en arbetsflödesfil baserad på din applikationsstack och commitar den till
.github/workflows.
Under funktionsappens skapande
Du kan komma igång snabbt med GitHub Actions via fliken Distribution när du skapar en funktion i Azure portalen. Så här lägger du till ett GitHub Actions arbetsflöde när du skapar en ny funktionsapp:
I Azure-portalen väljer du Deployment i flödet Skapa funktionsapp.
Aktivera Kontinuerlig distribution om du vill att varje koduppdatering ska utlösa en kod-push till Azure-portalen.
Under GitHub-inställningar, välj Auktorisera för att koppla ditt GitHub-konto. Logga in med GitHub-kontot som har skrivbehörighet till ditt repository.
Ange din GitHub organisation, lagringsplats och gren.
Valfritt, välj Förhandsgranska fil för att se hur arbetsflödesfilen ser ut innan den genereras och läggs till i ditt arkiv.
Slutför konfigurationen av funktionsappen. Din GitHub-lagringsplats innehåller nu en ny arbetsflödesfil i
/.github/workflows/.
För en befintlig funktionsapp
Så här lägger du till ett GitHub Actions arbetsflöde i en befintlig funktionsapp:
Gå till din funktionsapp i Azure-portalen och välj Deployment>Deployment Center.
Välj Kontinuerlig Distribution (CI/CD). För Källa väljer du GitHub. Om du inte ser standardmeddelandet Bygger med GitHub Actions, välj Change provider, välj GitHub Actions och välj OK.
Om du inte redan har auktoriserat GitHub-åtkomst, välj Auktorisera. Ange dina GitHub autentiseringsuppgifter och välj Sign in. Om du vill auktorisera ett annat GitHub konto väljer du Change-konto och loggar in med ett annat konto.
Välj din GitHub Organization, Repository och Branch. För att distribuera med GitHub Actions måste du ha skrivbehörighet till detta arkiv.
För alternativet Arbetsflöde, välj Lägg till ett arbetsflöde. Detta alternativ skapar en ny arbetsflödesfil i
/.github/workflows/. För att använda ett befintligt arbetsflöde, välj Använd tillgängligt arbetsflöde och välj din arbetsflödesfil.I autentiseringsinställningarna, välj Användartilldelad identitet för att använda OpenID Connect (OIDC), vilket rekommenderas eftersom det inte kräver att du lagrar hemligheter i GitHub. Välj din prenumeration och det (nya) föreslagna identitetsnamnet. En ny användartilldelad hanterad identitet skapas och ges tillgång till rollen som webbplatsbidragsgivare . Om du använder en befintlig identitet måste du först ge den tillgång till rollen som webbplatsbidragsgivare .
Viktigt!
När du väljer Grundläggande autentisering lagras din publiceringsprofil, som innehåller delade hemligheter, i GitHub Secrets. Du måste också aktivera SCM-grundläggande autentisering, vilket gör din app mindre säker.
Välj Förhandsfil för att se arbetsflödesfilen som läggs till i din GitHub-lagringsplats i
.github/workflows/.Välj Spara för att lägga till arbetsflödesfilen på lagringsplatsen. Välj fliken Loggar för att se status för nuvarande och tidigare distributioner.
Skapa arbetsflödeskonfigurationsfilen
Du kan skapa konfigurationsfilen för GitHub Actions arbetsflöde från Azure Functions mallar direkt från din GitHub lagringsplats.
I GitHub går du till lagringsplatsen.
Välj Åtgärder och Nytt arbetsflöde.
Sök efter funktioner.
I de funktionsapparbetsflöden som visas som skapats av Microsoft Azure letar du reda på det som matchar kodspråket och väljer Configure.
I den nyligen skapade YAML-filen uppdaterar du parametern
env.AZURE_FUNCTIONAPP_NAMEmed namnet på funktionsappresursen i Azure. Du kan också behöva uppdatera parametern som sätter språkversionen som används av din app, till exempelDOTNET_VERSIONför C# ellerPYTHON_VERSIONPython-appar.Standardmallarna kan använda verifiering av publicera profiler istället för den rekommenderade OIDC. För att byta till OIDC och anpassa dig till portalbeteenden, gör följande ändringar:
Ta bort ,
publish-profile, ochscm-do-build-during-deploymentparametrarnaenable-oryx-buildfrånAzure/functions-action.Ta bort inställningen
environmentfrån jobbet (om den finns), eftersom den federerade behörighetssubjektet måste matcha branch trigger.Lägg till ett
azure/loginsteg före stegetAzure/functions-action:- 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 }}Lägg till följande behörigheter i jobbet:
permissions: id-token: write contents: read
Verifiera att den nya arbetsflödesfilen sparas med ett lämpligt namn i
/.github/workflows/och välj Commit changes.
Azure Functions åtgärd
Åtgärden Azure Functions (Azure/functions-action) definierar hur koden publiceras till en befintlig funktionsapp i Azure eller till ett specifikt fack i din app.
Parametrar
Följande tabell beskriver de indataparametrar som stöds av Azure/functions-action:
| Parameter | Description |
|---|---|
| appnamn | (Obligatoriskt) Namnet på din funktionsapp i Azure. |
| paket | (Obligatoriskt) Vägen till ditt projekt att publicera. Standard: . (alla filer i arkivet). |
| Fjärrbyggnation | Ställ in på true för att aktivera en byggåtgärd från Kudu när du distribuerar till en Flex Consumption-app. Oryx-bygge utförs alltid; Sätt inte heller SCM-bygg-under-utplacering eller aktivera-oryx-bygga. Standardvärde: false. |
| SCM-DO-bygg-under-utplacering | Låt Kudu-platsen utföra fördriftoperationer som fjärrbyggnationer. Ställ in så att true Kudu bygger ditt projekt under driften. Standardvärde: false. Mer information finns i SCM_DO_BUILD_DURING_DEPLOYMENT. |
| aktivera-oryx-bygge | Låt Kudu lösa projektberoenden genom att använda Oryx. Ställ in både detta och scm-do-build-undering-deployment att true använda Oryx istället för arbetsflödet. Standardvärde: false. Linux, endast. |
| slot-name | Utplaceringsplatsen att utplacera till. Standard: produktionsplats. |
| publicera profil | Namnet på den GitHub-hemlighet som innehåller din publiceringsprofil. Inte nödvändigt när man använder rekommenderad OIDC-autentisering. |
| Sku | Ställ in på flexconsumption när du autentiserar med publicish-profile på en Flex Consumption-plan. Behövs inte med OIDC-autentisering eller andra hostingplaner. |
| respect-pom-xml | (endast Java) Ställ in på true för att härleda utplaceringsartefakten från pom.xml. När true, ställ paketet till .. Standardvärde: false. |
| respekt-funkonignär | Ställ in på true att respektera din .funcignore-fil och uteslut listade vägar. Standardvärde: false. |
Följande tabell visar vilka parametrar som stöds för varje värdplan:
| Parameter | Flex Consumption | Elastisk premie | Dedicated | Konsumtion |
|---|---|---|---|---|
| appnamn | Krävs | Krävs | Krävs | Krävs |
| paket | Krävs | Krävs | Krävs | Krävs |
| Fjärrbyggnation | Optional | — | — | — |
| SCM-DO-bygg-under-utplacering | — | Optional | Optional | Optional |
| aktivera-oryx-bygge | — | Valfritt (Linux) | Valfritt (Linux) | Valfritt (Linux) |
| slot-name | Stöds ej | Optional | Optional | Optional |
| publicera profil | Rekommenderas inte | Rekommenderas inte | Rekommenderas inte | Rekommenderas inte |
| Sku | Endast publicera profil | — | — | — |
| respect-pom-xml | Valfritt (Java) | Valfritt (Java) | Valfritt (Java) | Valfritt (Java) |
| respekt-funkonignär | Optional | Optional | Optional | Optional |
Distributionsmetoder
När du använder GitHub Actions beror distributionsmetoden på din hostingplan:
| Hostingplan | Distributionsmetod |
|---|---|
| Flexförbrukning | En distribution |
| Elastisk premie | Zip-distribution |
| Dedikerad (App Service) | Zip-distribution |
| Förbrukning | Windows: Distribution via ZIP Linux: URL för externt paket* |
* Möjligheten att köra dina appar på Linux i en konsumtionsplan planeras att avvecklas. Mer information finns i Azure Functions Consumption plan hosting.
Mer information finns i Distributionstekniker i Azure Functions.