Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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íku ř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íku ř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 pokračuje na obrazovku Kontejnerové aplikace.
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. Můžete vidět, jak se zadávají příkazy pro vytvoření prostředků v Azure a nastavení autentizace. 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 ve 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í. Otevřete ho tak, že v Průzkumníku řešení rozbalíte uzel GitHub Actions, kliknete pravým tlačítkem na pracovní postup, který jste právě vytvořili, a zvolíte 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 podívat se 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 tajemství 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 souborům Dockerfile u obou projektů.
DOCKER_FILEPATH_WEBAPI: docker/ComposeSample/WebApi/Dockerfile
DOCKER_FILEPATH_WEBFRONTEND: docker/ComposeSample/WebFrontend/Dockerfile
Hodnoty těchto proměnných prostředí použijte pro parametr file 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, commitněte a pushněte 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 posíláte do větve working, měla by vypadat podobně jako v 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 (pull request, PR). Pracovní postup běží, dokud je spouštěč push nastaven na správnou větev.
Na kartě Akce ve vašem úložišti na GitHub.com vyhledejte běh pracovního procesu. Když použijete odkaz na kartě přehledu GitHub Actions ve Visual Studiu, můžete se tam dostat přímo. Na GitHubu můžete otevřít běh pracovního postupu a zobrazit protokoly.
Řešení problémů
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í neprobíhá
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 ve 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, kde byl projekt umístěn v 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 ve 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 způsobí 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
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í služebního hlavního objektu a získání ID klienta, klientského tajného klíče a ID nájemce, přidejte ID klienta a klientský tajný klíč jako tajné kódy v sekci GitHub Actions Secrets vašeho GitHub repozitáře. 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 nahradíte krok Azure login 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í?
- Webové aplikace Azure
- Azure Functions
- Azure API Management