Предварительный просмотр и утверждение развертывания

Завершено

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

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

Операция "что, если"

Файл Bicep описывает состояние, в котором должна находиться среда Azure в конце развертывания. При отправке развертывания Azure Resource Manager изменяет среду Azure в соответствии с состоянием, описанным в файле Bicep.

Развертывание может привести к созданию новых ресурсов в вашей среде или обновлению существующих. При запуске развертывания в полном режиме оно может даже привести к удалению существующих ресурсов.

При создании, обновлении или удалении ресурсов возникает риск того, что все может измениться таким образом, что вы не ожидали. Рекомендуется добавить дополнительный шаг, чтобы проверить, какие ресурсы будут созданы, обновлены и удалены. Эта проверка повышает эффективность процесса автоматизации. При развертывании в рабочей среде важно подтвердить любые изменения, которые будут происходить с вашей средой.

Resource Manager предоставляет операцию "что, если", которую можно выполнить в файле Bicep на этапе конвейера.

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

Вы можете использовать az deployment group what-if команду Azure CLI из определения конвейера для выполнения шага what-if:

stages:

- stage: Preview
  jobs: 
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

Совет

В этом модуле мы будем использовать Azure CLI для выполнения операции "что если". При создании собственного конвейера на основе PowerShell можно использовать командлет New-AzResourceGroupDeployment с параметром -Whatif или командлет Get-AzResourceGroupDeploymentWhatIfResult.

Операция "что, если" не вносит изменений в среду. Вместо этого он описывает ресурсы, которые будут созданы или удалены, свойства ресурсов, которые будут обновлены, и ресурсы, которые будут удалены.

Операция "что если" иногда показывает, что ресурс изменится, хотя фактически не произойдет никаких изменений. Этот отзыв называется шумом. Мы работаем над сокращением этих проблем, но нам нужна помощь, чтобы сообщить об этих проблемах.

Просмотрите выходные данные операции "что если" и определите, следует ли продолжить развертывание. Как правило, разработчик должен сам просмотреть выходные данные команды "что если" и решить, следует ли вносить изменения. Если рецензент решает, что изменения приемлемы, он может вручную утвердить выполнение конвейера.

Дополнительные сведения о команде "что, если" см. в модуле Microsoft Learn Предварительный просмотр развертывания Azure с помощью команды "что, если".

Среды

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

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

variables:
  - name: deploymentDefaultLocation
    value: westus3

stages:

- stage: Preview
  jobs:
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

- stage: Deploy
  jobs:
    - deployment: Deploy
      environment: MyAzureEnvironment
      strategy:
        runOnce:
          deploy:
            steps:
            - checkout: self

            - task: AzureResourceManagerTemplateDeployment@3
              name: Deploy
              displayName: Deploy to Azure
              inputs:
                connectedServiceName: 'MyServiceConnection'
                location: $(deploymentDefaultLocation)
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep

Обратите внимание, что в определении YAML для задания развертывания есть некоторые ключевые отличия от обычного задания.

  • Задание развертывания не начинается со слова job, а определяется как deployment.
  • Ключевое слово environment указывает имя целевой среды. В предыдущем примере развертывание отслеживается для среды с именем MyAzureEnvironment.
  • Ключевое слово strategy указывает, как Azure Pipelines выполняет шаги развертывания. Стратегии развертывания могут включать сложные процессы, особенно при наличии нескольких рабочих сред. В этом модуле мы используем стратегию развертывания runOnce. Эта стратегия ведет себя аналогично другим заданиям, к которым вы уже привыкли.

Проверки и утверждения этапов

После создания среды можно определить проверки. Проверки используются для контроля условий, которые должны быть выполнены, прежде чем конвейер сможет использовать среду. Утверждение — это тип проверки, для которой требуется, чтобы рецензент утвердил изменения вручную.

Проверки определяются в среде, а не в конвейере. Авторы файла конвейера YAML не могут удалять или добавлять эти проверки и утверждения. Только администраторы среды могут управлять проверками и утверждениями.

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

Как работают проверки и утверждения?

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

Утверждение — это один из типов проверки. При настройке утверждения назначается один или несколько пользователей, которые должны утвердить продолжение конвейера.

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

Примечание.

Для пулов агентов и соединений служб также могут быть настроены проверки. Можно также использовать специальный шаг, который называется задачей утверждения вручную. Однако в этом модуле основное внимание уделяется средам и проверкам, связанным с ними.

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

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

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

Важность эффективных методов

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

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

Кроме того, можно добавить проверки и утверждения в подключения службы, которые гарантируют получение утверждения, прежде чем развертывание сможет использовать учетные данные субъекта-службы. Однако утверждения также повлияют на способность конвейера выполнять предварительную проверку и операцию "что если", так как для них тоже требуется подключение к службе.

Можно использовать другое, отдельное подключение к службе для этапа what-if с собственным субъектом-службой. Субъекту-службе, используемому для этапов предварительной проверки и проверки, необходимо определить пользовательскую роль Azure, чтобы обеспечить наличие минимальных разрешений, необходимых для работы.