为什么我的脚本中的 psql 命令突然被 jenkins/hudson 杀死?

为什么我的脚本中的 psql 命令突然被 jenkins/hudson 杀死?

我有一个现有的 jenkins 作业,它启动一个 shell 脚本将我的生产环境复制到 qa 中。

我们向产品中添加了大量数据(gzip 转储从 2gig 增加到 15gig),突然我的 jenkins 工作开始失败。

我们在 aws 中运行 postgres 9.5,在 jenkins 中运行 2.171。所有 jenkins 作业都在 master 上执行,master 是同一台服务器,有 6 个执行程序。没有内存/cpu/磁盘空间问题

尝试了一些方法:statement_timeoutpostgres 实例上已经是0。出于某种原因,从 bash 切换到 sh 对某些脚本有帮助,但对其他脚本没有帮助。特别是这个脚本仍然有各种 psql 语句被杀死。从交互式 shell 运行时,该脚本运行良好。

还尝试禁用进程树杀手https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller.不行。

下面是两个比较无害的命令的代码,它们应该运行得相当快。$POSTGRES_HOST_OPTS只有数据库名称和端口:

echo -e "Running POSTGIS command"
psql $POSTGRES_HOST_OPTS -U $POSTGRES_ENV_POSTGRES_USER_PROD -d postgres -c "CREATE EXTENSION postgis;"

echo -e "Creating temporary user dv3_qa_tmp so we can rename the $POSTGRES_ENV_POSTGRES_USER_PROD user\n"
psql $POSTGRES_HOST_OPTS -U $POSTGRES_ENV_POSTGRES_USER_PROD -d postgres -c "create role dv3_qa_tmp password '$PGPASSWORD_QA' createdb createrole inherit login;"

以下是詹金斯控制台的输出:

Waiting for new instance to be available...
-e Renaming database dv3_prod to dv3_qa 

Killed
-e Running POSTGIS command
Killed
-e Creating temporary user dv3_qa_tmp so we can rename the dv3_prod_user user

Killed
-e Renaming user dv3_prod_user to dv3_qa_user 

Killed
Killed
-e 
All done

jenkins.log 中有一些关于文件描述符的内容,但不确定它们之间有何关联。我还尝试重定向 stderr,这样可以消除此消息,但不会阻止命令被终止。

Apr 10, 2019 4:23:31 PM hudson.Proc$LocalProc join
WARNING: Process leaked file descriptors. See https://jenkins.io/redirect/troubleshooting/process-leaked-file-descriptors for more information
java.lang.Exception
        at hudson.Proc$LocalProc.join(Proc.java:334)
        at hudson.tasks.CommandInterpreter.join(CommandInterpreter.java:155)
        at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:109)
        at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:66)
        at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
        at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741)
        at hudson.model.Build$BuildExecution.build(Build.java:206)
        at hudson.model.Build$BuildExecution.doRun(Build.java:163)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504)
        at hudson.model.Run.execute(Run.java:1818)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
        at hudson.model.ResourceController.execute(ResourceController.java:97)
        at hudson.model.Executor.run(Executor.java:429)

相关内容