V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
palmers
V2EX  ›  问与答

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

  •  
  •   palmers · 2016-11-01 18:44:24 +08:00 · 4586 次点击
    这是一个创建于 2929 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第 1 条附言  ·  2016-11-02 10:32:50 +08:00

    没有使用脚本,在别的地方找到这个插件然后使用插件部署到tomcat了, 插件地址在这里

    11 条回复    2016-11-02 13:32:41 +08:00
    Gonster
        1
    Gonster  
       2016-11-01 18:52:17 +08:00 via iPhone
    Jenkins 构建后执行脚本, Jenkins 在脚本之行完成后会把脚本创建的进程都杀死,在 sh 脚本里修改一个变量就可以避免被杀死(实在记不住变量名了)。
    或者你可以考虑下其他 Jenkins 插件做这种事情。
    kylinking
        2
    kylinking  
       2016-11-01 19:04:04 +08:00
    接楼上,有个 Publish Over SSH 可以复制文件和执行脚本,不过更对集群进行适合批量管理,可以一试
    Gonster
        3
    Gonster  
       2016-11-01 19:11:05 +08:00 via iPhone
    之前看文档 Jenkins 的理念主要是它就是用来构建的而不是部署,部署应该交给其他工具,构建的话构建完了之后自然应该停止,所以自带插件都是这样的,不然脚本可能会在 Jenkins 服务器上一堆残留一堆没杀死的进程。
    其他有些插件,设计就是用来部署的所以不会按 Jenkins 这种设计来。
    palmers
        4
    palmers  
    OP
       2016-11-01 22:24:27 +08:00
    @Gonster 本来计划是安装 jenkins 一个插件来部署自动部署项目的,但是这个插件死活下载不下来,就想到用脚本来复制 war 包然后杀死 tomcat 进程然后调用 tomcat 启动脚本来启动 tomcat 服务的。 就是这个插件 : Deploy to container Plugin
    palmers
        5
    palmers  
    OP
       2016-11-01 22:25:23 +08:00
    @kylinking 我现在的问题不在 war 的部署而且 tomcat 的启动脚本执行上
    Gonster
        6
    Gonster  
       2016-11-02 08:46:06 +08:00 via iPhone
    @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
        7
    Gonster  
       2016-11-02 08:48:01 +08:00 via iPhone
    6 楼 打错:“你意思本来想用 deploy to container 插件”
    palmers
        8
    palmers  
    OP
       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
        9
    Gonster  
       2016-11-02 12:52:18 +08:00 via iPhone
    怎么写你参考 6 六最后一个链接页面里最后一行的写法,大概就是:
    BUILD_ID=abcde ./startup.sh

    如果不行的话我就不大清楚了
    Gonster
        10
    Gonster  
       2016-11-02 12:53:43 +08:00 via iPhone
    六楼。。写错了
    palmers
        11
    palmers  
    OP
       2016-11-02 13:32:41 +08:00
    @Gonster 我是参考这个写的 依然不行 然后现在使用插件,自动部署的时候报错, Context /myproject is defined in server.xml and may not be undeployed 每次都需要删除 webapp 和 catalina 下的项目文件,然后重启启动 tomcat 就可以了. 真是怎么都不行,服了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2832 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.