Distribuera en anpassad container till App Service med GitHub Actions

GitHub Actions ger dig flexibiliteten att skapa ett automatiserat arbetsflöde för programutveckling. Med åtgärden Azure Web Deploy kan du automatisera arbetsflödet för att distribuera anpassade containrar till App Service med hjälp av GitHub Actions.

Ett arbetsflöde definieras av en YAML-fil (.yml) i /.github/workflows/ sökvägen på lagringsplatsen. Den här definitionen innehåller de olika stegen och parametrarna som finns i arbetsflödet.

För ett Azure App Service containerarbetsflöde innehåller filen tre avsnitt:

Avsnitt Aktiviteter
Autentisering 1. Hämta ett huvudnamn för tjänsten eller publicera profilen.
2. Skapa en GitHub-hemlighet.
Build 1. Skapa miljön.
2. Skapa containeravbildningen.
Distribuera 1. Distribuera containeravbildningen.

Förutsättningar

Generera autentiseringsuppgifter för distribution

Det rekommenderade sättet att autentisera med Azure App Services för GitHub Actions är med en publiceringsprofil. Du kan också autentisera med tjänstens huvudnamn eller Öppna ID Connect, men processen kräver fler steg.

Spara autentiseringsuppgifterna för publiceringsprofilen eller tjänstens huvudnamn som en GitHub-hemlighet för att autentisera med Azure. Du kommer åt hemligheten i arbetsflödet.

En publiceringsprofil är en autentiseringsuppgift på appnivå. Konfigurera din publiceringsprofil som en GitHub-hemlighet.

  1. Gå till apptjänsten i Azure Portal.

  2. På sidan Översikt väljer du Hämta publiceringsprofil.

    Anteckning

    Från och med oktober 2020 behöver Linux-webbappar appinställningen WEBSITE_WEBDEPLOY_USE_SCM inställd trueinnan filen laddas ned. Det här kravet tas bort i framtiden. Mer information om hur du konfigurerar vanliga webbappinställningar finns i Konfigurera en App Service-app i Azure Portal.

  3. Spara den hämtade filen. Du använder innehållet i filen för att skapa en GitHub-hemlighet.

Konfigurera GitHub-hemligheten för autentisering

I GitHub bläddrar du till din lagringsplats. Välj Inställningar > Säkerhetshemligheter > och variabler > Åtgärder > Ny lagringsplatshemlighet.

Om du vill använda autentiseringsuppgifter på appnivå klistrar du in innehållet i den nedladdade publiceringsprofilfilen i hemlighetens värdefält. Ge hemligheten AZURE_WEBAPP_PUBLISH_PROFILEnamnet .

När du konfigurerar ditt GitHub-arbetsflöde använder AZURE_WEBAPP_PUBLISH_PROFILE du i åtgärden distribuera Azure Web App. Exempel:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Konfigurera GitHub-hemligheter för ditt register

Definiera hemligheter som ska användas med åtgärden Docker-inloggning. Exemplet i det här dokumentet använder Azure Container Registry för containerregistret.

  1. Gå till containern i Azure Portal eller Docker och kopiera användarnamnet och lösenordet. Du hittar Azure Container Registry användarnamn och lösenord i Azure Portal under Inställningar>Åtkomstnycklar för registret.

  2. Definiera en ny hemlighet för registrets användarnamn med namnet REGISTRY_USERNAME.

  3. Definiera en ny hemlighet för registerlösenordet med namnet REGISTRY_PASSWORD.

Skapa containeravbildningen

I följande exempel visas en del av arbetsflödet som skapar en Node.JS Docker-avbildning. Använd Docker-inloggning för att logga in på ett privat containerregister. I det här exemplet används Azure Container Registry men samma åtgärd fungerar för andra register.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Du kan också använda Docker-inloggning för att logga in på flera containerregister samtidigt. Det här exemplet innehåller två nya GitHub-hemligheter för autentisering med docker.io. Exemplet förutsätter att det finns en Dockerfile på rotnivån i registret.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Distribuera till en App Service container

Om du vill distribuera avbildningen till en anpassad container i App Service använder du åtgärdenazure/webapps-deploy@v2. Den här åtgärden har sju parametrar:

Parameter Förklaring
appnamn (Krävs) Namnet på App Service-appen
publicera profil (Valfritt) Gäller för Web Apps(Windows och Linux) och Web App Containers(linux). Scenario med flera containrar stöds inte. Publicera profilfilinnehåll (*.publishsettings) med webdistributionshemligheter
slot-name (Valfritt) Ange en annan plats än produktionsplatsen
Paket (Valfritt) Gäller endast för webbapp: Sökväg till paket eller mapp. *.zip, *.war, *.jar eller en mapp att distribuera
Bilder (Krävs) Gäller endast för webappcontainrar: Ange namnet på de fullständigt kvalificerade containeravbildningarna. Till exempel "myregistry.azurecr.io/nginx:latest" eller "python:3.7.2-alpine/". För en app med flera containrar kan flera containeravbildningsnamn anges (avgränsade med flera rader)
configuration-file (Valfritt) Gäller endast för webappcontainrar: Sökvägen till Docker-Compose-filen. Bör vara en fullständigt kvalificerad sökväg eller i förhållande till standardarbetskatalogen. Krävs för appar med flera containrar.
startkommando (Valfritt) Ange startkommandot. För ex. dotnet run eller dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

Nästa steg

Du hittar vår uppsättning åtgärder grupperade i olika lagringsplatser på GitHub, där var och en innehåller dokumentation och exempel som hjälper dig att använda GitHub för CI/CD och distribuera dina appar till Azure.