Nasazení aplikace do Azure pomocí pracovních postupů GitHub Actions vytvořených sadou Visual Studio
Počínaje sadou Visual Studio 2019 verze 16.11 můžete vytvářet nové pracovní postupy GitHub Actions pro projekty .NET hostované na GitHub.com.
Požadavky
- Musíte být přihlášení ke svému účtu GitHub v sadě Visual Studio.
- Účet Azure. Pokud nemáte účet Azure, aktivujte si výhody Azure pro předplatitele sady Visual Studio nebo si zaregistrujte bezplatnou zkušební verzi.
Nasazení jednoho projektu do Azure pomocí GitHub Actions
V Průzkumník řešení klikněte pravým tlačítkem na GitHub.com hostovaný projekt a zvolte Publikovat.
Na další obrazovce vyberte Azure a pak zvolte Další.
V závislosti na typu projektu získáte jiný seznam služeb Azure, ze které si můžete vybrat. Vyberte jednu z podporovaných služeb Azure, které vyhovují vašim potřebám.
V posledním kroku průvodce vyberte CI/CD pomocí pracovních postupů GitHub Actions (vygeneruje soubor yml) a pak zvolte Dokončit.
Visual Studio vygeneruje nový pracovní postup GitHub Actions a požádá vás o potvrzení a nasdílení změn do GitHub.com.
Pokud tento krok dokončíte pomocí integrovaných nástrojů Git, Sada Visual Studio zjistí spuštění pracovního postupu.
Nastavení tajných kódů GitHubu
Aby se vygenerovaný pracovní postup úspěšně nasadil do Azure, může vyžadovat přístup k profilu publikování.
Úspěšné nasazení může také vyžadovat přístup k instančnímu objektu.
Ve všech případech se Visual Studio pokusí nastavit tajný kód GitHubu s správnou hodnotou. Pokud se nezdaří, dáte vám vědět a dáte vám příležitost zkusit to znovu.
Pokud se tajný klíč nepodaří znovu nastavit, sada Visual Studio vám poskytne možnost získat přístup k tajnému kódu ručně, takže proces můžete dokončit prostřednictvím stránky úložiště na GitHub.com.
Nasazení několika projektů do Azure Container Apps pomocí GitHub Actions
Tyto kroky jsou vhodné, pokud máte více než jeden projekt, který používá kontejnery Dockeru, a chcete je nasadit jako víceprojektovou aplikaci. Můžete nasadit víceprojektové aplikace, například aplikace, které implementují mikroslužby do Azure Container Apps nebo Azure Kubernetes Service (AKS). Tento článek se zabývá službami Azure Container Apps.
V Průzkumník řešení klikněte pravým tlačítkem na uzel GitHub Actions a zvolte Nový pracovní postup. Zobrazí se průvodce pracovním postupem GitHub Actions.
Na cílové obrazovce pracovního postupu GitHub Actions zvolte Azure.
Pro konkrétní cíl zvolte Azure Container Apps. Průvodce přejde na obrazovku Aplikace kontejneru.
Zvolte existující aplikaci Azure Container App nebo zvolte Vytvořit novou.
Když vytvoříte nový, zobrazí se tato obrazovka. Při testování nebo učení je obvykle nejlepší vytvořit novou skupinu prostředků, aby bylo snazší všechno později odstranit. Prostředí Container Apps je zabezpečená hranice pro skupiny aplikací kontejnerů, které sdílejí stejnou virtuální síť a zapisují protokoly do stejného cíle protokolování. Viz prostředí Azure Container Apps. Pokud nevíte, co je nebo jste ho ještě nevytvořili, vytvořte pro tuto instanci nový.
Po vytvoření se zobrazí nová instance Azure Container Apps.
Výběrem možnosti Další přejdete na obrazovku Registru . Zvolte existující službu Azure Container Registry nebo vytvořte novou.
Pokud se rozhodnete vytvořit nový, zobrazí se tato obrazovka. Zadejte skupinu prostředků, skladovou položku a zvolte stejnou oblast( pokud je to možné) jako předtím. Informace o cenových úrovních služby Azure Container Registry najdete v tématu Úrovně služby Azure Container Registry.
Po vytvoření se nový registr zobrazí na obrazovce.
Zobrazí se nasazovatelné projekty ve vašem řešení; vyberte projekty, které chcete nasadit společně ve stejné instanci Azure Container Apps.
Zvolte Dokončit. Zobrazí se příkazy vydané k vytvoření prostředků v Azure a nastavení ověřování. Pokud se něco nepovede, poznamenejte si použitý příkazový řádek, protože ho můžete zkusit znovu z rozhraní příkazového řádku. Pokud v této fázi dojde k selhání autorizace, nedělejte si starosti příliš. Ověřování můžete nastavit také později v sadě Visual Studio.
Po dokončení se zobrazí souhrnná obrazovka. Na souhrnné obrazovce se zobrazují přihlašovací údaje, které odpovídají položkám, které Visual Studio vytvoří v úložišti GitHubu v tajných kódech GitHub Actions. Zkontrolujte všechna žlutá upozornění. Pokud během procesu vytváření došlo k chybě některého z kroků ověřování, máte možnost tento problém opravit kliknutím na odkaz znaménkem upozornění a provedením několika kroků.
Otevřete soubor pracovního postupu a zkontrolujte, co sada Visual Studio vygenerovala. Visual Studio sice nejlépe vygeneruje pracovní postup pro vaši situaci, ale každá aplikace a úložiště je jedinečná, takže často musíte ručně upravit soubor YML pracovního postupu vygenerovaný sadou Visual Studio, než se úspěšně spustí. Pokud ho chcete otevřít, rozbalte uzel GitHub Actions v Průzkumník řešení, klikněte pravým tlačítkem myši na pracovní postup, který byl právě vytvořen, a zvolte Upravit.
Následuje příklad souboru pracovního postupu vytvořeného sadou Visual Studio pro řešení se dvěma nasaditelnými projekty, WebAPI a WebFrontEnd.
on:
push:
branches:
- main
env:
CONTAINER_REGISTRY_LOGIN_SERVER: registry20230810121555.azurecr.io
CONTAINER_APP_NAME: containerapp20230810121017
CONTAINER_APP_RESOURCE_GROUP_NAME: webfrontend-container-app-1234
CONTAINER_APP_CONTAINER_NAME: containerapp
jobs:
WebApi_buildImageAndDeploy:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker registry
uses: docker/login-action@v2
with:
registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.registry20230810121555_USERNAME_6891 }}
password: ${{ secrets.registry20230810121555_PASSWORD_6891 }}
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
file: WebApi\Dockerfile
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.containerapp20230810121017_SPN }}
- name: Deploy to Azure container app
uses: azure/CLI@v1
with:
inlineScript: >-
az config set extension.use_dynamic_install=yes_without_prompt
az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
- name: Azure logout
run: az logout
WebFrontEnd_buildImageAndDeploy:
runs-on: ubuntu-latest
needs: WebApi_buildImageAndDeploy
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker registry
uses: docker/login-action@v2
with:
registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.registry20230810121555_USERNAME_2047 }}
password: ${{ secrets.registry20230810121555_PASSWORD_2047 }}
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
file: WebFrontEnd\Dockerfile
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.containerapp20230810121017_SPN }}
- name: Deploy to Azure container app
uses: azure/CLI@v1
with:
inlineScript: >-
az config set extension.use_dynamic_install=yes_without_prompt
az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
- name: Azure logout
run: az logout
Hlavní funkcí pracovního postupu je přihlášení ke službám Azure se správným ověřováním a spuštění příkazů pro sestavení a nasazení aplikace.
Úpravy a testování pracovního postupu
Výše uvedený postup vygeneruje soubor YML pracovního postupu, ale před nasazením ho obvykle musíte zkontrolovat a přizpůsobit. Možná budete muset odkazovat na pokyny GitHubu k psaní akcí pracovního postupu; Viz Informace o vlastních akcích. Soubor pracovního postupu obsahuje mnoho konfigurovatelných prvků, jako jsou nastavení proměnných prostředí a názvy tajných kódů. Můžete zobrazit odkazy na umístění souborů Dockerfile, název vaší aplikace kontejneru Azure, větev v úložišti, kterou použijete k aktivaci spuštění pracovního postupu, a odkazy na tajné kódy v GitHubu. Na tajné kódy se odkazuje pomocí syntaxe ${{ secrets.SECRET_NAME }}
. Podívejte se na tajné kódy GitHub Actions.
Pokud se vaše projekty nenachází v kořenovém adresáři úložiště, musíte změnit pracovní postup a určit cestu k vyhledání souborů Dockerfile. Přidejte proměnné prostředí pro relativní cesty k souboru Dockerfile v obou projektech.
DOCKER_FILEPATH_WEBAPI: docker/ComposeSample/WebApi/Dockerfile
DOCKER_FILEPATH_WEBFRONTEND: docker/ComposeSample/WebFrontend/Dockerfile
Hodnoty těchto proměnných prostředí pro file
parametr použijte následujícím způsobem:
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
file: ${{ env.DOCKER_FILEPATH_WEBFRONTEND }}
Pokud potřebujete provést změny souboru Dockerfile, proveďte a uložte změny, potvrzení a nasdílení změn do vzdáleného úložiště. Pracovní postup, který Sada Visual Studio vygeneruje, obsahuje aktivační událost, která způsobí, že se spustí v případě aktualizace v zadané větvi. Pokud nasdílíte do working
větve, měla by vypadat podobně jako v následujícím kódu:
on:
push:
branches:
- working
Pokud chcete změny otestovat, potvrďte je a nasdílejte do větve úložiště určeného v kódu triggeru. Nemusíte vytvářet žádost o přijetí změn (PR). Pracovní postup se spustí, pokud push
je trigger nastavený na správnou větev.
Na kartě Akce v úložišti v GitHub.com vyhledejte spuštění pracovního postupu. Tam se můžete dostat přímo pomocí odkazu na kartě souhrnu GitHub Actions v sadě Visual Studio. Na GitHubu můžete otevřít spuštění pracovního postupu a zobrazit protokoly.
Řešení problému
Pokud se pracovní postup úspěšně nespustí, můžou být užitečné následující tipy pro řešení potíží.
Problém: Fáze sestavení se nevytvořela
Jedním z problémů, se kterými se můžete setkat v souboru Dockerfile, je to, že fáze sestavení nebude fungovat stejně jako v sadě Visual Studio. Tento problém ukazuje výchozí soubor Dockerfile, který sada Visual Studio vygeneruje pro projekt. Pokud máte takový soubor Dockerfile, zvažte následující úpravy fáze sestavení. Tady je příklad, ve kterém byl projekt umístěn docker/ComposeSample/WebApi
v úložišti. Úplná cesta je uvedena, protože kontext Souboru Dockerfile v kontejneru sestavení pracovního postupu je nastavený na kořen úložiště, ale v sadě Visual Studio je nastaven na složku nad složkou projektu. Přípona _build
je zde připojena k vytvoření složky sestavení a místo pouhého kopírování souboru projektu se zkopíruje celá složka. Ve srovnání s výchozím souborem Dockerfile vygenerovaným sadou Visual Studio se odebrala část cesty v prvním argumentu příkazu COPY, takže místo souboru projektu kopírujeme celou složku. Bez těchto změn tato fáze vytvoří chybu NÁSTROJE MSBuild.
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["docker/ComposeSample/WebApi/", "WebApi_build/"]
RUN dotnet restore "WebApi_build/WebApi.csproj"
COPY . .
WORKDIR "/src/WebApi_build"
RUN dotnet build "WebApi.csproj" -c Release -o /app/build
Problém: Přihlašovací údaje pro ověřování
Pracovní postup vyžaduje, aby byly pro přístup k Azure nastavené správné tajné kódy uživatelského jména a hesla. Visual Studio se to pokusí provést automaticky při vytváření prostředků Azure nebo na obrazovce GitHub Actions v integrovaném vývojovém prostředí sady Microsoft Visual Studio. Tajné kódy můžete zkontrolovat na GitHubu a ujistit se, že tam jsou, nebo je znovu vygenerovat a v případě potřeby je znovu přidat na GitHub pomocí oddílu Nastavení v úložišti. Zkontrolujte ID tajných kódů, na které se odkazuje v každé části pracovního postupu. V případě potřeby můžete přejít do registru kontejneru na webu Azure Portal a získat uživatelské jméno a heslo registru kontejneru a tyto hodnoty použít k aktualizaci tajných kódů na GitHubu.
Pokud jste spustili az ad sp create-for-rbac
příkaz k nastavení instančního objektu a získání ID klienta, tajného klíče klienta a ID tenanta, přidejte ID klienta a tajný klíč klienta jako tajné kódy v části Tajné kódy GitHub Actions pro úložiště GitHub. Přihlašovací údaje Azure můžete zadat ve formě uživatelského jména (ID klienta pro aplikaci) a hesla (tajný klíč klienta) pro ověřování aplikace kontejneru Azure. Uděláte to tak, že tento krok Azure login
nahradíte následujícím kódem. Použijte vlastní názvy tajných kódů GitHubu, které jste vytvořili pro ID klienta a tajný klíč klienta, a použijte ID tenanta z výstupu stejného příkazu.
- name: Azure login
uses: azure/CLI@v1
with:
inlineScript: |
az login --service-principal -u ${{ secrets.GITHUB_SECRETID_FOR_USERNAME }} -p ${{ secrets.GITHUB_SECRETID_FOR_PASSWORD }} --tenant {your tenant ID}
az account list
Pokud soubor Dockerfile funguje správně a ověřování je správné a stále dochází k problémům s pracovním postupem, zvažte následující zdroje informací:
Které typy projektů jsou podporované?
- ASP.NET Core
- ASP.NET 5 a vyšší
- Azure Functions
Které služby Azure se podporují?
- Azure Web Apps
- Azure Functions
- Azure API Management