在Jenkins上运行测试而不是在本地运行时,rake / pgTAP会“崩溃”

时间:2018-08-31 16:39:16

标签: bash jenkins pgtap

我有一个jenkins作业,使用pgTAP运行postgres数据库单元测试。如果我在Mac上本地运行测试,或者在Jenkins Centos框中的ssh之后直接运行测试(与在Jenkins作业中运行的命令与jenkins用户运行的命令完全相同),那么我从所有测试中都得到了不错的输出-总结确定/失败测试。

如果我在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框上运行时看到的相同输出?

0 个答案:

没有答案