jenkins 中构建后执行脚本,在脚本中执行 tomcat 启动脚本,执行失败,请问是为什么?

2016-11-01 18:44:24 +08:00
 palmers

目的是:在 jenkins 构建完项目后,自动将编译的 maven war 包复制到 tomcat/webapp 目录下部署,然后启动 tomcat .

在脚本中,能正常将编译后的 war 包复制到tomcat/webapp目录下,但是执行 sh startup.sh & 后 tomcat 并没有启动起来.

脚本执行到 catalina.sh中的输出CATALINA_BASECATALINA_TMPDIR 后就停止了,这是在 jenkins 的console output中看到的 之后输出的是 jenkins job 执行成功的信息。

我对脚本一窍不通,实在是没招了,请大家支招。 多谢!!!!

4586 次点击
所在节点    问与答
11 条回复
Gonster
2016-11-01 18:52:17 +08:00
Jenkins 构建后执行脚本, Jenkins 在脚本之行完成后会把脚本创建的进程都杀死,在 sh 脚本里修改一个变量就可以避免被杀死(实在记不住变量名了)。
或者你可以考虑下其他 Jenkins 插件做这种事情。
kylinking
2016-11-01 19:04:04 +08:00
接楼上,有个 Publish Over SSH 可以复制文件和执行脚本,不过更对集群进行适合批量管理,可以一试
Gonster
2016-11-01 19:11:05 +08:00
之前看文档 Jenkins 的理念主要是它就是用来构建的而不是部署,部署应该交给其他工具,构建的话构建完了之后自然应该停止,所以自带插件都是这样的,不然脚本可能会在 Jenkins 服务器上一堆残留一堆没杀死的进程。
其他有些插件,设计就是用来部署的所以不会按 Jenkins 这种设计来。
palmers
2016-11-01 22:24:27 +08:00
@Gonster 本来计划是安装 jenkins 一个插件来部署自动部署项目的,但是这个插件死活下载不下来,就想到用脚本来复制 war 包然后杀死 tomcat 进程然后调用 tomcat 启动脚本来启动 tomcat 服务的。 就是这个插件 : Deploy to container Plugin
palmers
2016-11-01 22:25:23 +08:00
@kylinking 我现在的问题不在 war 的部署而且 tomcat 的启动脚本执行上
Gonster
2016-11-02 08:46:06 +08:00
@palmers 其实我没完全看明白,你的意思是本来不想用 deploy to container 插件,但是下载不下来,所以用的是 Execute shell 运行脚本做你描述的事情?
如果是我理解的这样,你只能用 Execute shell ,那一楼我提到的那个变量名字是 BUILD_ID ,随便改成其他值就好了。参考:
http://stackoverflow.com/questions/5728899/tomcat-script-not-working-when-run-from-hudson
https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller
Gonster
2016-11-02 08:48:01 +08:00
6 楼 打错:“你意思本来想用 deploy to container 插件”
palmers
2016-11-02 09:08:07 +08:00
@Gonster 对, 是这个意思,这个插件一直安装失败,所以想着用脚本实现自动部署,但是 tomcat 启动脚本`startup.sh`执行到这就结束了,去 catalina.sh 也没看明白,主要是我不懂 sh 脚本语法,这是 jenkins 执行 job 最后的输出,麻烦你帮我看下是哪儿出问题了:
从这儿就开始调用`startup.sh`了,在我的自定义脚本中是 这条语句: `./startup.sh &`
Using CATALINA_BASE: /home/tianzhiwang/casicdata/tomcat/apache-tomcat-7.0.63
Using CATALINA_HOME: /home/tianzhiwang/casicdata/tomcat/apache-tomcat-7.0.63
Using CATALINA_TMPDIR: /home/tianzhiwang/casicdata/tomcat/apache-tomcat-7.0.63/temp
Finished: SUCCESS

最后, 我尝试在'shell execute' block 添加了 BUILD_ID 键值对,但是问题依旧.
Gonster
2016-11-02 12:52:18 +08:00
怎么写你参考 6 六最后一个链接页面里最后一行的写法,大概就是:
BUILD_ID=abcde ./startup.sh

如果不行的话我就不大清楚了
Gonster
2016-11-02 12:53:43 +08:00
六楼。。写错了
palmers
2016-11-02 13:32:41 +08:00
@Gonster 我是参考这个写的 依然不行 然后现在使用插件,自动部署的时候报错, Context /myproject is defined in server.xml and may not be undeployed 每次都需要删除 webapp 和 catalina 下的项目文件,然后重启启动 tomcat 就可以了. 真是怎么都不行,服了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/317181

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX