#gitlab-ci #gitlab-ci-runner
#gitlab-ci #gitlab-ci-runner
Вопрос:
Я завершаю свой тестовый шаг простым скриптом, который сканирует вывод pytest.журнал и должен завершиться с -1 в случае сбоя, поэтому задание становится красным, а не зеленым:
scripts:
- lots of test steps
- bash -c -l "python bin/status.py --statusfile=output.log; exit $?"
Но gitlab-ci-runner возвращает 0:
20200930123055|ERROR|bin/status.py:53|failed in line:173
'========================= 2 failed, 5 passed in 16.91s =========================' so returning -1 to shell
Uploading artifacts for successful job
00:01
Uploading artifacts...
output.log: found 1 matching files and directories
Uploading artifacts as "archive" to coordinator... ok id=2750517 responseStatus=201 Created token=5Gh42zsB
Job succeeded
программа возвращает правильный код выхода:
python.exe .binstatus.py --statusfile=C:usersmobjDownloadsoutput.log
20200930124542|ERROR|.binstatus.py:53|failed in line:99 '=================== 1 failed, 5 passed, 1 skipped in 16.20s ====================' so returning -1 to shell
$?
False
python.exe .binstatus.py --statusfile=C:usersmobjDownloadsoutput2.log
$?
True
Я попытался использовать bin/status.py --statusfile=output.log
in sh, но этот файл с жалобами не найден.
Ответ №1:
Я обнаружил ошибку, оказывается ;exit $?
, что перенос in bash возвращается только к текущему экземпляру
$ /bin/bash -c -l "./bin/status.py --statusfile=/mnt/c/Users/mobj/Downloads/output.log --debug; exit $?"
20200930142836|ERROR|./bin/status.py:53|failed in line:99 '=================== 1 failed, 5 passed, 1 skipped in 16.20s ====================' so returning -1 to shell
$ echo $?
0
Поэтому простое удаление ;exit $?
делает его правильным:
/bin/bash -c -l "./bin/status.py --statusfile=/mnt/c/Users/mobj/Downloads/output.log --debug"
20200930142754|ERROR|./bin/status.py:53|failed in line:99 '=================== 1 failed, 5 passed, 1 skipped in 16.20s ====================' so returning -1 to shell
$ echo $?
255