Dela via


Kontinuerlig leverans med hjälp av GitHub Actions

Du kan använda ett GitHub Actions-arbetsflöde för att definiera ett arbetsflöde för att automatiskt skapa och distribuera kod till funktionsappen i Azure Functions.

En YAML-fil (.yml) som definierar arbetsflödeskonfigurationen /.github/workflows/ underhålls i sökvägen på lagringsplatsen. 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. Ett GitHub Actions-arbetsflöde för Functions utför följande uppgifter, oavsett språk:

  1. Konfigurera miljön.
  2. Skapa kodprojektet.
  3. Distribuera paketet till en funktionsapp i Azure.

Azure Functions-åtgärden hanterar distributionen till en befintlig funktionsapp i Azure.

Du kan skapa en arbetsflödeskonfigurationsfil för distributionen manuellt. Du kan också generera filen från en uppsättning språkspecifika mallar på något av följande sätt:

  • I Azure-portalen
  • Använda Azure CLI
  • Från din GitHub-lagringsplats

Om du inte vill skapa YAML-filen för hand väljer du en annan metod överst i artikeln.

Förutsättningar

  • Azure CLI, när du utvecklar lokalt. Du kan också använda Azure CLI i Azure Cloud Shell.

Generera autentiseringsuppgifter för distribution

Eftersom GitHub Actions använder din publiceringsprofil för att komma åt funktionsappen under distributionen måste du först hämta din publiceringsprofil och lagra den på ett säkert sätt som en GitHub-hemlighet.

Viktigt!

Publiceringsprofilen är en värdefull autentiseringsuppgift som ger åtkomst till Azure-resurser. Se till att du alltid transporterar och lagrar den säkert. I GitHub får publiceringsprofilen endast lagras i GitHub-hemligheter.

Ladda ned din publiceringsprofil

Så här laddar du ned publiceringsprofilen för funktionsappen:

  1. Välj funktionsappens översiktssida och välj sedan Hämta publiceringsprofil.

    Hämta publiceringsprofil

  2. Spara och kopiera innehållet i filen.

Lägg till GitHub-hemligheten

  1. Gå till din lagringsplats i GitHub.

  2. Gå till inställningar.

  3. Välj Hemligheter och variabler > Åtgärder.

  4. Välj Ny lagringsplatshemlighet.

  5. Lägg till en ny hemlighet med namnet AZURE_FUNCTIONAPP_PUBLISH_PROFILE och värdet inställt på innehållet i publiceringsprofilfilen.

  6. Välj Add secret (Lägg till hemlighet).

GitHub kan nu autentisera till din funktionsapp i Azure.

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.

  1. Välj antingen Windows eller Linux för att se till att du får mallen för rätt operativsystem.

    Distributioner till Windows använder runs-on: windows-latest.

  2. Kopiera den språkspecifika mallen från Azure Functions-åtgärdslagringsplatsen med hjälp av följande länk:

  3. Uppdatera parametern env.AZURE_FUNCTIONAPP_NAME med namnet på funktionsappresursen i Azure. Du kan också behöva uppdatera parametern som anger språkversionen som används av din app, till exempel DOTNET_VERSION för C#.

  4. Lägg till den här nya YAML-filen i /.github/workflows/ sökvägen i lagringsplatsen.

Skapa arbetsflödeskonfigurationen i portalen

När du använder portalen för att aktivera GitHub Actions skapar Functions en arbetsflödesfil baserat på programstacken och checkar in den på din GitHub-lagringsplats i rätt katalog.

Portalen hämtar automatiskt din publiceringsprofil och lägger till den i GitHub-hemligheterna för din lagringsplats.

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:

  1. I Azure-portalen väljer du Distribution i flödet Skapa funktionsapp.

    Skärmbild av distributionsalternativet på funktionsmenyn.

  2. Aktivera kontinuerlig distribution om du vill att varje koduppdatering ska utlösa en kod-push till Azure-portalen.

  3. Ange din GitHub-organisation, lagringsplats och gren.

    Skärmbild av GitHub-användarkontoinformation.

  4. Slutför konfigurationen av funktionsappen. GitHub-lagringsplatsen 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:

  1. Gå till funktionsappen i Azure-portalen och välj Distributionscenter.

  2. För Källa väljer du GitHub. Om du inte ser standardmeddelandet Skapa med GitHub Actions väljer du Ändra provider , väljer GitHub Actions och väljer OK.

  3. Om du inte redan har auktoriserad GitHub-åtkomst väljer du Auktorisera. Ange dina GitHub-autentiseringsuppgifter och välj Logga in. Om du vill auktorisera ett annat GitHub-konto väljer du Ändra konto och loggar in med ett annat konto.

  4. Välj din GitHub-organisation, lagringsplats och gren. Om du vill distribuera med GitHub Actions måste du ha skrivåtkomst till den här lagringsplatsen.

  5. I Autentiseringsinställningar väljer du om GitHub Actions ska autentiseras med en användartilldelad identitet eller använda grundläggande autentiseringsuppgifter . För grundläggande autentisering används de aktuella autentiseringsuppgifterna.

  6. Välj Förhandsgranskningsfil för att se arbetsflödesfilen som läggs till i GitHub-lagringsplatsen i github/workflows/.

  7. Välj Spara för att lägga till arbetsflödesfilen på lagringsplatsen.

Lägga till arbetsflödeskonfiguration på lagringsplatsen

Du kan använda az functionapp deployment github-actions add kommandot för att generera en arbetsflödeskonfigurationsfil från rätt mall för funktionsappen. Den nya YAML-filen lagras sedan på rätt plats (/.github/workflows/) på den GitHub-lagringsplats som du anger, medan publiceringsprofilfilen för din app läggs till i GitHub-hemligheter på samma lagringsplats.

  1. Kör det här az functionapp kommandot och ersätt värdena githubUser/githubRepo, MyResourceGroupoch MyFunctionapp:

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

    Det här kommandot använder en interaktiv metod för att hämta en personlig åtkomsttoken för ditt GitHub-konto.

  2. I terminalfönstret bör du se något som liknar följande meddelande:

    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. Kopiera den unika XXXX-XXXX koden, bläddra till https://github.com/login/deviceoch ange den kod som du kopierade. När du har angett koden bör du se något som liknar följande meddelande:

    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. Gå till din GitHub-lagringsplats och välj Åtgärder. Kontrollera att arbetsflödet kördes.

Skapa arbetsflödeskonfigurationsfilen

Du kan skapa konfigurationsfilen för GitHub Actions-arbetsflödet från Azure Functions-mallarna direkt från din GitHub-lagringsplats.

  1. Gå till din lagringsplats i GitHub.

  2. Välj Åtgärder och Nytt arbetsflöde.

  3. Sök efter funktioner.

    Skärmbild av sökning efter GitHub Actions-funktionsmallar.

  4. I de funktionsapparbetsflöden som visas som skapats av Microsoft Azure letar du reda på det som matchar ditt kodspråk och väljer Konfigurera.

  5. I den nyligen skapade YAML-filen uppdaterar du parametern env.AZURE_FUNCTIONAPP_NAME med namnet på funktionsappresursen i Azure. Du kan också behöva uppdatera parametern som anger språkversionen som används av din app, till exempel DOTNET_VERSION för C#.

  6. Kontrollera att den nya arbetsflödesfilen sparas i /.github/workflows/ och välj Checka in ändringar....

Uppdatera en arbetsflödeskonfiguration

Om du av någon anledning behöver uppdatera eller ändra en befintlig arbetsflödeskonfiguration går du bara till platsen /.github/workflows/ på lagringsplatsen, öppnar den specifika YAML-filen, gör nödvändiga ändringar och genomför sedan uppdateringarna till lagringsplatsen.

Exempel: konfigurationsfil för arbetsflöde

I följande mallexempel används version 1 av functions-action och en publish profile för autentisering. Mallen beror på ditt valda språk och det operativsystem som funktionsappen distribueras på:

Om din funktionsapp körs på Linux väljer du 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 }}

Azure Functions-åtgärd

Azure Functions-åtgärden (Azure/azure-functions) definierar hur koden publiceras till en befintlig funktionsapp i Azure eller till ett specifikt fack i din app.

Parametrar

Följande parametrar används oftast med den här åtgärden:

Parameter Förklaring
appnamn (Obligatoriskt) Namnet på funktionsappen.
slot-name (Valfritt) Namnet på ett specifikt distributionsfack som du vill distribuera till. Facket måste redan finnas i funktionsappen. När koden inte har angetts distribueras den till det aktiva facket.
publicera profil (Valfritt) Namnet på GitHub-hemligheten som innehåller din publiceringsprofil.

Följande parametrar stöds också, men används endast i specifika fall:

Parameter Förklaring
Paket (Valfritt) Anger en undersökväg i lagringsplatsen som du vill publicera från. Som standard är det här värdet inställt på , vilket innebär att .alla filer och mappar i GitHub-lagringsplatsen distribueras.
respect-pom-xml (Valfritt) Används endast för Java-funktioner. Om det krävs för att appens distributionsartefakt ska härledas från filen pom.xml. När du distribuerar Java-funktionsappar bör du ange den här parametern till true och inställd package.. Som standard är den här parametern inställd på false, vilket innebär att parametern package måste peka på appens artefaktplats, till exempel ./target/azure-functions/
respect-funcignore (Valfritt) Om GitHub Actions respekterar .funcignore-filen för att undanta filer och mappar som definierats i den. Ange det här värdet till true när lagringsplatsen har en .funcignore-fil och du vill använda den för att exkludera sökvägar och filer, till exempel textredigerarens konfigurationer, .vscode/eller en virtuell Python-miljö (.venv/). Standardinställningen är false.
scm-do-build-during-deployment (Valfritt) Om App Service-distributionsplatsen (Kudu) utför fördistributionsåtgärder. Distributionsplatsen för funktionsappen finns på https://<APP_NAME>.scm.azurewebsites.net/. Ändra den här inställningen till true när du behöver styra distributionerna i Kudu i stället för att matcha beroendena i GitHub Actions-arbetsflödet. Standardvärdet är false. Mer information finns i inställningen SCM_DO_BUILD_DURING_DEPLOYMENT .
enable-oryx-build (Valfritt) Om Kudu-distributionsplatsen löser dina projektberoenden med hjälp av Oryx. Ange till true när du vill använda Oryx för att lösa projektberoenden med hjälp av en fjärrversion i stället för GitHub Actions-arbetsflödet. När truebör du också ange scm-do-build-during-deployment till true. Standardvärdet är false.

Att tänka på

Tänk på följande när du använder Azure Functions-åtgärden:

  • När du använder GitHub Actions distribueras koden till din funktionsapp med zip-distribution för Azure Functions.

  • De autentiseringsuppgifter som krävs av GitHub för anslutning till Azure för distribution lagras som hemligheter i din GitHub-lagringsplats och används i distributionen som secrets.<SECRET_NAME>.

  • Det enklaste sättet för GitHub Actions att autentisera med Azure Functions för distribution är genom att använda en publiceringsprofil. Du kan också autentisera med hjälp av ett huvudnamn för tjänsten. Mer information finns i den här GitHub Actions-lagringsplatsen.

  • Åtgärderna för att konfigurera miljön och köra en version genereras från mallarna och är språkspecifika.

  • Mallarna använder env element för att definiera inställningar som är unika för din version och distribution.

Nästa steg