выход маски 1 при сбое функции скрипта gitlab - PullRequest
0 голосов
/ 08 января 2019

Мы знаем, что по умолчанию 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)

Я не понимаю, в чем разница в обработке кода завершения между скриптом, командой или функцией.

У кого-нибудь есть решение?

1 Ответ

0 голосов
/ 08 января 2019

наконец, это не проблема поведения функций, а ошибка в управлении кодом возврата функции, на самом деле необходимо использовать return вместо exit, чтобы гарантировать то же функционирование, что и команда.

Поэтому решение было очень простым, в случае функции мне нужно написать:

job:
  script:
    - function test { return 1; }
    - test || true

Теперь код выхода 0:)

...