我有一个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框上运行时看到的相同输出?