Een aangepaste container implementeren in App Service met behulp van GitHub Actions

GitHub Actions biedt u de flexibiliteit om een geautomatiseerde werkstroom voor softwareontwikkeling te bouwen. Met de actie Azure Web Deploy kunt u uw werkstroom automatiseren om aangepaste containers te implementeren in App Service met behulp van GitHub Actions.

Een werkstroom wordt gedefinieerd door een YAML-bestand (.yml) in het pad /.github/workflows/ in uw opslagplaats. Deze definitie bevat de verschillende stappen en parameters die zich in de werkstroom bevinden.

Voor een Azure App Service containerwerkstroom bestaat het bestand uit drie secties:

Sectie Taken
Verificatie 1. Een service-principal of publicatieprofiel ophalen.
2. Maak een GitHub-opslagplaats.
Build 1. Maak de omgeving.
2. Bouw de containerinstallatiekopieën.
Implementeren 1. Implementeer de containerinstallatiekopieën.

Vereisten

Genereer implementatiereferenties

De aanbevolen manier om te verifiëren bij Azure-app Services voor GitHub Actions is met een publicatieprofiel. U kunt zich ook verifiëren met een service-principal of Open ID Connect, maar het proces vereist meer stappen.

Sla uw referentie voor het publicatieprofiel of de service-principal op als een GitHub-geheim voor verificatie bij Azure. U opent het geheim in uw werkstroom.

Een publicatieprofiel is een referentie op app-niveau. Stel uw publicatieprofiel in als een GitHub-geheim.

  1. Ga naar uw app-service in de Azure Portal.

  2. Selecteer op de pagina Overzicht de optie Publicatieprofiel ophalen.

    Notitie

    Vanaf oktober 2020 moet voor Linux-web-apps de app-instelling WEBSITE_WEBDEPLOY_USE_SCM zijn ingesteld op truevoordat het bestand wordt gedownload. Deze vereiste wordt in de toekomst verwijderd. Zie Een App Service-app configureren in de Azure Portal voor meer informatie over het configureren van algemene instellingen voor web-apps.

  3. Sla het gedownloade bestand op. U gebruikt de inhoud van het bestand om een GitHub-geheim te maken.

Het GitHub-geheim configureren voor verificatie

In GitHub, bladert u in uw opslagplaats. Selecteer Instellingen > Beveiligingsgeheimen > en variabelen > Acties > Nieuw opslagplaatsgeheim.

Als u referenties op app-niveau wilt gebruiken, plakt u de inhoud van het gedownloade publicatieprofielbestand in het waardeveld van het geheim. Geef het geheim AZURE_WEBAPP_PUBLISH_PROFILEde naam .

Wanneer u uw GitHub-werkstroom configureert, gebruikt u de AZURE_WEBAPP_PUBLISH_PROFILE in de actie Azure-web-app implementeren. Bijvoorbeeld:

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

GitHub-geheimen configureren voor uw register

Geheimen definiëren die moeten worden gebruikt met de actie Docker-aanmelding. In het voorbeeld in dit document wordt Azure Container Registry gebruikt voor het containerregister.

  1. Ga naar uw container in de Azure Portal of Docker en kopieer de gebruikersnaam en het wachtwoord. U vindt de Azure Container Registry gebruikersnaam en wachtwoord in de Azure Portal onder Instellingen>Toegangssleutels voor uw register.

  2. Definieer een nieuw geheim voor de registergebruikersnaam met de naam REGISTRY_USERNAME.

  3. Definieer een nieuw geheim voor het registerwachtwoord met de naam REGISTRY_PASSWORD.

De containerinstallatiekopieën bouwen

In het volgende voorbeeld ziet u een deel van de werkstroom waarmee een Node.JS Docker-installatiekopieën worden gemaakt. Gebruik Docker-aanmelding om u aan te melden bij een privécontainerregister. In dit voorbeeld wordt Azure Container Registry gebruikt, maar dezelfde actie werkt voor andere registers.

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

U kunt docker-aanmelding ook gebruiken om u aan te melden bij meerdere containerregisters tegelijk. Dit voorbeeld bevat twee nieuwe GitHub-geheimen voor verificatie met docker.io. In het voorbeeld wordt ervan uitgegaan dat er een Dockerfile is op het hoofdniveau van het 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 }}
    - 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 }}     

Implementeren in een App Service-container

Gebruik de actie om uw azure/webapps-deploy@v2 installatiekopieën te implementeren in een aangepaste container in App Service. Deze actie heeft zeven parameters:

Parameter Uitleg
app-naam (Vereist) Naam van de App Service-app
publish-profile (Optioneel) Van toepassing op Web Apps (Windows en Linux) en Web App Containers (Linux). Scenario met meerdere containers wordt niet ondersteund. Inhoud van profielbestand (*.publishsettings) publiceren met Web Deploy-geheimen
sitenaam (Optioneel) Voer een andere bestaande site dan de productiesite in
package (Optioneel) Alleen van toepassing op web-app: pad naar pakket of map. *.zip, *.war, *.jar of een map om te implementeren
Afbeeldingen (Vereist) Alleen van toepassing op web-app-containers: geef de naam van de volledig gekwalificeerde containerinstallatiekopieën op. Bijvoorbeeld 'myregistry.azurecr.io/nginx:latest' of 'python:3.7.2-alpine/'. Voor een app met meerdere containers kunnen namen van containerinstallatiekopieën worden opgegeven (gescheiden door meerdere regels)
configuratiebestand (Optioneel) Alleen van toepassing op web-app-containers: pad van het Docker-Compose-bestand. Moet een volledig gekwalificeerd pad zijn of ten opzichte van de standaardwerkmap. Vereist voor apps met meerdere containers.
startup-command (Optioneel) Voer de opstartopdracht in. Voor bijvoorbeeld dotnet run of 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 }}'

Volgende stappen

U vindt onze set acties gegroepeerd in verschillende opslagplaatsen op GitHub, elk met documentatie en voorbeelden om u te helpen Bij het gebruik van GitHub voor CI/CD en het implementeren van uw apps in Azure.