Udostępnij za pośrednictwem


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

Funkcja GitHub Actions zapewnia elastyczność tworzenia zautomatyzowanego przepływu pracy tworzenia oprogramowania. Za pomocą akcji Azure Web Deploy możesz zautomatyzować przepływ pracy, aby wdrożyć niestandardowe kontenery w usłudze App Service przy użyciu funkcji 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 usługi aplikacja systemu Azure 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 Services for 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ę na platformie 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 witrynie 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 true na wartość przed pobraniem pliku. To wymaganie zostanie usunięte w przyszłości. Zobacz Konfigurowanie aplikacji usługi App Service w witrynie 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 kluczowi nazwę wpisu tajnego AZURE_WEBAPP_PUBLISH_PROFILE.

Podczas konfigurowania przepływu pracy usługi GitHub należy użyć 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ą Logowanie do platformy Docker. W przykładzie w tym dokumencie użyto usługi Azure Container Registry dla rejestru kontenerów.

  1. Przejdź do kontenera w witrynie Azure Portal lub na platformie Docker i skopiuj nazwę użytkownika i hasło. Nazwę użytkownika i hasło usługi Azure Container Registry można znaleźć w witrynie 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óra tworzy obraz platformy Docker Node.JS. Zaloguj się do prywatnego rejestru kontenerów przy użyciu usługi Docker Login . W tym przykładzie użyto usługi 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 usługi App Service

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

Parametr Wyjaśnienie
nazwa aplikacji (Wymagane) Nazwa aplikacji usługi App Service
profil publikowania (Opcjonalnie) Dotyczy usług Web Apps (Windows i Linux) i Web App Containers(linux). Scenariusz z wieloma kontenerami nie jest obsługiwany. Zawartość pliku profilu publikowania (*.publishsettings) przy użyciu wpisów tajnych funkcji 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 internetowej: 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)
plik konfiguracji (Opcjonalnie) Dotyczy tylko kontenerów aplikacji internetowej: ścieżka pliku Docker-Compose. Powinna być w pełni kwalifikowaną ścieżką lub w stosunku do domyślnego katalogu roboczego. Wymagane w przypadku aplikacji wielokontenerowych.
startup-command (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.