Мы знаем, что по умолчанию gitlab ci runners использует set -o pipefail
, как объяснено в coderwall.com эта конкретная опция устанавливает код выхода конвейера равным коду самой правой команды для выхода с помощью ненулевое состояние или ноль, если все команды конвейера успешно завершаются.
Мы все используем оператор «|| true» для предотвращения сбоя задания gitlab ci на реальном выходе 1 (чтобы разрешить сбой после обработки), например, если мой grep
делает выход 1, но я считаю это нормально, и поэтому я не хочу, чтобы моя работа провалилась, я пишу:
job:
script:
- grep "a" myfile.txt || true
Но когда я использую функции вместо команд или скриптов, это больше не работает: (
рабочий пример со скриптом (дает мне выход 0):
job:
script:
- echo "exit 1" > test
- chmox u+x test
- test || true
рабочий пример с командой (дает мне выход 0):
job:
script:
- exit 1 || true
нерабочий пример с функцией (дает мне выход 1):
job:
script:
- function test { exit 1; }
- test || true
нерабочий пример с функцией (дает мне выход 1):
job:
script:
- function test { exit 1; }
- (test || true)
Я не понимаю, в чем разница в обработке кода завершения между скриптом, командой или функцией.
У кого-нибудь есть решение?