Упражнение. Повышение до промежуточной подготовки

Завершено

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

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

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

Создание промежуточной среды

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

Ранее в этом модуле вы указали параметры environment для этапов Разработки и Тестирования. Ниже приведен пример этапа разработки.

- 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 выберите "Среды".

    A screenshot of Azure Pipelines showing the location of the Environments menu option.

  2. Выберите новую среду.

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

  4. В остальных полях оставьте значения по умолчанию.

  5. Нажмите кнопку создания.

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

    A screenshot of Azure Pipelines, showing the location of the approvals and checks menu item.

  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 перейдите к сборке. Трассировка сборки при выполнении.

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

    A screenshot of Azure Pipelines showing the Staging stage, which requires manual approval.

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

    A screenshot of a portion of a build approval email notification.

  4. Выберите Проверка>Утвердить.

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

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

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

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

    A screenshot of web browser showing the Space Game website in the Staging environment.

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

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

    A screenshot of Azure Pipelines showing the deployment history. The history shows one successful deployment.

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

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

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

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