Пропустить этап с ручным утверждением в Azure DevOps Pipelines (YAML) - PullRequest
1 голос
/ 29 апреля 2020

Для нашего развертывания Terraform мы используем конвейер Azure DevOps, который имеет 3 этапа:

  1. план
  2. применить (ручное утверждение)
  3. test

Для этапа применения мы используем задание развертывания со средой, которая имеет ручное утверждение (проверка). То, что мы хотели бы иметь, это «пропустить» этап подачи заявок и тестирования, если этап плана не показывает изменений. Поэтому мы пытаемся использовать следующую конфигурацию yaml для этапа применения:

  - stage: ApplyShared
    dependsOn: PlanShared
    jobs:
      - job: CheckSharedChanges
        steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: TerraformBuild
              downloadPath: $(System.DefaultWorkingDirectory)
          - bash: |
              # using a file for indicating changes in TF plan, since
              # you cannot pass variables between stages in Azure DevOps
              if [ -f ".shared-changes" ]; then
                  echo '##vso[task.setvariable variable=shared_changes]yes'
              fi
            name: Check
      - deployment: ApplyShared
        dependsOn: CheckSharedChanges
        # this condition seems to be ignored, if there is a manual
        # approval on the stage
        condition: eq(dependencies.CheckSharedChanges.outputs['Check.shared_env'], 'yes')
        displayName: 'Apply - shared'
        # we configured a manual approval (check) for this environment,
        # so the pipeline stops and asks for an operator to approve the deployment
        environment: 'infra-shared'

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

Мой вопрос: знаете ли вы какой-либо другой способ реализовать это?

1 Ответ

1 голос
/ 30 апреля 2020

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

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass

Уже существует аналогичная идея в дорожной карте, вы можете отслеживать следующую ссылку:

https://developercommunity.visualstudio.com/idea/697467/manually-triggered-stages-in-yaml-multi-stage-pipe.html

В настоящее время вы можете рассмотреть возможность запуска ручного запуска и пропустить несколько этапов в своем конвейере:

enter image description here

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