Freigeben über


Bereitstellen eines benutzerdefinierten Containers in App Service mithilfe von GitHub-Aktionen

Sie können GitHub-Aktionen verwenden, um einen automatisierten Softwareentwicklungsworkflow zu erstellen. Sie können die Azure Web Deploy-Aktion verwenden, um Ihren Workflow zu automatisieren und benutzerdefinierte Container in Azure App Service bereitzustellen.

Ein Workflow wird durch eine YAML-Datei im Pfad /.github/workflows/ in Ihrem Repository definiert. Diese Definition enthält die verschiedenen Schritte und Parameter im Workflow.

Für einen App Service-Containerworkflow weist die Datei drei Abschnitte auf:

`Section` Aufgaben
Authentifizierung 1. Abrufen eines Dienstprinzipals oder Veröffentlichungsprofils
2. Erstellen Sie ein GitHub-Geheimnis.
Build 1. Erstellen der Umgebung
2. Erstellen des Containerimages
Bereitstellen 1. Bereitstellen des Containerimages

Voraussetzungen

Generieren von Anmeldeinformationen für die Bereitstellung

Es wird empfohlen, sich mit Azure App Services für GitHub-Aktionen mithilfe von OpenID Connect zu authentifizieren. Sie können sich auch mit einem Dienstprinzipal oder einem Veröffentlichungsprofil authentifizieren.

Speichern Sie die Anmeldeinformationen des Veröffentlichungsprofils oder den Dienstprinzipal als GitHub-Geheimnis, um sich bei Azure zu authentifizieren. Sie greifen auf den geheimen Schlüssel in Ihrem Workflow zu.

Ein Veröffentlichungsprofil stellt Anmeldeinformationen auf App-Ebene dar. Richten Sie Ihr Veröffentlichungsprofil als GitHub-Geheimnis ein.

  1. Wechseln Sie im Azure-Portal zu App Service.

  2. Wählen Sie im Bereich "Übersicht " die Option "Veröffentlichungsprofil abrufen" aus.

    Hinweis

    Ab Oktober 2020 müssen Benutzer die App-Einstellung für Linux-Web-Apps WEBSITE_WEBDEPLOY_USE_SCM auf true festlegen, bevor sie die Datei herunterladen. Informationen zum Konfigurieren allgemeiner Web-App-Einstellungen finden Sie unter "Konfigurieren einer App Service-App" im Azure-Portal.

  3. Speichern Sie die heruntergeladene Datei. Sie verwenden den Inhalt der Datei, um einen GitHub-Geheimschlüssel zu erstellen.

Konfigurieren des GitHub-Geheimnisses für die Authentifizierung

Suchen Sie auf GitHub nach Ihrem Repository. Wählen Sie Einstellungen>Sicherheit>Geheimnisse und Variablen>Aktionen>Neues Repositorygeheimnis aus.

Um Anmeldeinformationen auf App-Ebene zu verwenden, fügen Sie den Inhalt der heruntergeladenen Veröffentlichungsprofildatei in das Wertfeld des Geheimnisses ein. Geben Sie dem Geheimnis den Namen AZURE_WEBAPP_PUBLISH_PROFILE.

Wenn Sie Ihren GitHub-Workflow konfigurieren, verwenden Sie das AZURE_WEBAPP_PUBLISH_PROFILE-Geheimnis in der Bereitstellungsaktion für die Azure-Web-App. Beispiel:

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

Konfigurieren von GitHub-Geheimnissen für die Registrierung

Definieren Sie Geheimnisse für die Docker-Anmeldeaktion. Im Beispiel in diesem Artikel wird azure Container Registry für die Containerregistrierung verwendet.

  1. Wechseln Sie im Azure-Portal oder in Docker zu Ihrem Container, und kopieren Sie den Benutzernamen und das Kennwort. Den Benutzernamen und das Kennwort für Azure Container Registry finden Sie im Azure-Portal unter Einstellungen>Zugriffsschlüssel für Ihre Registrierung.

  2. Definieren Sie ein neues Geheimnis für den Registrierungsbenutzer mit dem Namen REGISTRY_USERNAME.

  3. Definieren Sie ein neues Geheimnis für das Registrierungskennwort mit dem Namen REGISTRY_PASSWORD.

Erstellen des Containerimages

Das folgende Beispiel zeigt einen Teil des Workflows, der ein Node.js Docker-Image erstellt. Verwenden Sie Docker Login , um sich bei einer privaten Containerregistrierung anzumelden. In diesem Beispiel wird Azure Container Registry verwendet, die gleiche Aktion funktioniert jedoch auch mit anderen Registrierungen.

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

Sie können die Docker-Anmeldung auch verwenden, um sich gleichzeitig bei mehreren Containerregistrierungen anzumelden. Dieses Beispiel enthält zwei neue GitHub-Geheimnisse für die Authentifizierung mit docker.io. Im Beispiel wird davon ausgegangen, dass ein Dockerfile auf der Stammebene der Registrierung vorhanden ist.

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

Das folgende Beispiel zeigt einen Teil des Workflows zum Erstellen eines Windows-Docker-Images. Verwenden Sie Docker Login , um sich bei einer privaten Containerregistrierung anzumelden. In diesem Beispiel wird Azure Container Registry verwendet, die gleiche Aktion funktioniert jedoch auch mit anderen Registrierungen.

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

Sie können die Docker-Anmeldung auch verwenden, um sich gleichzeitig bei mehreren Containerregistrierungen anzumelden. Dieses Beispiel enthält zwei neue GitHub-Geheimnisse für die Authentifizierung mit docker.io. Im Beispiel wird davon ausgegangen, dass ein Dockerfile auf der Stammebene der Registrierung vorhanden ist.

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

Bereitstellung in einem App Service-Container

Um Ihr Image in einem benutzerdefinierten Container in App Service bereitzustellen, verwenden Sie die Aktion azure/webapps-deploy@v2. Diese Aktion umfasst sieben Parameter:

Parameter Erklärung
app-name (Erforderlich) Name der App Service-App.
publish-profile (Optional) Wird mit Web-Apps (Windows und Linux) und Web-App-Containern (Linux) verwendet. Szenario mit mehreren Containern wird nicht unterstützt. Veröffentlichen der Inhalte der Profildatei \*.publishsettings mit Web Deploy-Geheimnissen.
slot-name (Optional) Geben Sie einen anderen Slot als den Produktionsslot ein.
package (Optional) Wird nur für Web-Apps verwendet: Pfad zum Paket oder Ordner. \*.zip, \*.war, \*.jaroder ein Ordner, der bereitgestellt werden soll.
images (Erforderlich) Wird nur für Web-App-Container verwendet: Geben Sie den vollqualifizierten Containerimagenamen an. Zum Beispiel: myregistry.azurecr.io/nginx:latest oder python:3.12.12-alpine/. Für eine App mit mehreren Containern können mehrere Containerimagenamen angegeben werden (mehrere getrennte Zeilen).
configuration-file (Optional) Wird nur für Web-App-Container verwendet: Pfad der Docker Compose-Datei. Es muss sich um einen vollqualifizierten Pfad oder einen Pfad relativ zum Standardarbeitsverzeichnis handeln. Dieser Parameter ist beim Konfigurieren von Apps mit mehreren Containern erforderlich.
startup-command (Optional) Geben Sie den Startbefehl ein. Beispiel: dotnet run oder 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 }}'

Sie finden unsere Gruppe von Aktionen, die in verschiedenen Repositorys auf GitHub gruppiert sind. Jedes Repository enthält Dokumentationen und Beispiele, mit denen Sie GitHub für CI/CD verwenden und Ihre Apps in Azure bereitstellen können.