Deploy naar Azure Functions door gebruik te maken van GitHub Actions

Je kunt een GitHub Actions-workflow gebruiken om automatisch je functiecode te bouwen en uit te rollen naar Azure door gebruik te maken van de Azure/functions-action.

Om te deployen met GitHub Actions, voltooi je deze drie belangrijke stappen:

  1. Maak een door gebruikers toegewezen beheerde identiteit aan in Azure met een gefedereerd inlogeerbewijs dat je GitHub-repository vertrouwt, en wijs deze toe de rol van Website Contributor in je functie-app.
  2. Voeg de client-ID, tenant-ID en abonnements-ID van de identiteit toe als repository-geheimen in GitHub.
  3. Voeg een workflow YAML-bestand toe aan je repository dat OpenID Connect (OIDC) gebruikt azure/login om te authenticeren, en vervolgens oproepen Azure/functions-action om te deployen.

Wanneer je het Azure-portaal gebruikt om GitHub Actions in te schakelen, voert Functions deze taken automatisch uit, zowel in je Azure-abonnement als in je GitHub-repository.

Creëer een workflowconfiguratie voor Azure Functions

Je onderhoudt een YAML-bestand (.yml) dat de workflowconfiguratie in het /.github/workflows/ pad in je repository definieert. Deze definitie bevat de acties en parameters waaruit de werkstroom bestaat, die specifiek is voor de ontwikkeltaal van uw functies.

Kies een methode om je workflowbestand te maken met de selector bovenaan het artikel:

Method Geschikt voor OIDC-ondersteuning
Workflowsjabloon Volledige controle: kopieer een OIDC-klaar sjabloon en pas het aan Configuratie vereist
Azure-portal Makkelijkste setup: het portaal kan de identiteit, inloggegevens en workflowbestand voor je aanmaken Voor jou geconfigureerd
GitHub-marktplaats GitHub-eerst: begin met de ingebouwde marktplaatstemplates van GitHub Vereist configuratie en sjabloonaanpassing

Overzicht van verificatie

GitHub Actions moet zich authenticeren bij Azure om je code te kunnen deployen. Dit artikel gebruikt OpenID Connect (OIDC), de aanbevolen authenticatiemethode. OIDC gebruikt gefedereerde inloggegevens om een vertrouwensrelatie te creëren tussen je GitHub-repository en een door de gebruiker toegewezen beheerde identiteit in Microsoft Entra. Er worden geen geheimen opgeslagen in GitHub.

Voorbeeld van OIDC-authenticatie

Het volgende inline voorbeeld toont het kernpatroon van OIDC-authenticatie en -deployment dat in alle workflowtemplates wordt gebruikt:

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-authenticatie overwegingen

  • OIDC gebruikt workload identity federation en ondersteunt alleen door gebruikers toegewezen beheerde identiteiten.
  • Wanneer je een op GitHub Actions gebaseerde deployment inschakelt in het Azure-portaal, wordt standaard OIDC-authenticatie gebruikt.
  • Met OIDC worden de client-ID, tenant-ID en abonnements-ID van de beheerde identiteit opgeslagen als GitHub-repositorygeheimen.
  • Gebruik Azure rolgebaseerde toegangscontrole (Azure RBAC) om de toegang alleen te beperken tot de Azure-bronnen die nodig zijn voor uw implementatie.

Vereisten

  • Een Azure-account met een actief abonnement. Gratis een account maken

  • Een GitHub-account. Als u nog geen account hebt, kunt u zich aanmelden voor gratis.

  • Project-broncode in een GitHub-repository.

  • Een basisbegrip van GitHub Actions-workflows. Als je nieuw bent met GitHub Actions, zie dan Understanding GitHub Actions.

  • Een werkende functie-app die op Azure wordt gehost (alleen code-based of container-based).

  • (Alleen container-implementaties) Een bestaand containerregister, zoals Azure Container Registry.

  • Azure CLI, tijdens lokale ontwikkeling. U kunt ook de Azure CLI in Azure Cloud Shell gebruiken.

Maak een beheerde identiteit aan voor GitHub Actions-implementatie

OpenID Connect (OIDC) is de aanbevolen authenticatiemethode voor GitHub Actions-implementaties naar Azure Functions. Met OIDC configureer je een door de gebruiker toegewezen beheerde identiteit in Azure en creëer je een vertrouwensrelatie met je GitHub-repository. De workflow kan dan authenticeren met Azure zonder inloggegevens als geheimen op te slaan.

  1. Gebruik de opdracht az identity create om een door de gebruiker toegewezen beheerde identiteit te maken:

    az identity create --name myGitHubDeployIdentity --resource-group <RESOURCE_GROUP> \
    --query "{clientId: clientId, tenantId: tenantId}" -o table
    

    Vervang <RESOURCE_GROUP> door de naam van uw resourcegroep.

  2. Let op de outputwaarden op de clientId en tenantId . Haal ook je abonnements-ID:

    az account show --query "{subId: id}" -o table
    

    Je hebt deze drie waarden later nodig wanneer je referenties toevoegt aan GitHub.

  3. Gebruik het az role assignment create-commando om de Website Contributor rol toe te wijzen aan de beheerde identiteit, gescoped naar je functie-app:

    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_ID
    

    Vervang <APP_NAME> en <RESOURCE_GROUP> door respectievelijk de namen van je app en resourcegroep.

  4. Gebruik het az identity federated-credential create commando om een gefedereerd credential te creëren dat tokens uit je GitHub-repository vertrouwt:

    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://AzureADTokenExchange
    

    Vervang <RESOURCE_GROUP>, <GITHUB_ORG>, <REPO_NAME> en <BRANCH_NAME> met uw eigen waarden. Het onderwerp moet overeenkomen met de branch die je workflow activeert.

  5. (Optioneel) Als je een container vanuit Azure Container Registry uitrolt, wijs je de acrpull rol dan ook toe aan de beheerde identiteit:

    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>
    

    Vervang <SUBSCRIPTION_ID>, <RESOURCE_GROUP> en <REGISTRY_NAME> door uw waarden.

Voeg inloggegevens toe aan GitHub

Gebruik de waarden die je hebt gekopieerd toen je de beheerde identiteit hebt aangemaakt.

  1. Ga in GitHub naar uw opslagplaats.

  2. Ga naar Instellingen>, Geheimen en variabelen,>Acties.

  3. Selecteer op het tabblad GeheimenNieuw repositorygeheim.

  4. Maak elk van de volgende geheimen aan:

    Name Value
    AZURE_CLIENT_ID De clientId van de beheerde identiteit
    AZURE_TENANT_ID De tenantId van de beheerde identiteit
    AZURE_SUBSCRIPTION_ID De abonnements-ID die je functie-app bevat

Voor container-implementaties vanuit een privé-register heb je ook register-specifieke geheimen nodig. Voor meer informatie, zie Docker Login Actie.

De werkstroom maken op basis van een sjabloon

De beste manier om handmatig een werkstroomconfiguratie te maken, is door te beginnen met de officieel ondersteunde sjabloon.

  1. Kies Windows of Linux om ervoor te zorgen dat u de sjabloon voor het juiste besturingssysteem krijgt.

    Implementaties voor Windows maken gebruik van runs-on: windows-latest. Containerized deployments vereisen Linux.

  2. Gebruik de taalspecifieke OIDC-workflowtemplate uit de Azure Functions actions repository. Kopieer de volledige inhoud van het bestand naar een nieuw bestand dat in je repository is genoemd .github/workflows/deploy-function-app.yml :

    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'
    
  3. Werk in het sjabloon de env: variabelen voor je project bij. Elke template vereist AZURE_FUNCTIONAPP_NAME. De andere variabelen hangen af van je taal:

    Veranderlijk Vereist Beschrijving
    AZURE_FUNCTIONAPP_NAME Ja Your function app name in Azure
    DOTNET_VERSION Ja De .NET-versie van je project (bijvoorbeeld 10.0.x)
    AZURE_FUNCTIONAPP_PROJECT_PATH No Pad naar je projectmap. Standaard: . (repository root)
  4. De OIDC-sjablonen bevatten al de azure/login stap met OIDC-authenticatie. Controleer of de secrets.AZURE_CLIENT_ID, secrets.AZURE_TENANT_ID, en secrets.AZURE_SUBSCRIPTION_ID referenties overeenkomen met de repository-geheimen die je hebt aangemaakt.

  5. Voeg dit nieuwe YAML-bestand toe aan het /.github/workflows/ pad in uw opslagplaats.

De werkstroomconfiguratie maken in de portal

Wanneer je het portaal gebruikt om GitHub Actions in te schakelen, regelt Functions automatisch alle instellingen. Je hoeft geen beheerde identiteit handmatig aan te maken, inloggegevens te configureren of een workflowbestand te schrijven. Functions voert deze taken voor u uit:

In je Azure-abonnement:

  • Maakt een door gebruikers toegewezen beheerde identiteit aan en wijst deze de rol van Website-bijdrager toe in je functie-app.
  • Voegt een gefedereerd inloggegevens toe aan de beheerde identiteit voor GitHub OIDC-authenticatie.

In je GitHub-repository:

  • Voegt de client-ID, abonnements-ID en tenant-ID-waarden toe als GitHub Actions-geheimen.
  • Maakt een workflowbestand aan op basis van je applicatiestack en commit dit naar .github/workflows.

Tijdens het aanmaken van de app-functie

U kunt snel aan de slag met GitHub Actions via het tabblad Implementatie wanneer u een functie maakt in Azure portal. Een GitHub Actions-werkstroom toevoegen wanneer u een nieuwe functie-app maakt:

  1. Selecteer in de Azure-portal, Implementatie in de workflow Create Function App.

  2. Schakel Continuous Deployment in als u wilt dat elke code-update een codepush naar Azure portal activeert.

  3. Selecteer onder GitHub-instellingen'Autoriseren om je GitHub-account te verbinden. Log in met het GitHub-account dat schrijfrechten heeft voor je repository.

  4. Voer uw GitHub organisatie, opslagplaats en vertakking in.

  5. Selecteer optioneel Voorbeeldbestand om te zien hoe het workflowbestand eruitziet voordat het wordt gegenereerd en toegevoegd aan je repository.

  6. Voltooi de configuratie van uw functie-app. Uw GitHub-opslagplaats bevat nu een nieuw werkstroombestand in /.github/workflows/.

Voor een bestaande functie-app

Een GitHub Actions-werkstroom toevoegen aan een bestaande functie-app:

  1. Ga naar je functie-app in het Azure-portaal en selecteer Deployment>Deployment Center.

  2. Selecteer Continue Uitrol (CI/CD). Kies voor Bron de optie GitHub. Als je het standaardbericht Building with GitHub Actions niet ziet, selecteer dan Change provider, kies GitHub Actions en selecteer OK.

  3. Als je nog geen toegang tot GitHub hebt goedgekeurd, kies dan Autoriseren. Geef uw GitHub referenties op en selecteer Aanmelden. Om een ander GitHub-account te autoriseren, selecteert u Account wijzigen en meldt u zich aan met een ander account.

  4. Selecteer uw GitHub Organization, Repository en Branch. Om te deployen met GitHub Actions, moet je schrijftoegang hebben tot deze repository.

  5. Selecteer voor de optie WorkflowEen workflow toevoegen. Deze optie maakt een nieuw workflowbestand aan in /.github/workflows/. Om een bestaande workflow te gebruiken, selecteer je Gebruik beschikbare workflow en kies je je workflowbestand.

  6. Kies in de authenticatie-instellingenvoor User-assigned identity om OpenID Connect (OIDC) te gebruiken, wat wordt aanbevolen omdat je geen geheimen in GitHub hoeft op te slaan. Selecteer uw abonnement en de (nieuwe) voorgestelde identiteitsnaam. Er wordt een nieuwe door gebruikers toegewezen beheerde identiteit aangemaakt en krijgt toegang tot de rol Website Contributor . Als je een bestaande identiteit gebruikt, moet je deze eerst toegang geven tot de rol Website-bijdrager .

    Belangrijk

    Wanneer je Basisauthenticatie selecteert, wordt je publicatieprofiel, dat gedeelde geheimen bevat, opgeslagen in GitHub Secrets. Je moet ook SCM-basisauthenticatie inschakelen, wat je app minder veilig maakt.

  7. Selecteer Voorbeeld-bestand om het werkstroombestand te zien dat wordt toegevoegd aan uw GitHub-opslagplaats in .github/workflows/.

  8. Selecteer Opslaan om het werkstroombestand toe te voegen aan uw opslagplaats. Selecteer het tabblad Logs om de status van huidige en eerdere uitrolingen te bekijken.

Het configuratiebestand voor de werkstroom maken

U kunt het configuratiebestand voor de GitHub Actions werkstroom maken vanuit de Azure Functions sjablonen rechtstreeks vanuit uw GitHub opslagplaats.

  1. Ga in GitHub naar uw opslagplaats.

  2. Selecteer Acties en nieuwe werkstroom.

  3. Zoeken naar functies.

    Scherm van zoeken naar sjablonen voor GitHub Actions functies.

  4. Zoek in de weergegeven werkstromen van de functionaliteit-app, die zijn gemaakt door Microsoft Azure, naar degene die overeenkomt met uw codetaal en selecteer Configureren.

  5. Werk in het zojuist gemaakte YAML-bestand de parameter env.AZURE_FUNCTIONAPP_NAME bij met de naam van uw functie-app-resource in Azure. Je moet misschien ook de parameter aanpassen die de taalversie van je app bepaalt, bijvoorbeeld DOTNET_VERSION voor C# of PYTHON_VERSION Python-apps.

  6. De standaardsjablonen kunnen gebruik maken van publicatieprofielauthenticatie in plaats van de aanbevolen OIDC. Om over te stappen naar OIDC en af te stemmen op portaalgedrag, breng je de volgende wijzigingen aan:

    • Verwijder de publish-profileparameters , scm-do-build-during-deployment, en enable-oryx-build uit Azure/functions-action.

    • Verwijder de environment instelling uit de taak (indien aanwezig), omdat het subject voor de gefedereerde credential overeenkomt met de branch trigger.

    • Voeg een azure/login stap toe vóór de Azure/functions-action stap:

      - 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 }}
      
    • Voeg de volgende rechten toe aan de taak:

      permissions:
        id-token: write
        contents: read
      
  7. Controleer of het nieuwe workflowbestand is opgeslagen met een passende naam en /.github/workflows/ selecteer Commit changes.

Azure Functions-actie

Met de actie Azure Functions (Azure/functions-action) wordt gedefinieerd hoe uw code wordt gepubliceerd naar een bestaande functie-app in Azure of naar een specifieke site in uw app.

Parameters

De volgende tabel beschrijft de invoerparameters die worden ondersteund door Azure/functions-action:

Parameter Beschrijving
app-naam (Vereist) De naam van je functie-app in Azure.
package (Vereist) De weg naar je project om te publiceren. Standaard: . (alle bestanden in de repository).
Externe bouw Ingesteld op true om een build-actie vanuit Kudu in te schakelen bij het uitrollen naar een Flex Consumption-app. Oryx-build wordt altijd uitgevoerd; Stel ook niet scm-do-build-whileing-deployment of enable-oryx-build in. Standaard: false.
SCM-DO-Build-Whileing-Deployment Laat de Kudu-site pre-deployment operaties uitvoeren, zoals remote builds. Stel in dat true Kudu je project tijdens de deployment bouwt. Standaard: false. Zie SCM_DO_BUILD_DURING_DEPLOYMENT voor meer informatie.
Enable-Oryx-build Laat Kudu projectafhankelijkheden oplossen door Oryx te gebruiken. Stel zowel dit als scm-do-build-whileing-deployment in om true Oryx te gebruiken in plaats van de workflow. Standaard: false. Alleen Linux.
sitenaam De inzetplek om naartoe te gaan. Standaard: productieslot.
publicatieprofiel De naam van het GitHub geheim dat uw publicatieprofiel bevat. Niet nodig bij het gebruik van de aanbevolen OIDC-authenticatie.
Sku Stel in op flexconsumption bij authenticatie met public-profile op een Flex Consumption-plan. Niet nodig bij OIDC-authenticatie of andere hostingplannen.
respect-pom-xml (Java alleen) Ingesteld op true om het inzetartefact af te leiden van pom.xml. Wanneer true, zet het pakket op .. Standaard: false.
respect-funcignore Stel in op true om je .funcignore-bestand te honoreren en vermelde paden uit te sluiten. Standaard: false.

De volgende tabel toont welke parameters worden ondersteund voor elk hostingplan:

Parameter Flex Consumption Elastische premie Dedicated Consumptie
app-naam Vereist Vereist Vereist Vereist
package Vereist Vereist Vereist Vereist
Externe bouw Optional
SCM-DO-Build-Whileing-Deployment Optional Optional Optional
Enable-Oryx-build Optioneel (Linux) Optioneel (Linux) Optioneel (Linux)
sitenaam Niet ondersteund Optional Optional Optional
publicatieprofiel Niet aanbevolen Niet aanbevolen Niet aanbevolen Niet aanbevolen
Sku Alleen publiceren-profiel
respect-pom-xml Optioneel (Java) Optioneel (Java) Optioneel (Java) Optioneel (Java)
respect-funcignore Optional Optional Optional Optional

Implementatiemethoden

Wanneer je GitHub Actions gebruikt, hangt de deployment-methode af van je hostingplan:

Hostingabonnement Implementatiemethode
Flexverbruik Een implementatie
Elastische premie Zip-deploy
Toegewezen (App Service) Zip-deploy
Verbruik Windows: Zip-implementatie
Linux: URL van extern pakket*

* De mogelijkheid om uw apps uit te voeren op Linux in een verbruiksabonnement is gepland voor buitengebruikstelling. Zie Azure Functions Hosting van verbruiksabonnementen voor meer informatie.

Zie Implementatietechnologieën in Azure Functions voor meer informatie.

Volgende stappen