Udostępnij za pomocą


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

Za pomocą funkcji GitHub Actions można utworzyć zautomatyzowany przepływ pracy tworzenia oprogramowania. Możesz użyć akcji Azure Web Deploy , aby zautomatyzować przepływ pracy i wdrożyć kontenery niestandardowe w usłudze Azure App Service.

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 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.
Wdróż 1. Wdróż obraz kontenera.

Wymagania wstępne

Generowanie poświadczeń wdrożenia

Zalecamy uwierzytelnianie za pomocą usługi Azure App Services for GitHub Actions przy użyciu narzędzia OpenID Connect. Możesz również uwierzytelnić się za pomocą jednostki usługi lub profilu publikowania.

Aby przeprowadzić uwierzytelnianie za pomocą platformy Azure, zapisz poświadczenia profilu publikowania lub obiekt zabezpieczeń jako tajne dane GitHub. Uzyskujesz dostęp do sekretu w swoim 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. W okienku Przegląd wybierz pozycję Pobierz profil publikowania.

    Uwaga

    Od października 2020 r. użytkownicy muszą ustawić ustawienie aplikacji dla aplikacji WEBSITE_WEBDEPLOY_USE_SCM internetowych systemu Linux true przed pobraniem pliku. Aby dowiedzieć się, jak skonfigurować typowe ustawienia aplikacji internetowej, przejdź do tematu Konfigurowanie aplikacji usługi App Service w witrynie Azure Portal.

  3. Zapisz pobrany plik. Zawartość pliku służy do stworzenia sekretu GitHub.

Konfigurowanie wpisu tajnego usługi GitHub na potrzeby uwierzytelniania

W usłudze GitHub przejrzyj repozytorium. Wybierz Ustawienia>Zabezpieczenia>Wpisy tajne 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 GitHub użyj sekretu AZURE_WEBAPP_PUBLISH_PROFILE w akcji wdrażania aplikacji sieciowej 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 artykule 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 przedstawiono część przepływu pracy, który 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 }}     

W poniższym przykładzie przedstawiono część przepływu pracy, który tworzy obraz platformy Docker systemu Windows. 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: 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 }}     

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

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
app-name (Wymagane) Nazwa aplikacji usługi App Service.
publish-profile (Opcjonalnie) Używane z aplikacjami internetowymi (Windows i Linux) i kontenerami aplikacji internetowych (Linux). Scenariusz z wieloma kontenerami nie jest obsługiwany. Opublikuj zawartość pliku profilu \*.publishsettings z tajnymi danymi Web Deploy.
slot-name (Opcjonalnie) Wprowadź istniejące gniazdo inne niż gniazdo produkcyjne.
package (Opcjonalnie) Używane tylko w przypadku aplikacji internetowych: ścieżka do pakietu lub folderu. \*.zip, \*.war, \*.jar, lub folder do wdrożenia.
images (Wymagane) Używane tylko z kontenerami aplikacji internetowej: określ w pełni kwalifikowaną nazwę obrazu kontenera. Na przykład: myregistry.azurecr.io/nginx:latest lub python:3.12.12-alpine/. W przypadku aplikacji z wieloma kontenerami można podać wiele nazw obrazów kontenera (rozdzielonych wieloma wierszami).
configuration-file (Opcjonalnie) Używane tylko z kontenerami 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 }}'
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 }}'

Nasz zestaw akcji pogrupowanych w różne repozytoria można znaleźć w witrynie GitHub. Każde repozytorium zawiera dokumentację i przykłady ułatwiające korzystanie z GitHub do realizacji procesów ciągłej integracji i ciągłego wdrażania oraz wdrażanie aplikacji na platformie Azure.