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 funkcji GitHub Actions jest wyzwalany przez zatwierdzenia do określonej gałęzi w 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 skompilować i wdrożyć aplikację kontenera, należy dodać azure/container-apps-deploy-action akcję do przepływu pracy funkcji GitHub Actions.

Akcja obsługuje następujące scenariusze:

  • Kompilowanie z pliku Dockerfile i wdrażanie w usłudze Container Apps
  • Kompiluj z kodu źródłowego bez pliku Dockerfile i wdrażaj je w usłudze 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 użycia akcji. Aby uzyskać więcej informacji, zobacz stronę witryny GitHub Marketplace akcji.

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 uwierzytelniać się w usłudze Azure Container Registry, aby wypchnąć 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ę za pomocą rejestru kontenerów określonego azure/login w acrName przy użyciu poświadczeń dostarczonych do akcji.

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.

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 kontenera z włączoną tożsamością zarządzaną
  • AcrPull Przypisywanie roli usługi Azure Container Registry do tożsamości zarządzanej aplikacji kontenera
  • Konfigurowanie wpisów tajnych w repozytorium GitHub
  • Tworzenie przepływu pracy funkcji GitHub Actions

Wymagania wstępne

Wymaganie Instrukcje
Konto platformy Azure Jeśli go nie masz, utwórz bezpłatne konto. Aby kontynuować, musisz mieć uprawnienie 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.
Interfejs wiersza polecenia platformy Azure 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ę na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

    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 repozytorium my-container-appnazwę .
  4. Sklonuj repozytorium na komputerze lokalnym.

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

Tworzenie aplikacji kontenera z włączoną tożsamością zarządzaną

Utwórz aplikację kontenera az containerapp up przy użyciu polecenia 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ść AcrPull roli, aby umożliwić tożsamości ściąganie 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 za az containerapp up pomocą polecenia .

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. W danych wyjściowych polecenia zanotuj nazwę usługi Azure Container Registry.

  4. Pobierz pełny identyfikator zasobu 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 \
      --output tsv
    

    Zanotuj identyfikator podmiotu zabezpieczeń tożsamości zarządzanej w danych wyjściowych polecenia.

  6. AcrPull Przypisz rolę usługi Azure 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> element identyfikatorem podmiotu zabezpieczeń tożsamości zarządzanej i <ACR_RESOURCE_ID> identyfikatorem zasobu usługi Azure Container Registry.

  7. Skonfiguruj aplikację kontenera, aby używała tożsamości zarządzanej do ściągania obrazów z usługi Azure Container Registry.

    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> ciąg nazwą usługi Azure Container Registry.

Konfigurowanie wpisów tajnych w repozytorium GitHub

Przepływ pracy usługi GitHub wymaga wpisu tajnego o nazwie AZURE_CREDENTIALS do uwierzytelniania na platformie Azure. Wpis tajny zawiera poświadczenia jednostki usługi z rolą Współautor w grupie zasobów zawierającej 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 pozycji Ustawienia> AkcjeSecrets> i wybierz pozycję Nowy wpis tajny 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 funkcji 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> ciąg 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 funkcji GitHub Actions powinno rozpocząć tworzenie i wdrażanie aplikacji kontenera. Aby sprawdzić postęp, przejdź do pozycji Akcje.

Aby wdrożyć nową wersję aplikacji, wypchnij nowe zatwierdzenie do gałęzi głównej.