Azure многоступенчатых конвейеров: условно пропустить один этап, но не следующий - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть Azure многоступенчатый конвейер CI / CD. В нем есть этапы для тестирования и развертывания UAT.

Я хочу, чтобы выпуск UAT работал, если тест пройден успешно или пропущен, но не в случае сбоя.

Не могу. Что бы я ни пытался, если тест пропущен, UAT также пропускается. Если я не использую always(), но тогда UAT будет работать, даже если тест не пройден.

  ...
  - stage: Test
    condition: and(succeeded(), ne(variables['build.sourceBranchName'], 'DoUAT')) # Skip for UAT deployment tests
    ...

  - stage: UAT
    condition: and(succeeded(), in(variables['build.sourceBranchName'], 'master', 'DoUAT')) # Only deploy off master branch and branch to test UAT deploys.
    ...

Как пропустить один этап, но не следующий?

What I get vs what I want

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Вы можете использовать not(failed('Test')) условие, пожалуйста, попробуйте ниже условия.

- stage: UAT
    condition: and(not(failed('Test')), in(variables['build.sourceBranchName'], 'master', DoUAT')) # Only deploy off master branch and branch to test UAT deploys.
    ...

Я проверил, и это сработало, проверьте скриншот ниже.

enter image description here

0 голосов
/ 14 февраля 2020

Я думаю, что из-за того, что сцена не работает, она не получает статус (например, успешно, не удалось, отменено и т. Д. c.). Для skipped.

функция статуса отсутствует. Я думаю, что вам нужно будет добавить зависимость на этапе до Test, чтобы можно было выполнить эту оценку. Допустим, этот этап называется Build.

Я думаю, что это условие должно работать: (разрывы строк предназначены только для чтения)

# run the stage if build is successful 
# and test succeeded or skipped 
# AND the branch is correct
and(
  and(succeeded('Build'), not(failed('Test'))), 
  in(variables['build.sourceBranchName'], 'master', 'DoUAT')
)

не удалось

  • Для задание:
    • Без аргументов возвращает значение True только в случае сбоя любого предыдущего задания в графе зависимостей.
    • С именами заданий в качестве аргументов, оценивается как Истина, только если любое из этих заданий не удалось .

Из-за этой документации я думаю, что это необходимо добавить параметр Test, чтобы нацелиться именно на этот этап. Однако я не уверен, что для этого необходимо добавить имя Test в раздел dependencies этапа UAT.

...