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
- Konto platformy Azure z aktywną subskrypcją. Bezpłatne tworzenie konta
- Konto usługi GitHub. Jeśli nie masz takiego konta, zarejestruj się bezpłatnie. Musisz mieć kod w repozytorium GitHub, aby wdrożyć go w usłudze aplikacja systemu Azure Service.
- Działający rejestr kontenerów i aplikacja usługi aplikacja systemu Azure Service dla kontenerów. W tym przykładzie użyto usługi Azure Container Registry. Pamiętaj, aby ukończyć pełne wdrożenie w usłudze aplikacja systemu Azure Service dla kontenerów. W przeciwieństwie do zwykłych aplikacji internetowych aplikacje internetowe dla kontenerów nie mają domyślnej strony docelowej. Opublikuj kontener, aby mieć przykład roboczy.
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.
Przejdź do usługi app service w witrynie Azure Portal.
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 ustawionegotrue
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.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.
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.
Zdefiniuj nowy wpis tajny dla nazwy użytkownika rejestru o nazwie
REGISTRY_USERNAME
.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. 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.