Для нашего развертывания Terraform мы используем конвейер Azure DevOps, который имеет 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 условие на этапе с утверждением не проверяется до утверждения, поэтому подход не работает.
Мой вопрос: знаете ли вы какой-либо другой способ реализовать это?