У меня есть задание jenkins, где я запускаю модульные тесты postgres DB с использованием pgTAP. Если я запускаю тесты локально на Mac или сразу после ssh в окне Jenkins Centos (выполняя те же самые команды, что и для пользователя jenkins, как я выполняю в задании Jenkins), я получаю хороший вывод из ВСЕХ тестов - сводка OK / сбой тесты.
Если я выполню те же самые команды в задании Jenkins, тесты будут выполнены, но задание завершится как успешное выполнение после первого неудачного теста pgTAP - это не то поведение, которое мне нужно, так как я хочу видеть тот же вывод, который вижу при ручном запуске скрипта (Сводка состояния тестов).
Это правильный вывод, который я вижу, если запускать вручную в окне Jenkins (Это короткий вывод, в исходном выводе нужно выполнить еще много тестов):
-
bash-4.2$ rake clean_test
PTH_TARGET=all PTH_COVERAGE=none PTH_LINT=none
ERROR: function gen_salt(unknown) does not exist
LINE 1: SELECT crypt(new.pass, gen_salt('bf'))
^
HINT: No function matches the given name and argument types. You
might need to add explicit type casts.
QUERY: SELECT crypt(new.pass, gen_salt('bf'))
CONTEXT: PL/pgSQL function store.prepare_user() line 21 at assignment
SQL statement "insert into private.users (email, pass, role, status)
values (_x.email, _x.pass, _x.role, _x.status)"
PL/pgSQL function test_login_with_role() line 82 at SQL statement
PL/pgSQL function _runner(text[],text[],text[],text[],text[]) line 62
at FOR over EXECUTE statement
SQL function "runtests" statement 1
Error running: psql -qtAX --pset pager=off --set ON_ERROR_ROLLBACK=1 -
-set ON_ERROR_STOP=1 -h "localhost" -p "5599" -U "pth" -d "prod_db" -c "SET search_path TO pgtap, public, auth_test; SELECT * FROM pgtap.runtests('^test_')"
# Subtest: bo_test.test_calc_discount()
ok 1 - zero retail value
ok 2 - null discount type
ok 3 - percent_off
ok 4 - discount_to_value
1..4
ok 1 - bo_test.test_calc_discount
# Subtest: bo_test.test_is_state_licensed()
ok 1 - licensed hair
Это (обрезанная) часть вывода из консоли jenkins - обратите внимание, что задание завершается после этой ошибки (завершается как успешная сборка) и не будет продолжать другие тесты / подтесты:
ERROR: function gen_salt(unknown) does not exist
LINE 1: SELECT crypt(new.pass, gen_salt('bf'))
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT crypt(new.pass, gen_salt('bf'))
CONTEXT: PL/pgSQL function store.prepare_user() line 21 at assignment
SQL statement "insert into private.users (email, pass, role, status)
values (_x.email, _x.pass, _x.role, _x.status)"
PL/pgSQL function test_login_with_role() line 82 at SQL statement
PL/pgSQL function _runner(text[],text[],text[],text[],text[]) line 62 at FOR over EXECUTE statement
SQL function "runtests" statement 1
Error running: psql -qtAX --pset pager=off --set ON_ERROR_ROLLBACK=1 --set ON_ERROR_STOP=1 -h "localhost" -p "5599" -U "pth" -d "prod_db" -c "SET search_path TO pgtap, public, auth_test; SELECT * FROM pgtap.runtests('^test_')"
Error running tests for auth
UncaughtThrowError: uncaught throw RuntimeError: Command failed with status (1): [psql -qtAX --pset pager=off --set ON_ERROR...]>>.........../usr/local/rvm/gems/ruby-2.3.7/bin/rake:23:in `load'
/usr/local/rvm/gems/ruby-2.3.7/bin/rake:23:in `<main>'
/usr/local/rvm/gems/ruby-2.3.7/bin/ruby_executable_hooks:24:in `eval'
/usr/local/rvm/gems/ruby-2.3.7/bin/ruby_executable_hooks:24:in `<main>'
Process leaked file descriptors. See https://jenkins.io/redirect/troubleshooting/process-leaked-file-descriptors for more information
Finished: SUCCESS
Я искал ошибку Process leaked file descriptors
и нашел советы по выполнению таких команд: BUILD_ID=dontKillMe nohup rake clean_test &
, однако, это не помогло, и вывод такой же.
Кто-нибудь знает, как я могу получить такой же результат в задании jenkins, как и при работе на коробке jenkins?