Шаг конвейера Azure не выполняется, хотя код выхода равен 0
Я настроил конфигурацию yaml для Azure-pipe с конвейерным заданием, которое запускает 5 сценариев. Конфиг для каждого скрипта имеет failOnStderr
флаг установлен в true
, Сценарий выполняется успешно, однако этап завершается неудачно с выводом:
##[error]Bash wrote one or more lines to the standard error stream.
Я включил system.debug
для многословия и получил дополнительные подробности как таковые:
##[debug]Exit code 0 received from tool '/bin/bash'
##[debug]STDIO streams have closed for tool '/bin/bash'
##[error]Bash wrote one or more lines to the standard error stream.
##[debug]Processed: ##vso[task.issue type=error;]Bash wrote one or more lines to the standard error stream.
##[debug]task result: Failed
##[debug]Processed: ##vso[task.complete result=Failed;done=true;]
У меня есть следующие вопросы:
- Почему код выхода 0 интерпретируется как ошибка?
- По какой-то причине за кулисами отправляется что-то еще со стандартной ошибкой?
- Какое решение / обходной путь рекомендует сообщество за пределами конфигурации, предлагаемой лазурными конвейерами? Я мог бы использовать снаряд
trap
но я надеялся найти что-то, что уменьшило бы шаблон сценариев.
0 ответов
У меня тоже были проблемы с failOnStderr
и пришел к следующему:
я думаю что failOnStderr
следует использовать только для обработки неработающих приложений, которые возвращают 0, но все равно дают сбой, и записывают причину этого сбоя в стандартный вывод.
В вашем случае сообщение об ошибке ##[error]Bash wrote one or more lines to the standard error stream.
по крайней мере, дает причину, почему шаг не удался.
В моем случае сообщение об ошибке было ##[error]Script failed with error: Error: /bin/bash failed with return code: 0
который даже не упоминает тот факт, что он действительно потерпел неудачу из-за сообщения регистрации (не ошибки), выданного stderr.
Так
- Это не так. Сбой, потому что вы указали, что он должен потерпеть неудачу, если что-то было записано в stderr, что, кажется, имеет место
- Некоторые программы пишут сообщения регистрации в stderr (например,
az --version
выдает предупреждение stderr, если оно устарело) - Я думаю, что самые простые решения следующие:
- Если ваши скрипты не используют неработающие приложения, которые завершаются с ошибкой с кодом выхода 0, не используйте
failOnStderr
флаг - Если вам нужно / все еще хотите использовать
failOnStderr
, перенаправить stderr из тех команд, которые записывают свои сообщения регистрации в stderr (2 > /dev/null
)
- Если ваши скрипты не используют неработающие приложения, которые завершаются с ошибкой с кодом выхода 0, не используйте