Distribuera en anpassad container till App Service med hjälp av GitHub Actions

Du kan använda GitHub Actions för att skapa ett automatiserat arbetsflöde för programvaruutveckling. Du kan använda åtgärden Azure Web Deploy för att automatisera arbetsflödet och distribuera anpassade containrar till Azure App Service.

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 steg och parametrar som finns i arbetsflödet.

För ett App Service-containerarbetsflöde har filen tre avsnitt:

Avsnitt Uppgifter
Autentisering 1. Hämta tjänstens huvudnamn eller publicera profil.
2. Skapa en GitHub-hemlighet.
Bygge 1. Skapa miljön.
2. Skapa containeravbildningen.
Distribuera 1. Distribuera containeravbildningen.

Förutsättningar

Generera autentiseringsuppgifter för distribution

Vi rekommenderar att du autentiserar med Azure App Services för GitHub Actions med hjälp av OpenID Connect. Du kan också autentisera med tjänstens huvudnamn eller en publiceringsprofil.

Om du vill autentisera med Azure sparar du publiceringsprofilens autentiseringsuppgifter eller tjänstens huvudnamn som en GitHub-hemlighet. Du kommer åt hemligheten i arbetsflödet.

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

  1. Gå till App Service i Azure-portalen.

  2. I fönstret Översikt väljer du Hämta publiceringsprofil.

    Kommentar

    Från och med oktober 2020 måste användarna ange appinställningen för Linux-webbappar WEBSITE_WEBDEPLOY_USE_SCM till trueinnan de laddar ned filen. Om du vill lära dig hur du konfigurerar vanliga inställningar för webbappar går du till Konfigurera en App Service-app i Azure-portalen.

  3. Spara den nedladdade 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 lagringsplatsen. Välj Inställningar>Säkerhet>Hemligheter och variabler>Åtgärder>Ny repository-hemlighet.

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 du hemligheten AZURE_WEBAPP_PUBLISH_PROFILE i åtgärden distribuera Azure Web App. Till 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 den här artikeln 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 användarnamnet och lösenordet för Azure Container Registry 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.

Bygga 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 }}     

I följande exempel visas en del av arbetsflödet som skapar en Windows 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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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ärden azure/webapps-deploy@v2 . Den här åtgärden har sju parametrar:

Parameter Förklaring
app-name (Krävs) Namnet på App Service-appen.
publish-profile (Valfritt) Används med webbappar (Windows och Linux) och webbappcontainrar (Linux). Scenario med flera containrar stöds inte. Publicera profilfilinnehåll \*.publishsettings med Web Deploy-hemligheter.
slot-name (Valfritt) Ange en annan befintlig plats än produktionsplatsen.
package (Valfritt) Används endast med webbappar: Sökväg till paket eller mapp. \*.zip, \*.war, \*.jareller en mapp som ska distribueras.
images (Krävs) Används endast med webbappcontainrar: Ange det fullständigt kvalificerade containeravbildningsnamnet. Till exempel myregistry.azurecr.io/nginx:latest eller python:3.12.12-alpine/. För en app med flera containrar kan flera containeravbildningsnamn anges (avgränsade med flera rader).
configuration-file (Valfritt) Används endast med webbapplikationscontainrar: Sökväg 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.
startup-command (Valfritt) Ange startkommandot. Till exempel: 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

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