Kurz: Vytvoření kanálu s více fázemi pomocí Azure DevOps
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Kanál Azure DevOps s více fázemi můžete použít k rozdělení procesu CI/CD do fází, které představují různé části vývojového cyklu. Použití kanálu s více fázemi vám dává větší přehled o procesu nasazení a usnadňuje integraci schválení a kontrol.
V tomto článku vytvoříte dvě instance služby App Service a vytvoříte kanál YAML se třemi fázemi:
V reálném scénáři můžete mít další fázi nasazení do produkčního prostředí v závislosti na procesu DevOps.
Ukázkový kód v tomto cvičení je určen pro webovou aplikaci .NET pro předstírání hry, která obsahuje tabulku výsledků, aby se zobrazilo vysoké skóre. Nasadíte je do vývojových i přípravných instancí webové aplikace Azure pro Linux.
Požadavky
- Účet GitHubu, kde můžete vytvořit úložiště. Vytvořte si ho zdarma.
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Organizace a projekt Azure DevOps Vytvořte si ho zdarma.
- Možnost spouštět kanály na agentech hostovaných Microsoftem Můžete si buď koupit paralelní úlohu , nebo si můžete vyžádat úroveň Free.
Rozvětvování projektu
Fork následující ukázkové úložiště na GitHubu
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
Vytvoření instancí služby App Service
Před nasazením kanálu je potřeba nejprve vytvořit instanci služby App Service, do které se má nasadit. K vytvoření instance použijete Azure CLI.
Přihlaste se k portálu Azure.
V nabídce vyberte Cloud Shell a prostředí Bash .
Vygenerujte náhodné číslo, díky kterému je název domény vaší webové aplikace jedinečný. Výhodou jedinečné hodnoty je, že vaše instance služby App Service nebude mít v konfliktu s jinými uživateli, kteří tento kurz dokončí.
webappsuffix=$RANDOM
Otevřete příkazový řádek a pomocí
az group create
příkazu vytvořte skupinu prostředků s názvem tailspin-space-game-rg , která obsahuje všechny instance služby App Service.location
Aktualizujte hodnotu tak, aby používala nejbližší oblast.az group create --location eastus --name tailspin-space-game-rg
K vytvoření plánu služby App Service použijte příkazový řádek.
az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linux
Na příkazovém řádku vytvořte dvě instance služby App Service, jednu pro každou instanci (vývoj a přípravu) pomocí
az webapp create
příkazu.az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0"
Pomocí příkazového řádku vypíšete obě instance služby App Service, abyste ověřili, že jsou spuštěné pomocí
az webapp list
příkazu.az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
Zkopírujte názvy instancí služby App Service, které se mají použít jako proměnné v další části.
Vytvoření projektu a proměnných Azure DevOps
Nastavte projekt Azure DevOps a kanál buildu. Přidáte také proměnné pro vývojové a přípravné instance.
Váš kanál buildu:
- Zahrnuje trigger, který se spustí, když dojde ke změně kódu na větev.
- Definuje dvě proměnné
buildConfiguration
areleaseBranchName
- Obsahuje fázi s názvem Sestavení, která sestaví webovou aplikaci.
- Publikuje artefakt, který použijete v pozdější fázi.
Přidání fáze sestavení
Přihlaste se ke své organizaci Azure DevOps a přejděte do svého projektu.
Přejděte na Kanály a pak vyberte Nový kanál nebo Vytvořit kanál , pokud vytváříte první kanál.
Kroky průvodce proveďte tak, že nejprve vyberete GitHub jako umístění zdrojového kódu.
Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud ano, zadejte svoje přihlašovací údaje GitHubu.
Až se zobrazí seznam úložišť, vyberte úložiště.
K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud ano, vyberte Schválit a nainstalovat.
Jakmile se zobrazí karta Konfigurovat , vyberte počáteční kanál.
Nahraďte obsah azure-pipelines.yml tímto kódem.
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop
Až budete připraveni, vyberte Uložit a spustit.
Přidání proměnných instance
V Azure DevOps přejděte do knihovny Pipelines>.
Vyberte + Proměnná skupina.
V části Vlastnosti přidejte verzi pro název skupiny proměnných.
Vytvořte dvě proměnné, které budou odkazovat na názvy hostitelů pro vývoj a přípravu. Nahraďte hodnotu
1234
správnou hodnotou pro vaši instanci.Název proměnné Příklad hodnoty WebAppNameDev tailspin-space-game-web-dev-1234 WebAppNameStaging tailspin-space-game-web-staging-1234 Vyberte Uložit a uložte proměnné.
Přidání vývojové fáze
V dalším kroku aktualizujete svůj kanál tak, aby podporoval sestavení do vývojové fáze.
V Azure Pipelines přejděte na Pipelines Pipelines>.
V místní nabídce vyberte Upravit a upravte kanál.
Aktualizujte azure-pipelines.yml tak, aby zahrnovaly fázi vývoje. Ve fázi vývoje bude váš kanál:
- Spuštění, když fáze sestavení proběhne úspěšně kvůli podmínce
- Stažení artefaktu z
drop
- Nasazení do služby Aplikace Azure pomocí připojení služby Azure Resource Manager
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
AzureWebApp@1
Změňte úlohu tak, aby používala vaše předplatné.Vyberte Nastavení úkolu.
your-subscription
Aktualizujte hodnotu předplatného Azure tak, aby používala vlastní předplatné. V rámci tohoto procesu možná budete muset autorizovat přístup. Pokud narazíte na problém s autorizací prostředku v editoru YAML, je alternativním přístupem vytvoření připojení služby.Nastavte typ aplikace na Web App v Linuxu.
Chcete-li aktualizovat úkol, vyberte Přidat .
Uložte a spusťte kanál.
Přidání přípravné fáze
Nakonec zvýšíte fázi vývoje na přípravnou. Na rozdíl od vývojového prostředí chcete mít v přípravném prostředí větší kontrolu nad tím, že přidáte ruční schválení.
Vytvoření přípravného prostředí
V Azure Pipelines vyberte Prostředí.
Vyberte Nové prostředí.
Vytvořte nové prostředí s názvem přípravy a prostředkem nastaveným na Žádné.
Na stránce přípravného prostředí vyberte Schválení a kontroly.
Vyberte Schválení.
Ve schvalovatelích vyberte Přidat uživatele a skupiny a pak vyberte svůj účet.
V pokynech pro schvalovatele napište Schválit tuto změnu, až bude připravená k přípravě.
Zvolte Uložit.
Přidání nové fáze do kanálu
Do kanálu, který obsahuje ruční schválení, Staging
přidáte novou fázi.
Upravte soubor kanálu a přidejte oddíl
Staging
.trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: staging website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
AzureWebApp@1
Změňte úlohu v přípravné fázi tak, aby používala vaše předplatné.Vyberte Nastavení úkolu.
your-subscription
Aktualizujte hodnotu předplatného Azure tak, aby používala vlastní předplatné. V rámci tohoto procesu možná budete muset autorizovat přístup.Nastavte typ aplikace na Web App v Linuxu.
Chcete-li aktualizovat úkol, vyberte Přidat .
Přejděte ke spuštění kanálu. Sledujte sestavení, jak běží. Jakmile kanál dosáhne
Staging
, čeká na ruční schválení vydané verze. Dostanete také e-mail, který čeká na schválení kanálu.Zkontrolujte schválení a povolte spuštění kanálu.
Vyčištění prostředků
Pokud tuto aplikaci nebudete dál používat, pomocí následujícího postupu odstraňte skupinu prostředků na webu Azure Portal a projekt v Azure DevOps:
Vyčištění skupiny prostředků:
Přejděte na web Azure Portal a přihlaste se.
V řádku nabídek vyberte Cloud Shell. Po zobrazení výzvy vyberte prostředí Bash .
Spuštěním následujícího příkazu az group delete odstraňte použitou
tailspin-space-game-rg
skupinu prostředků.az group delete --name tailspin-space-game-rg
Pokud chcete odstranit projekt Azure DevOps, včetně kanálu buildu, přečtěte si téma Odstranění projektu.