Jenkins构建脚本中启动tomcat关键

一、启动tomcat

来源:

http://blog.csdn.net/*break_/article/details/50749576(给出方法)

http://veryyoung.me/blog/2016/04/19/jenkins-backgroud-process.html(给出方法+解释原因)

在网上查了资料,需要在执行脚本之前加入:export BUILD_ID=XXXXXX

XXXXX可以随便写的什么

具体原因还不知道,以后研究了,再来补充。

这里我就来补充一下咯(又是我copy的):

今天在配置 Jenkins Job 的时候,after mvn package 用命令行 nohup java -jar project-1.0-SNAPSHOT.jar > server.log 2>&1 & 起一个 spring-boot 项目,死活不生效。

ssh 到服务器上查不到对应的进程,而直接在服务器上执行是完全 OK 的。

Google 一番后得知,这是 Jenkins 的特性。

To reliably kill processes spawned by a job during a build, Jenkins contains a bit of native code to list up such processes and kill them. This is tested on several platforms and architectures, but if you find a show-stopper problem because of this, you can disable this feature by setting a Java property named “hudson.util.ProcessTree.disable” to the value “true”. This can be done as a parameter to the “java” binary when starting Jenkins:

`java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war`
The ProcessTreeKiller takes advantage of the fact that by default a new process gets a copy of the environment variables of its spawning/creating process.

It sets a specific environment variable in the process executing the build job. Later, when the user requests to stop the build job’s process it gets a list of all processes running on the computer and their environment variables, and looks for the environment variable that it initially set for the build job’s process.

具体链接请点击 ProcessTreeKiller

大概意思是 Jenkins 是在启动 Job 的时候会给子进程设置环境变量,在结束 Job 的时候会检查进程的环境变量,如果包含 Jenkins 生成的,kill 掉。

解决方案:

启动 Jenkins 的时候加上 -Dhudson.util.ProcessTree.disable=true,也就是 java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
在后台进程前加上 BUILD_ID=dontKillMe, 也就是 BUILD_ID=dontKillMe nohup java -jar project-1.0-SNAPSHOT.jar > server.log 2>&1 &

二、maven构建的时候忽略Javadoc

maven构建的时候,忽略Javadoc可以加快速度

mvn clean package -D maven.javadoc.skip=true

上一篇:通过jenkins持续集成 github中的代码到 服务器。


下一篇:Jenkins构建集成部署