Delen via


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

U kunt GitHub Actions gebruiken om een geautomatiseerde werkstroom voor softwareontwikkeling te bouwen. U kunt de actie Azure Web Deploy gebruiken om uw werkstroom te automatiseren en aangepaste containers te implementeren in Azure App Service.

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 App Service-containerwerkstroom heeft het bestand drie secties:

Sectie Opdrachten
Verificatie 1. Haal een service-principal of een publicatieprofiel op.
2. Maak een GitHub-geheim.
Bouwen 1. Maak de omgeving.
2. Bouw de containerinstallatiekopieën.
Implementeren 1. Implementeer de containerinstallatiekopieën.

Vereisten

Genereer implementatiereferenties

U wordt aangeraden zich te verifiëren met Azure App Services voor GitHub Actions met behulp van OpenID Connect. U kunt zich ook verifiëren met een service-principal of een publicatieprofiel.

Om te authentiseren met Azure, sla je je publicatieprofiel of service-principal op als een GitHub-geheim. U krijgt toegang tot de verborgen functie binnen uw werkstroom.

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

  1. Ga naar App Service in Azure Portal.

  2. Selecteer in het deelvenster Overzicht de optie Publicatieprofiel ophalen.

    Notitie

    Vanaf oktober 2020 moeten gebruikers de app-instelling voor Linux-web-apps WEBSITE_WEBDEPLOY_USE_SCMtrue instellen voordat ze het bestand downloaden. Als u wilt weten hoe u algemene web-app-instellingen configureert, gaat u naar Een App Service-app configureren in Azure Portal.

  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 Beveiligingsgeheimen>en variabelen Instellingen Voor nieuwe>

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_PROFILEeen naam.

Wanneer u uw GitHub-werkstroom configureert, gebruikt u het AZURE_WEBAPP_PUBLISH_PROFILE geheim in de azure-web-app-actie implementeren. Voorbeeld:

- 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 artikel wordt Azure Container Registry gebruikt voor het containerregister.

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

  2. Definieer een nieuw geheim voor de gebruikersnaam van het register 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 ziet u een deel van de workflow die een Node.js Docker-image bouwt. 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 tegelijkertijd aan te melden bij meerdere containerregisters. 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 }}     

In het volgende voorbeeld ziet u een deel van de werkstroom waarmee een Windows Docker-installatiekopieën worden gebouwd. 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: 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 }}     

U kunt docker-aanmelding ook gebruiken om u tegelijkertijd aan te melden bij meerdere containerregisters. 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: 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 }}     

Implementeren in een App Service-container

Als u uw installatiekopieën 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) Wordt gebruikt met 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 secrets.
slot-name (Optioneel) Voer een ander slot in dan het productieslot.
package (Optioneel, alleen gebruikt met webapps: Pad naar pakket of map.) \*.zip, \*.war, \*.jar, of een map die u wilt uitrollen.
images (Vereist) Alleen gebruikt met web-app-containers: specificeer de volledig gekwalificeerde containerimagenaam. Een voorbeeld hiervan is myregistry.azurecr.io/nginx:latest of python:3.12.12-alpine/. Voor een app met meerdere containers kunnen meerdere container-images worden opgegeven (opgesplitst per regel).
configuration-file (Optioneel) Alleen gebruikt met 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. 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 }}'
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 }}'

U vindt onze set acties die zijn gegroepeerd in verschillende opslagplaatsen op GitHub. Elke opslagplaats bevat documentatie en voorbeelden voor het gebruik van GitHub voor CI/CD en het implementeren van uw apps in Azure.