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:
- Konfigurera miljön.
- Skapa kodprojektet.
- 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
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Ett GitHub-konto. Om du inte har ett sådant kan du registrera dig utan kostnad.
En fungerande funktionsapp som finns i Azure med källkod på en GitHub-lagringsplats.
- 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:
I Azure Portal letar du upp sidan för funktionsappen och expanderar Konfiguration av inställningar>i den vänstra kolumnen.
På sidan Konfiguration väljer du fliken Allmänna inställningar och kontrollerar att SCM Basic Auth Publishing Credentials är aktiverat. När den här inställningen är Av kan du inte använda publiceringsprofiler, så välj På och sedan Spara.
Gå tillbaka till funktionsappens Översiktssida och välj sedan Hämta publiceringsprofil.
Spara och kopiera innehållet i filen.
Lägg till GitHub-hemligheten
Gå till din lagringsplats i GitHub.
Gå till inställningar.
Välj Hemligheter och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Lägg till en ny hemlighet med namnet
AZURE_FUNCTIONAPP_PUBLISH_PROFILE
och värdet inställt på innehållet i publiceringsprofilfilen.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.
Välj antingen Windows eller Linux för att se till att du får mallen för rätt operativsystem.
Kopiera den språkspecifika mallen från Azure Functions-åtgärdslagringsplatsen med hjälp av följande länk:
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 exempelDOTNET_VERSION
för C#.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 Portal. Så här lägger du till ett GitHub Actions-arbetsflöde när du skapar en ny funktionsapp:
I Azure Portal väljer du Distribution i flödet Skapa funktionsapp.
Aktivera kontinuerlig distribution om du vill att varje koduppdatering ska utlösa en kod push till Azure Portal.
Ange din GitHub-organisation, lagringsplats och gren.
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:
Gå till funktionsappen i Azure Portal och välj Distributionscenter.
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.
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.
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.
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.
Välj Förhandsgranskningsfil för att se arbetsflödesfilen som läggs till i GitHub-lagringsplatsen i
github/workflows/
.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.
Kör det här
az functionapp
kommandot och ersätt värdenagithubUser/githubRepo
,MyResourceGroup
ochMyFunctionapp
: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.
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.
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
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.
Gå till din lagringsplats i GitHub.
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 ditt kodspråk och väljer Konfigurera.
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 exempelDOTNET_VERSION
för C#.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å:
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 krävs för alla funktionsappplaner:
Parameter | Förklaring |
---|---|
appnamn | Namnet på funktionsappen. |
paket | Det här är platsen i projektet som ska publiceras. Som standard är det här värdet inställt på , vilket innebär att . alla filer och mappar på GitHub-lagringsplatsen kommer att distribueras. |
Följande parametrar krävs för Flex Consumption-planen:
Parameter | Förklaring |
---|---|
Sku | Ange detta till flexconsumption när du autentiserar med publiceringsprofilen. När du använder RBAC-autentiseringsuppgifter eller distribuerar till en plan som inte är flexförbrukning kan åtgärden matcha värdet, så parametern behöver inte inkluderas. |
fjärrbygge | Ange detta för true att aktivera en byggåtgärd från Kudu när paketet distribueras till en Flex Consumption-app. Oryx-versionen utförs alltid under en fjärrversion i Flex Consumption; ange inte scm-do-build-during-deployment eller enable-oryx-build. Som standard är den här parametern inställd på false . |
Följande parametrar är specifika för förbruknings-, Elastic Premium- och App Service-planer (dedikerade):
Parameter | Förklaring |
---|---|
scm-do-build-during-deployment | (Valfritt) Tillåt att Kudu-platsen (t.ex. https://<APP_NAME>.scm.azurewebsites.net/ ) utför fördistributionsåtgärder, till exempel fjärrversioner. Som standard är detta inställt på false . Ange detta till true när du vill styra distributionsbeteenden med Kudu i stället för att matcha beroenden i ditt GitHub-arbetsflöde. Mer information finns i inställningen SCM_DO_BUILD_DURING_DEPLOYMENT . |
enable-oryx-build | (Valfritt) Tillåt att Kudu-webbplatsen löser dina projektberoenden med Oryx. Som standard är detta inställt på false . Om du vill använda Oryx för att lösa dina beroenden i stället för GitHub-arbetsflödet anger du både scm-do-build-during-deployment och enable-oryx-build till true . |
Valfria parametrar för alla funktionsappplaner:
Parameter | Förklaring |
---|---|
slot-name | Det här är namnet på distributionsfacket som ska distribueras till. Som standard är det här värdet tomt, vilket innebär att GitHub-åtgärden distribueras till din produktionsplats. När den här inställningen pekar på en icke-produktionsplats kontrollerar du att parametern publish-profile innehåller autentiseringsuppgifterna för facket i stället för produktionsplatsen. Stöds för närvarande inte i Flex Consumption. |
publicera profil | Namnet på GitHub-hemligheten som innehåller din publiceringsprofil. |
respect-pom-xml | 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 på . . 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 | 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 . |
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 med hjälp av en distribution till appar i Flex Consumption-planen och zip-distribueras till appar enligt abonnemangen Förbrukning, Elastic Premium och Dedikerad (App Service). Undantaget är Linux-förbrukning, där extern paket-URL används.
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.