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 Azure Web Deploy-actiekunt u uw werkstroom automatiseren om aangepaste containers te implementeren in App Service met behulp 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 in de werkstroom.

Voor een Azure App Service containerwerkstroom heeft het bestand drie secties:

Sectie Taken
Verificatie 1. Haal een service-principal op of publiceer een profiel.
2. Maak een GitHub-opslagplaats.
Build 1. Maak de omgeving.
2. Bouw de containerafbeelding.
Implementeren 1. De containerafbeelding implementeren.

Vereisten

Genereer implementatiereferenties

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

Sla uw publicatieprofielreferentie of service-principal op als een GitHub-geheim om te verifiëren bij Azure. U hebt toegang tot 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 krijgen.

    Notitie

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

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

Het GitHub-geheim voor verificatie configureren

Blader in GitHubdoor uw opslagplaats, selecteer Instellingen > Geheimen > Een nieuw geheim toevoegen.

Als u referenties op app-niveau wiltgebruiken, plakt u de inhoud van het gedownloade publicatieprofielbestand in het waardeveld van het geheim. Noem het geheim AZURE_WEBAPP_PUBLISH_PROFILE .

Wanneer u uw GitHub-werkstroom configureert, gebruikt u AZURE_WEBAPP_PUBLISH_PROFILE de 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

Definieer geheimen 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 en het wachtwoord in de Azure Portal onder Instellingen Toegangssleutels > voor uw register.

  2. Definieer een nieuw geheim voor de register-gebruikersnaam met de naam REGISTRY_USERNAME .

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

De containerafbeelding bouwen

In het volgende voorbeeld wordt een deel van de werkstroom voor het bouwen van een Node.JS Docker-afbeelding. Gebruik Docker-aanmelding om u aan te melden bij een privécontainerregister. In dit voorbeeld wordt Azure Container Registry 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 uitgenomen 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 naar een App Service container

Als u uw afbeelding wilt implementeren in een aangepaste container in App Service, gebruikt u de azure/webapps-deploy@v2 actie . Deze actie heeft zeven parameters:

Parameter Uitleg
app-name (vereist) Naam van de App Service app
publish-profile (Optioneel) Is van toepassing Web Apps (Windows en Linux) en Web App Containers (Linux). Scenario met meerdere containers wordt niet ondersteund. Bestandsinhoud van * profiel (.publishsettings) publiceren met Web Deploy-geheimen
sleufnaam (Optioneel) Een andere bestaande sleuf dan de productiesleuf invoeren
package (Optioneel) Alleen van toepassing op web-app: pad naar pakket of map. *.zip, * .war, * .jar of een map die moet worden geïmplementeerd
Afbeeldingen (vereist) Alleen van toepassing op web-app-containers: geef de volledig gekwalificeerde containernaam(en) op. Bijvoorbeeld 'myregistry.azurecr.io/nginx:latest' of 'python:3.7.2-alpine/'. Voor een app met meerdere containers kunnen meerdere namen van containerafbeeldingen worden opgegeven (gescheiden door meerdere lijnen)
configuratiebestand (Optioneel) Alleen van toepassing op web-app-containers: pad van Docker-Compose bestand. Moet een volledig gekwalificeerd pad zijn of relatief ten opzichte van de standaarddirectory. 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 GitHub voor CI/CD te gebruiken en uw apps te implementeren in Azure.