Sdílet prostřednictvím


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

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.

  1. Přihlaste se k portálu Azure.

  2. V nabídce vyberte Cloud Shell a prostředí Bash .

  3. 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    
    
  4. 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
    
  5. 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
    
  6. 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"
    
  7. 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
    
  8. 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 a releaseBranchName
  • 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í

  1. Přihlaste se ke své organizaci Azure DevOps a přejděte do svého projektu.

  2. Přejděte na Kanály a pak vyberte Nový kanál nebo Vytvořit kanál , pokud vytváříte první kanál.

  3. Kroky průvodce proveďte tak, že nejprve vyberete GitHub jako umístění zdrojového kódu.

  4. Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud ano, zadejte svoje přihlašovací údaje GitHubu.

  5. Až se zobrazí seznam úložišť, vyberte úložiště.

  6. K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud ano, vyberte Schválit a nainstalovat.

  1. Jakmile se zobrazí karta Konfigurovat , vyberte počáteční kanál.

  2. 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
    
  3. Až budete připraveni, vyberte Uložit a spustit.

Přidání proměnných instance

  1. V Azure DevOps přejděte do knihovny Pipelines>.

  2. Vyberte + Proměnná skupina.

  3. V části Vlastnosti přidejte verzi pro název skupiny proměnných.

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

  1. V Azure Pipelines přejděte na Pipelines Pipelines>.

  2. V místní nabídce vyberte Upravit a upravte kanál.

    Snímek obrazovky s položkou nabídky Upravit

  3. Aktualizujte azure-pipelines.yml tak, aby zahrnovaly fázi vývoje. Ve fázi vývoje bude váš kanál:

    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'
    
  4. AzureWebApp@1 Změňte úlohu tak, aby používala vaše předplatné.

    1. Vyberte Nastavení úkolu.

      Snímek obrazovky s možností nastavení v úloze editoru YAML

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

      Snímek obrazovky s položkou nabídky předplatného Azure

    3. Nastavte typ aplikace na Web App v Linuxu.

    4. Chcete-li aktualizovat úkol, vyberte Přidat .

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

  1. V Azure Pipelines vyberte Prostředí.

  2. Vyberte Nové prostředí.

  3. Vytvořte nové prostředí s názvem přípravy a prostředkem nastaveným na Žádné.

  4. Na stránce přípravného prostředí vyberte Schválení a kontroly.

    Snímek obrazovky s možností nabídky Schválení a kontroly

  5. Vyberte Schválení.

  6. Ve schvalovatelích vyberte Přidat uživatele a skupiny a pak vyberte svůj účet.

  7. V pokynech pro schvalovatele napište Schválit tuto změnu, až bude připravená k přípravě.

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

  1. 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'
    
  2. AzureWebApp@1 Změňte úlohu v přípravné fázi tak, aby používala vaše předplatné.

    1. Vyberte Nastavení úkolu.

      Snímek obrazovky s možností nastavení v úloze editoru YAML

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

      Snímek obrazovky s položkou nabídky předplatného Azure

    3. Nastavte typ aplikace na Web App v Linuxu.

    4. Chcete-li aktualizovat úkol, vyberte Přidat .

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

    Snímek obrazovky s čekáním na schválení kanálu

  4. Zkontrolujte schválení a povolte spuštění kanálu.

    Snímek obrazovky s kontrolou ručního ověření

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ů:

  1. Přejděte na web Azure Portal a přihlaste se.

  2. V řádku nabídek vyberte Cloud Shell. Po zobrazení výzvy vyberte prostředí Bash .

    Snímek obrazovky webu Azure Portal znázorňující výběr položky nabídky Cloud Shell

  3. Spuštěním následujícího příkazu az group delete odstraňte použitou tailspin-space-game-rgskupinu 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.