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.
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.
Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
az login
Następnie zainstaluj najnowsze rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.
az extension add --name containerapp --upgrade
Jeśli nie masz własnego repozytorium GitHub, utwórz je na podstawie przykładu.
- Przejdź do następującej lokalizacji, aby utworzyć nowe repozytorium:
- Nadaj repozytorium
my-container-app
nazwę .
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.
Przejdź do folderu src sklonowanego repozytorium.
cd my-container-app cd src
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
W danych wyjściowych polecenia zanotuj nazwę usługi Azure Container Registry.
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.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 podmiotu zabezpieczeń tożsamości zarządzanej w danych wyjściowych polecenia.
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.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.
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
.Skopiuj dane wyjściowe JSON z polecenia .
W repozytorium GitHub przejdź do pozycji Ustawienia>Akcje wpisów tajnych>i wybierz pozycję Nowy wpis tajny repozytorium.
Wprowadź
AZURE_CREDENTIALS
jako nazwę i wklej zawartość danych wyjściowych JSON jako wartość.Wybierz przycisk Add secret (Dodaj wpis tajny).
Tworzenie przepływu pracy funkcji GitHub Actions
W repozytorium GitHub przejdź do pozycji Akcje i wybierz pozycję Nowy przepływ pracy.
Wybierz pozycję Skonfiguruj przepływ pracy samodzielnie.
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 obszarzebranches
i wartości dlaappSourcePath
containerAppName
, iresourceGroup
jest zgodna z wartościami repozytorium i zasobów platformy Azure.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.