Получение конвейеров ADO для пропуска шагов в плане Terraform без изменений - PullRequest
0 голосов
/ 28 мая 2020

У меня возникли проблемы с решением, в котором я бы продолжил сборку конвейера 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 на другой этап.

1 Ответ

0 голосов
/ 28 мая 2020

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

...