`
alanland
  • 浏览: 640593 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jenkins 的 ProcessTreeKiller

阅读更多

根据下面介绍,合适的解决方案是:

BUILD_ID=dontKillMe bash /home/app/opt/apache-tomcat-6.0.37/deploy-bin/deploy_test.sh

----------------

最近用jenkins执行服务器上的脚本,启动tomcat总是不成功,问了谷哥之后,发现是下面一个特性在作怪:

http://wiki.hudson-ci.org/display/HUDSON/ProcessTreeKiller

 

This feature is available since 1.260

 

To reliably kill processes spawned by a job during a build, Hudson 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.ProcessTreeKiller.disable" to the value "true".

 

This can be done as a parameter to the "java" binary when starting Hudson:

 

 java -Dhudson.util.ProcessTreeKiller.disable=true -jar hudson.war

 

Depending on how you run your container, this can be different. In the distributed build environment, this system property needs to be set on slave JVMs.

 

How it works

 

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.

 

Every job with that environment variable in its environment is then terminated.

 

If your build wants to leave a daemon running behind...

 

A convenient way to achieve that is to change the environment variable BUILD_ID which Hudson's ProcessTreeKiller is looking for. This will cause Hudson to assume that your daemon is not spawned by the Hudson build. For example:

 

BUILD_ID=dontKillMe /usr/apache/bin/httpd

 

---------------------

来自stackoverflow的问答:

http://stackoverflow.com/questions/5728899/tomcat-script-not-working-when-run-from-hudson

http://stackoverflow.com/questions/7703156/start-up-tomcat-from-ant-script

----------------------

The problem had to do with Jenkins feature called ProcessTreeKiller described here.

Basically Jenkins automatically kills all processes spawned by a job by searching the process tree for processes with specific environment variable

All i had to do was to overwrite jenkins env variable called BUILD ID and it worked. I used a Setenv Plugin to set the env var specific for the build.

-----

What about executing the command like this :

<execexecutable="bash"><argvalue="-c"/><argvalue='nohup ${tomcat.bin.dir}/startup.sh -Xms128M -Xmx512M &'/></exec>
---

uild.properties file:

 #----------------------------------------------------
 #Tomcat Configuration
 #----------------------------------------------------
 #Back-end Tomcat 
 tomcat.dir=${branch.dir}/../tomcat
 tomcat.bin.dir=${tomcat.dir}/bin
 tomcat.bootstrap.jar=${tomcat.bin.dir}/bootstrap.jar
 tomcat.jvmarg=-Dcatalina.home

loadproperties file

<propertyfile="${basedir}/build.properties"/><!-- Stop tomcat --><targetname="stop-tomcat"description="Stops back-end tomcat server"depends="prepare"><javajar="${tomcat.bootstrap.jar}"fork="true"spawn="false"><jvmargvalue="${tomcat.jvmarg}=${tomcat.dir}"/><argline="${arg.stop}"/></java><echo>+---------------------------------+</echo><echo>|   T O M C A T   S T O P P E D   |</echo><echo>+---------------------------------+</echo></target>

Also I have added an element called spawn set to "false", which print execution output onto console. 

Hope this helps :) 
 

 

 

 

 

分享到:
评论

相关推荐

    windows下安装Jenkins 2.289.3 jenkins.msi

    jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用...

    jenkins压缩包,jdk8,jenkins.war以及Jenkins安装及配置的pdf

    这个压缩包包含Jenkins的基础环境——JDK8,Jenkins的核心文件——jenkins.war,以及一份关于Jenkins安装和配置的PDF指南,对于学习和部署Jenkins的初学者来说是非常有价值的资源。 首先,我们来详细了解一下...

    jenkins离线插件安装包大全

    Jenkins是一款广泛使用的开源持续集成工具,用于自动化各种软件开发任务,如构建、测试和部署。在许多情况下,尤其是在企业环境中,Jenkins可能需要在没有互联网连接的“离线”环境中运行。在这种情况下,离线安装...

    jenkins2.328配置连接harbor2.4的认证-jenkinsfile连接harbor-详细文档

    jenkins2.328 配置连接 harbor2.4 的认证-jenkinsfile 连接 harbor—详细文档 jenkins2.328 配置连接 harbor2.4 的认证-jenkinsfile 连接 harbor 是一种常见的 DevOps 实践,将编译构建的镜像推送到 docker-harbor ...

    jenkins老版本资源

    Jenkins 是一款开源的持续集成(Continuous Integration, CI)服务器,它被广泛应用于软件开发过程中,用于自动化构建、测试和部署任务。这个压缩包文件集合提供了 Jenkins 的老版本及其相关资源,这对于那些需要...

    windows下验证可用Jenkins 2.346.1

    jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2.346.1 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2.346.1 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2.346.1 ...

    jenkins.war-2.356,适合JDK8的最后jenkins版本

    1. **安装与配置**:Jenkins可以通过下载`jenkins.war`文件,然后在Java环境中运行`java -jar jenkins.war`启动。也可以选择将其部署到像Tomcat这样的Web容器中。配置过程中,需要设定Jenkins的URL、初始化密码,并...

    jenkins离线安装中文插件包jenkins-zh.zip

    Jenkins是一款广泛使用的开源持续集成(CI)工具,它允许开发者自动构建、测试和部署软件。在本场景中,我们关注的是如何在离线环境中安装Jenkins的中文插件包。"jenkins-zh.zip" 文件是专门为解决中文语言支持而...

    Jenkins安装包以及常用插件离线

    Jenkins是一款广泛使用的持续集成(CI)工具,它允许开发者自动化构建、测试和部署软件。在没有互联网连接的环境中,离线安装Jenkins及其插件是必要的。以下将详细介绍如何进行Jenkins的离线安装以及如何处理常用的...

    jenkins系列源码.zip

    本资料包"jenkins系列源码.zip"包含了与Jenkins相关的多个项目的源代码,包括myblog项目、robot集成测试源码、jenkins-share-library以及tools源码,旨在演示如何利用Jenkins结合Kubernetes(k8s)进行动态调用...

    使用java调用jenkins api

    Java调用Jenkins API是一个常见的自动化任务执行场景,特别是在持续集成和持续部署(CI/CD)流程中。Jenkins作为一个开源的持续集成工具,提供了丰富的API接口,允许开发者通过编程方式与Jenkins服务器进行交互。...

    Jenkins打包配置文件

    Jenkins是一款开源的持续集成(Continuous Integration,简称CI)服务器,它可以帮助开发团队自动化软件构建、测试和部署的过程。在“Jenkins打包配置文件”这个主题中,我们主要讨论的是如何管理和配置Jenkins来...

    jenkins离线所需插件

    Jenkins 是一款开源的持续集成(Continuous Integration, CI)工具,广泛用于自动化各种软件开发任务,包括构建、测试和部署。在离线环境下使用 Jenkins,往往需要预先下载好所需的插件,以确保在没有网络连接时也能...

    Jenkins打包插件配置

    **Jenkins打包插件配置详解** 在持续集成和持续部署(CI/CD)的领域中,Jenkins扮演着至关重要的角色。它是一个开源的、高度可扩展的自动化服务器,广泛用于构建、测试和部署软件。其中,Jenkins的插件系统是其强大...

    Jenkins一键打包.zip

    Jenkins作为一个开源持续集成工具,被广泛应用于自动化各种任务,包括构建、测试和部署软件。在Unity3D游戏开发中,Jenkins可以帮助开发者实现一键打包,极大地提高了工作效率。本资料"Jenkins一键打包.zip"提供了...

    jenkins离线插件包.zip

    Jenkins是一款广泛使用的开源持续集成工具,用于自动化各种任务,包括构建、测试和部署软件。离线插件包是为了解决在没有网络连接或网络受限的环境中安装和更新Jenkins插件的需求。"jenkins离线插件包.zip"正是这样...

    jenkins离线安装svn插件

    Jenkins 是一款强大的持续集成工具,它允许开发者自动化软件构建、测试和部署流程。Subversion(简称 SVN)是版本控制系统,用于跟踪项目文件的修改历史。在某些情况下,如网络不稳定或安全策略限制,我们需要在 ...

    Jenkins迁移梳理及踩坑总结(个人精华版)

    Jenkins是一种流行的开源自动化服务器,主要用于自动化各种任务,包括构建、测试和部署软件。在企业IT环境中,Jenkins经常作为持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)的...

    Jenkins Pipeline 部署 SpringBoot 应用的教程详解

    Jenkins Pipeline 部署 SpringBoot 应用详解 本篇文章主要介绍了使用 Jenkins Pipeline 部署 SpringBoot 应用的详细教程,从安装依赖包到环境准备、安装 Jenkins 等步骤进行详细的介绍,对读者学习或工作具有一定的...

Global site tag (gtag.js) - Google Analytics