У меня возникли проблемы с решением, в котором я бы продолжил сборку конвейера ADO, когда Terraform возвращает код выхода 2. Terraform обычно возвращает код выхода 0, когда изменения обнаружены или нет, но с -deteailed-exitcode прикреплен к команде плана: нет изменений - это код выхода 0, а изменения - код выхода 2.
Проблема, с которой я столкнулся, - это власти, которые хотели бы, чтобы конвейер пропустил остальные этапы и сообщил об успехе если нет запланированных изменений terraform, и продолжить конвейер, если изменения обнаружены.
- script: |
terraform plan -input=false -no-color -out=plan.tfplan -detailed-exitcode
# on changes detected, succeed; otherwise fail
if [ $? -eq 2 ]; then
exit 0
else
exit 1
fi
displayName: "Planning Terraform Changes"
name: TerraformPlan
condition: succeeded()
continueOnError: true
workingDirectory: "$(Build.SourcesDirectory)/terraform/$(ENVIRONMENT_NAME)"
env:
TF_IN_AUTOMATION: true
ARM_CLIENT_ID: $(NONPROD_ARM_CLIENT_ID)
ARM_CLIENT_SECRET: $(NONPROD_ARM_CLIENT_SECRET)
ARM_SUBSCRIPTION_ID: $(NONPROD_ARM_SUBSCRIPTION_ID)
ARM_TENANT_ID: $(NONPROD_ARM_TENANT_ID)
- script: |
echo "Nothing to do"
displayName: "No changes detected"
name: NoChanges
condition: failed()
- script: |
echo "Changes detected"
displayName: "Changes Detected"
name: Changes
condition: succeeded()
- stage: ...
С вышеуказанными конвейерами yaml скрипт «Обнаружены изменения» всегда запускается. Я не уверен, что я собираюсь сделать это правильно, поэтому любой ввод приветствуется.
Как вы думаете, было бы лучше использовать метод удаления файла и использования переменной конвейера, например: Пропустить этап с ручным утверждением в Azure DevOps Pipelines (YAML)
Обновление: если я удалю continueOnError: true
, весь конвейер останавливается после этапа и появляется сообщение «Изменено не обнаружено» . Я пытаюсь перевести конвейер с go на другой этап.