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

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.

Klikněte pravým tlačítkem na > Publikovat.

Na další obrazovce vyberte Azure a pak zvolte Další.

výběr Azure

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.

vyberte příslušnou službu Azure pro váš projekt.

V posledním kroku průvodce vyberte CI/CD pomocí pracovních postupů GitHub Actions (vygeneruje soubor yml) a pak zvolte Dokončit.

CI/CD pomocí pracovních postupů GitHub Actions (generuje soubor yml)

Visual Studio vygeneruje nový pracovní postup GitHub Actions a požádá vás o potvrzení a nasdílení změn do GitHub.com.

potvrzení a nasdílení změn

Pokud tento krok dokončíte pomocí integrovaných nástrojů Git, Sada Visual Studio zjistí spuštění pracovního postupu.

pracovní postup je spuštěný.

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í.

jeden tajný kód GitHubu

Úspěšné nasazení může také vyžadovat přístup k instančnímu objektu.

dva tajné kódy GitHubu

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.

Chybí tajný klíč GitHubu.

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.

nastavení chybějícího tajného kódu GitHubu

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.

  1. 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.

    Snímek obrazovky s nabídkou uzlu GitHub Actions

  2. Na cílové obrazovce pracovního postupu GitHub Actions zvolte Azure.

  3. Pro konkrétní cíl zvolte Azure Container Apps. Průvodce přejde na obrazovku Aplikace kontejneru.

    Snímek obrazovky znázorňující existující aplikace Azure Container Apps

  4. Zvolte existující aplikaci Azure Container App nebo zvolte Vytvořit novou.

    Snímek obrazovky s existujícími aplikacemi kontejneru Azure

    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ý.

    Snímek obrazovky znázorňující vytvoření nové instance Azure Container Apps

    Po vytvoření se zobrazí nová instance Azure Container Apps.

    Snímek obrazovky znázorňující nově vytvořenou instanci Azure Container Apps

  5. Výběrem možnosti Další přejdete na obrazovku Registru . Zvolte existující službu Azure Container Registry nebo vytvořte novou.

    Snímek obrazovky služby Azure Container Registry

    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.

    Snímek obrazovky znázorňující nový registr kontejneru Azure, který byl právě vytvořen

    Po vytvoření se nový registr zobrazí na obrazovce.

    Snímek obrazovky znázorňující vytvoření nového registru kontejneru Azure

  6. Zobrazí se nasazovatelné projekty ve vašem řešení; vyberte projekty, které chcete nasadit společně ve stejné instanci Azure Container Apps.

    Snímek obrazovky znázorňující výběr projektů k nasazení

  7. 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.

  8. 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ů.

  9. 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