Упражнение - Повышение на стейджинг

Завершено

Конвейер выпуска теперь состоит из трех этапов: сборка, разработкаи тестирование. Вы и команда Tailspin имеете еще один этап для выполнения: Стадия.

В этой части вы получите следующее:

  • Создайте среду промежуточного в Azure Pipelines и назначьте себя утверждающим.
  • Определите подготовительный этап , который выполняется только после того, как утверждающее лицо проверяет результаты этапа тестирования .

Подготовка подготовительной среды

Здесь вы создадите среду в Azure Pipelines для промежуточной. В целях обучения вы назначаете себя утверждающим. На практике вы назначите пользователей, которым требуется утвердить изменения, до того как эти изменения перейдут на следующий этап. Для команды Tailspin Амита утверждает изменения, чтобы они могли быть перенесены из Test в Подготовительный.

Ранее в этом модуле вы указали параметры environment для этапов Dev и Test. Вот пример для этапа разработки.

- stage: 'Deploy'
  displayName: 'Deploy the web application'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    pool:
      vmImage: 'ubuntu-20.04'
    environment: dev
    variables:
    - group: Release

Вы можете определить среду с помощью Azure Pipelines, включающую определенные критерии для выпуска. Эти критерии могут включать конвейеры, авторизованные для развертывания в среде. Вы также можете указать человеческие одобрения, необходимые для продвижения релиза с одного этапа на следующий. Здесь вы указываете эти одобрения.

Чтобы создать стадийную среду, выполните следующие действия.

  1. В Azure Pipelines выберите среды.

    Снимок экрана Azure Pipelines, показывающий расположение опции меню

  2. Выберите Создать среду.

  3. В разделе "Имя "введите промежуточного.

  4. Оставьте оставшиеся поля по умолчанию.

  5. Выберите Создать.

  6. На странице среды откройте раскрывающийся список, а затем выберите Утверждения и проверки.

    Снимок экрана Azure Pipelines, показывающий расположение утверждений и контрольных пунктов меню.

  7. Выберите согласования.

  8. В разделе Утверждающиевыберите Добавить пользователей и группы, а затем выберите свою учетную запись.

  9. В разделе Инструкции для утверждающихвведите Утвердить это изменение, когда оно готово к промежуточной стадии.

  10. Выберите Создать.

Повышение уровня изменений в промежуточном режиме

Здесь вы измените конфигурацию конвейера, чтобы развернуть сборку на стейджинг этапе .

  1. В Visual Studio Code измените azure-pipelines.yml следующим образом:

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      releaseBranchName: 'release'
    
    schedules:
    - cron: '0 3 * * *'
      displayName: 'Deploy every day at 3 A.M.'
      branches:
        include:
        - release
      always: false 
    
    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: |
        and
        (
          succeeded(),
          eq(variables['Build.SourceBranchName'], variables['releaseBranchName'])
        )
      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: website'
                inputs:
                  azureSubscription: 'Resource Manager - Tailspin - Space Game'
                  appName: '$(WebAppNameDev)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    
    - stage: 'Test'
      displayName: 'Deploy to the test environment'
      dependsOn: Dev
      #condition: eq(variables['Build.Reason'], 'Schedule')
      jobs:
      - deployment: Deploy
        pool:
          vmImage: 'ubuntu-20.04'
        environment: test
        variables:
        - group: 'Release'
        strategy:
          runOnce:
            deploy:
              steps:
              - download: current
                artifact: drop
              - task: AzureWebApp@1
                displayName: 'Azure App Service Deploy: website'
                inputs:
                  azureSubscription: 'Resource Manager - Tailspin - Space Game'
                  appName: '$(WebAppNameTest)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    
    - stage: 'Staging'
      displayName: 'Deploy to the staging environment'
      dependsOn: Test
      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: website'
                inputs:
                  azureSubscription: 'Resource Manager - Tailspin - Space Game'
                  appName: '$(WebAppNameStaging)'
                  package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
    

    Этот код добавляет этап подготовки. Сцена развертывается в тестовой среде, что включает утверждение на выпуск.

    Совет

    Вероятно, вы заметили, что все три этапа развёртывания следуют аналогичным шагам. Вы можете использовать шаблоны для определения распространенных задач сборки один раз и повторного использования их несколько раз. Вы уже использовали эту технику в создании конвейера сборки с помощью модуля Azure Pipelines. В целях обучения мы повторяем шаги на каждом этапе.

  2. В интегрированном терминале добавьте azure-pipelines.yml в индекс. Затем зафиксируйте изменение и отправьте его в GitHub.

    Совет

    Перед выполнением этих команд Git сохраните azure-pipelines.yml.

    git add azure-pipelines.yml
    git commit -m "Deploy to Staging"
    git push origin release
    
  3. В Azure Pipelines перейдите к сборке. Отслеживание сборки во время выполнения.

    Когда сборка достигает подготовки, вы видите, что конвейер ожидает завершения всех проверок. В этом случае есть одна проверка — утверждение выпуска вручную.

    Снимок экрана Azure Pipelines с промежуточным этапом, для которого требуется утверждение вручную.

    Вы можете настроить Azure DevOps для отправки уведомления по электронной почте, когда сборка требует утверждения. Ниже приведен пример:

    Снимок экрана части уведомления по электронной почте о подтверждении сборки.

  4. Выберите проверить>утвердить.

    На практике, чтобы убедиться, что они соответствуют вашим требованиям, необходимо проверить изменения.

  5. После завершения сборки откройте веб-браузер. Перейдите по URL-адресу, связанному с экземпляром службы приложений для промежуточной среды .

    Если у вас по-прежнему открыта вкладка браузера, обновите страницу. Если вы не помните URL-адрес, найдите его на портале Azure, на странице сведения о службе приложений.

    Вы видите, что веб-сайт Space Game развернут в службе приложений и запущен.

    Снимок экрана веб-браузера с веб-сайтом Space Game в промежуточной среде.

  6. В качестве дополнительного шага в Azure Pipelines выберите среды. Затем выберите среду промежуточного.

    Azure Pipelines записывает историю развертывания, что позволяет отслеживать изменения в среде обратно к коммитам кода и рабочим элементам.

    Снимок экрана Azure Pipelines с журналом развертывания. В журнале показано одно успешное развертывание.

Команда Tailspin собирается обсудить их прогресс. Амита утверждает изменения на стадии теста , в то время как другие наблюдают.

Тим: Сказать вам правду, сначала я немного нервничал относительно автоматизированных процессов выпуска. Но мне это действительно нравится теперь, когда я вижу, что это работает. Каждый этап может иметь собственную среду, связанные с ней тесты и утвердителей. Конвейер автоматизирует много вещей, которые мы должны были сделать вручную. Но у нас все еще есть контроль над тем, где нам нужно.

Амита: Я мог представить себе, что мы делаем что-то похожее на переход изменений от промежуточного до производства. Кстати, когда мы добавим продуктивную среду ?

Энди: Вскоре. Я думаю, что мы все еще должны сначала заполнить несколько частей здесь, перед тем как мы добавим это.