Wdrażanie kontenera niestandardowego w usłudze App Service przy użyciu funkcji GitHub Actions

GitHub Actions zapewnia elastyczność tworzenia zautomatyzowanego przepływu pracy tworzenia oprogramowania. Za pomocą akcji Azure Web Deploy możesz zautomatyzować przepływ pracy w celu wdrożenia kontenerów niestandardowych w App Service przy użyciu GitHub Actions.

Przepływ pracy jest definiowany przez plik YAML (yml) w /.github/workflows/ ścieżce w repozytorium. Ta definicja zawiera różne kroki i parametry, które znajdują się w przepływie pracy.

W przypadku przepływu pracy kontenera Azure App Service plik zawiera trzy sekcje:

Sekcja Zadania
Authentication 1. Pobierz jednostkę usługi lub profil publikowania.
2. Utwórz wpis tajny usługi GitHub.
Kompilacja 1. Utwórz środowisko.
2. Skompiluj obraz kontenera.
Wdrażanie 1. Wdróż obraz kontenera.

Wymagania wstępne

Generowanie poświadczeń wdrożenia

Zalecanym sposobem uwierzytelniania za pomocą usług aplikacja systemu Azure dla GitHub Actions jest profil publikowania. Możesz również uwierzytelnić się za pomocą jednostki usługi lub programu Open ID Connect, ale proces wymaga wykonania dodatkowych kroków.

Zapisz poświadczenia profilu publikowania lub jednostkę usługi jako wpis tajny usługi GitHub , aby uwierzytelnić się za pomocą platformy Azure. Uzyskasz dostęp do wpisu tajnego w przepływie pracy.

Profil publikowania to poświadczenia na poziomie aplikacji. Skonfiguruj profil publikowania jako wpis tajny usługi GitHub.

  1. Przejdź do usługi app service w Azure Portal.

  2. Na stronie Przegląd wybierz pozycję Pobierz profil publikowania.

    Uwaga

    Od października 2020 r. aplikacje internetowe systemu Linux będą potrzebować ustawienia WEBSITE_WEBDEPLOY_USE_SCM aplikacji ustawionego na truewartość przed pobraniem pliku. To wymaganie zostanie usunięte w przyszłości. Zobacz Konfigurowanie aplikacji App Service w Azure Portal, aby dowiedzieć się, jak skonfigurować typowe ustawienia aplikacji internetowej.

  3. Zapisz pobrany plik. Zawartość pliku zostanie użyta do utworzenia wpisu tajnego usługi GitHub.

Konfigurowanie wpisu tajnego usługi GitHub na potrzeby uwierzytelniania

W usłudze GitHub przejrzyj repozytorium. Wybierz pozycję Ustawienia > Wpisy tajne zabezpieczeń > i zmienne > Akcje > Nowy wpis tajny repozytorium.

Aby użyć poświadczeń na poziomie aplikacji, wklej zawartość pobranego pliku profilu publikowania w polu wartości wpisu tajnego. Nadaj wpisowi nazwę wpisu tajnego AZURE_WEBAPP_PUBLISH_PROFILE.

Podczas konfigurowania przepływu pracy usługi GitHub użyjesz AZURE_WEBAPP_PUBLISH_PROFILE akcji wdróż aplikację internetową platformy Azure. Na przykład:

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

Konfigurowanie wpisów tajnych usługi GitHub dla rejestru

Zdefiniuj wpisy tajne do użycia z akcją Logowania platformy Docker. W przykładzie w tym dokumencie użyto Azure Container Registry dla rejestru kontenerów.

  1. Przejdź do kontenera w Azure Portal lub docker i skopiuj nazwę użytkownika i hasło. Nazwę użytkownika i hasło Azure Container Registry można znaleźć w Azure Portal w obszarze Ustawienia>Klucze dostępu dla rejestru.

  2. Zdefiniuj nowy wpis tajny dla nazwy użytkownika rejestru o nazwie REGISTRY_USERNAME.

  3. Zdefiniuj nowy wpis tajny dla hasła rejestru o nazwie REGISTRY_PASSWORD.

Kompilowanie obrazu kontenera

W poniższym przykładzie pokazano część przepływu pracy, który tworzy obraz platformy Docker Node.JS. Logowanie do platformy Docker umożliwia zalogowanie się do prywatnego rejestru kontenerów. W tym przykładzie użyto Azure Container Registry, ale ta sama akcja działa w przypadku innych rejestrów.

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

Możesz również użyć logowania do platformy Docker , aby zalogować się do wielu rejestrów kontenerów w tym samym czasie. Ten przykład obejmuje dwa nowe wpisy tajne usługi GitHub do uwierzytelniania za pomocą docker.io. W przykładzie przyjęto założenie, że na poziomie głównym rejestru znajduje się plik Dockerfile.

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

Wdrażanie w kontenerze App Service

Aby wdrożyć obraz w kontenerze niestandardowym w App Service, użyj azure/webapps-deploy@v2 akcji . Ta akcja ma siedem parametrów:

Parametr Wyjaśnienie
nazwa aplikacji (Wymagane) Nazwa aplikacji App Service
profil publikowania (Opcjonalnie) Dotyczy Web Apps (Windows i Linux) i Web App Containers (linux). Scenariusz z wieloma kontenerami nie jest obsługiwany. Zawartość pliku profilu publikowania (*.publishsettings) z wpisami tajnymi narzędzia Web Deploy
nazwa miejsca (Opcjonalnie) Wprowadź istniejące miejsce inne niż miejsce produkcyjne
Pakiet (Opcjonalnie) Dotyczy tylko aplikacji internetowej: ścieżka do pakietu lub folderu. *.zip, *.war, *.jar lub folder do wdrożenia
Obrazów (Wymagane) Dotyczy tylko kontenerów aplikacji internetowych: określ w pełni kwalifikowaną nazwę obrazów kontenera. Na przykład "myregistry.azurecr.io/nginx:latest" lub "python:3.7.2-alpine/". W przypadku aplikacji z wieloma kontenerami można podać wiele nazw obrazów kontenera (rozdzielonych wieloma wierszami)
configuration-file (Opcjonalnie) Dotyczy tylko kontenerów aplikacji internetowych: ścieżka pliku Docker-Compose. Powinna być w pełni kwalifikowaną ścieżką lub względem domyślnego katalogu roboczego. Wymagane w przypadku aplikacji wielokontenerowych.
polecenie uruchamiania (Opcjonalnie) Wprowadź polecenie uruchamiania. Na przykład dotnet run lub 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 }}'

Następne kroki

Zestaw akcji pogrupowanych w różne repozytoria można znaleźć w usłudze GitHub, z których każda zawiera dokumentację i przykłady, które ułatwiają korzystanie z usługi GitHub na potrzeby ciągłej integracji/ciągłego wdrażania i wdrażania aplikacji na platformie Azure.