Udostępnij za pośrednictwem


Wdrażanie usługi Azure Container Apps za pomocą GitHub Actions

Usługa Azure Container Apps umożliwia publikowanie poprawek w aplikacji kontenera przy użyciu funkcji GitHub Actions. Gdy zatwierdzenia są wypychane do repozytorium GitHub, wyzwalany jest przepływ pracy, który aktualizuje obraz kontenera w rejestrze kontenerów. Usługa Azure Container Apps tworzy nową poprawkę na podstawie zaktualizowanego obrazu kontenera.

Zmiany w repozytorium GitHub wyzwalają akcję w celu utworzenia nowej poprawki.

Przepływ pracy w GitHub Actions jest wyzwalany, gdy zatwierdzisz zmiany do określonej gałęzi w swoim repozytorium. Podczas tworzenia przepływu pracy decydujesz, która gałąź wyzwala przepływ pracy.

W tym artykule pokazano, jak utworzyć w pełni dostosowywany przepływ pracy. Aby wygenerować początkowy przepływ pracy funkcji GitHub Actions za pomocą interfejsu wiersza polecenia platformy Azure, zobacz Generowanie przepływu pracy funkcji GitHub Actions za pomocą interfejsu wiersza polecenia platformy Azure.

Akcja usługi GitHub usługi Azure Container Apps

Aby zbudować i wdrożyć aplikację kontenera, należy dodać azure/container-apps-deploy-action akcję do przepływu pracy GitHub Actions.

Akcja obsługuje następujące scenariusze:

  • Kompilowanie z pliku Dockerfile i wdrażanie w usłudze Container Apps
  • Buduj z kodu źródłowego bez użycia pliku Dockerfile i wdrażaj do Container Apps. Obsługiwane języki to .NET, Java, Node.js, PHP i Python
  • Wdrażanie istniejącego obrazu kontenera w usłudze Container Apps

Przykłady użycia

Poniżej przedstawiono kilka typowych scenariuszy na wykorzystanie akcji. Aby uzyskać więcej informacji, zobacz stronę akcji na GitHub Marketplace.

Kompilowanie i wdrażanie w usłudze Container Apps

Poniższy fragment kodu pokazuje, jak utworzyć obraz kontenera z kodu źródłowego i wdrożyć go w usłudze Container Apps.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

Akcja używa pliku Dockerfile w pliku appSourcePath , aby skompilować obraz kontenera. Jeśli nie zostanie znaleziony plik Dockerfile, akcja próbuje skompilować obraz kontenera na podstawie kodu źródłowego w pliku appSourcePath.

Wdrażanie istniejącego obrazu kontenera w usłudze Container Apps

Poniższy fragment kodu przedstawia sposób wdrażania istniejącego obrazu kontenera w usłudze Container Apps.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Ważne

Jeśli tworzysz obraz kontenera w osobnym kroku, upewnij się, że używasz unikatowego tagu, takiego jak zatwierdzanie algorytmu SHA zamiast stabilnego tagu, takiego jak latest. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania dotyczące tagów obrazów.

Uwierzytelnianie za pomocą usługi Azure Container Registry

Akcja usługi Azure Container Apps musi zalogować się w usłudze Azure Container Registry, aby przesłać obraz kontenera. Aplikacja kontenera musi również uwierzytelniać się w usłudze Azure Container Registry, aby ściągnąć obraz kontenera.

Aby wypchnąć obrazy, akcja automatycznie uwierzytelnia się w rejestrze kontenerów określonym w acrName przy użyciu poświadczeń dostarczonych do akcji azure/login.

Aby ściągnąć obrazy, usługa Azure Container Apps używa tożsamości zarządzanej (zalecane) lub poświadczeń administratora do uwierzytelniania w usłudze Azure Container Registry. Aby korzystać z tożsamości zarządzanej, aplikacja kontenera, która jest wdrażana, musi być skonfigurowana do używania tożsamości zarządzanej. Aby uwierzytelnić się przy użyciu poświadczeń administratora rejestru, ustaw akcję acrUsername i acrPassword dane wejściowe.

Wdrażanie obrazów z rejestrów innych niż ACR

Oprócz usługi Azure Container Registry (ACR) usługa Azure Container Apps obsługuje obrazy kontenerów hostowane w innych rejestrach, takich jak GitHub Container Registry (GHCR). W tej sekcji pokazano, jak wdrażać obrazy kontenerów z usługi GHCR, w tym obrazy publiczne i prywatne.

Uwaga / Notatka

W przypadku korzystania z rejestru innego niż ACR, takiego jak GHCR, należy skonfigurować aplikację kontenera do uwierzytelniania w rejestrze, nawet jeśli obraz jest publiczny.

Wdrażanie obrazu publicznego z usługi GHCR

Jeśli obraz kontenera jest publiczny, można go wdrożyć bez określania poświadczeń uwierzytelniania. Na poniższym przykładzie pokazano, jak wdrożyć publiczny obraz z usługi GHCR przy użyciu czynności wdrażania.

Przed uruchomieniem tego polecenia zastąp <YOUR-GITHUB-USERNAME> rzeczywistą nazwą użytkownika usługi GitHub.

- name: Deploy public GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:latest
    registryServer: ghcr.io

Przed wdrożeniem skonfiguruj aplikację kontenera do ściągania z usługi GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io

Wdrażanie obrazu prywatnego z usługi GHCR

Jeśli obraz jest prywatny, musisz podać dane uwierzytelniające w przepływie pracy GitHub Actions. Użyj osobistego tokenu dostępu (PAT) usługi GitHub z zakresem read:packages . Zapisz token i nazwę użytkownika jako wpisy tajne w repozytorium GitHub.

- name: Deploy private GHCR image to Container App
  uses: azure/container-apps-deploy-action@v1
  with:
    containerAppName: my-container-app
    resourceGroup: my-container-app-rg
    imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:${{ github.sha }}
    registryServer: ghcr.io
    registryUsername: ${{ secrets.GHCR_USERNAME }}
    registryPassword: ${{ secrets.GHCR_TOKEN }}

Skonfiguruj aplikację kontenera, aby ściągnąć obraz przy użyciu poświadczeń GHCR:

az containerapp registry set \
  --name my-container-app \
  --resource-group my-container-app-rg \
  --server ghcr.io \
  --username <GHCR_USERNAME> \
  --password <GHCR_TOKEN>

Zastąp <GHCR_USERNAME> swoją nazwą użytkownika na GitHub i <GHCR_TOKEN> swoim osobistym tokenem dostępu.

Uwaga / Notatka

Użyj unikatowego tagu, takiego jak SHA zatwierdzenia w Git (${{ github.sha }}), zamiast tagu ogólnego, takiego jak najnowszy. Pomaga to uniknąć problemów z buforowaniem i zapewnia niezawodne tworzenie nowych poprawek.

Konfigurowanie

Wykonaj następujące kroki, aby skonfigurować przepływ pracy funkcji GitHub Actions w celu wdrożenia w usłudze Azure Container Apps.

  • Tworzenie repozytorium GitHub dla aplikacji
  • Tworzenie aplikacji kontenerowej z włączoną tożsamością zarządzaną
  • AcrPull Przypisywanie roli usługi Azure Container Registry do tożsamości zarządzanej aplikacji kontenera
  • Konfiguruj sekrety w repozytorium GitHub
  • Tworzenie przepływu pracy GitHub Actions

Wymagania wstępne

Wymaganie Instrukcje
Konto platformy Azure Jeśli go nie masz, utwórz bezpłatne konto. Aby kontynuować, musisz mieć uprawnienia jako Współautor lub Właściciel w subskrypcji platformy Azure. Aby uzyskać szczegółowe informacje, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal .
Konto usługi GitHub Zarejestruj się bezpłatnie.
Azure CLI Zainstaluj interfejs wiersza polecenia platformy Azure.

Tworzenie repozytorium GitHub i klonowanie kodu źródłowego

Przed utworzeniem przepływu pracy kod źródłowy aplikacji musi znajdować się w repozytorium GitHub.

  1. Zaloguj się do Azure za pomocą Azure CLI.

    az login
    
  2. Następnie zainstaluj najnowsze rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.

    az extension add --name containerapp --upgrade
    
  3. Jeśli nie masz własnego repozytorium GitHub, utwórz je na podstawie przykładu.

    1. Przejdź do następującej lokalizacji, aby utworzyć nowe repozytorium:
    2. Nadaj nazwę swojemu repozytorium my-container-app.
  4. Sklonuj repozytorium na komputerze lokalnym.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Utwórz aplikację kontenerową z włączoną tożsamością zarządzaną

Utwórz aplikację kontenera za pomocą polecenia az containerapp up w poniższych krokach. To polecenie tworzy zasoby platformy Azure, kompiluje obraz kontenera, przechowuje obraz w rejestrze i wdraża go w aplikacji kontenera.

Po utworzeniu aplikacji możesz dodać tożsamość zarządzaną do aplikacji i przypisać tożsamości rolę AcrPull, aby umożliwić jej pobieranie obrazów z rejestru.

  1. Przejdź do folderu src sklonowanego repozytorium:

    cd my-container-app
    cd src
    
  2. Utwórz zasoby platformy Azure i wdróż aplikację kontenera az containerapp upprzy użyciu polecenia :

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Tip

    Jeśli kompilacja zakończy się niepowodzeniem z powodu błędu repozytorium Debian, upewnij się, że używasz najnowszej wersji interfejsu wiersza polecenia platformy Azure i rozszerzenia containerapp, uruchamiając polecenie az extension add --name containerapp --upgrade. Alternatywnie dodaj plik Dockerfile do projektu, aby uzyskać większą kontrolę nad kompilacją.

  3. W danych wyjściowych polecenia zanotuj nazwę rejestru kontenerów platformy Azure.

  4. Uzyskaj pełny identyfikator zasobów rejestru kontenerów:

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Zastąp ciąg <ACR_NAME> nazwą rejestru.

  5. Włącz tożsamość zarządzaną dla aplikacji kontenera:

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Zanotuj identyfikator główny tożsamości zarządzanej w wynikach polecenia.

  6. AcrPull Przypisz rolę usługi Container Registry do tożsamości zarządzanej aplikacji kontenera:

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Zastąp <MANAGED_IDENTITY_PRINCIPAL_ID> identyfikatorem głównym tożsamości zarządzanej i <ACR_RESOURCE_ID> identyfikatorem zasobu rejestru kontenerów.

  7. Skonfiguruj aplikację kontenera, aby używała tożsamości zarządzanej do ściągania obrazów z rejestru kontenerów:

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Zastąp <ACR_NAME> nazwą rejestru kontenerów platformy Azure.

Konfiguruj sekrety w repozytorium GitHub

Przepływ pracy GitHub wymaga tajnego klucza o nazwie AZURE_CREDENTIALS do uwierzytelniania na platformie Azure. Tajny wpis zawiera poświadczenia głównego użytkownika usługi z rolą Współpracownik w grupie zasobów, która zawiera aplikację kontenera i rejestr kontenerów.

  1. Utwórz jednostkę usługi z rolą Współautor w grupie zasobów, która zawiera aplikację kontenera i rejestr kontenerów.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Zastąp ciąg <SUBSCRIPTION_ID> identyfikatorem subskrypcji platformy Azure. Jeśli rejestr kontenerów znajduje się w innej grupie zasobów, określ obie grupy zasobów w parametrze --scopes .

  2. Skopiuj dane wyjściowe JSON z polecenia .

  3. W repozytorium GitHub przejdź do Ustawienia>Tajne>Akcje i wybierz Nowy sekret repozytorium.

  4. Wprowadź AZURE_CREDENTIALS jako nazwę i wklej zawartość danych wyjściowych JSON jako wartość.

  5. Wybierz przycisk Add secret (Dodaj wpis tajny).

Tworzenie przepływu pracy GitHub Actions

  1. W repozytorium GitHub przejdź do pozycji Akcje i wybierz pozycję Nowy przepływ pracy.

  2. Wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.

  3. Wklej następujący kod YAML do edytora.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Zastąp <ACR_NAME> nazwą usługi Azure Container Registry. Upewnij się, że nazwa gałęzi w obszarze branches i wartości dla appSourcePathcontainerAppName, i resourceGroup jest zgodna z wartościami repozytorium i zasobów platformy Azure.

  4. Zatwierdź zmiany w gałęzi głównej.

Uruchomienie przepływu pracy GitHub Actions powinno rozpocząć tworzenie i wdrażanie aplikacji kontenerowej. Aby sprawdzić postęp, przejdź do pozycji Akcje.

Aby wdrożyć nową wersję aplikacji, wgraj nowe zatwierdzenie do gałęzi main.