rake / pgTAP "вылетает" при запуске тестов на Jenkins, но не локально - PullRequest
0 голосов
/ 31 августа 2018

У меня есть задание 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?

...