我在 Jenkins(版本 1.578)中有一份 Maven 工作。下面的 maven 代码片段(用 Groovy 代码编写的 Ant 脚本)启动了一个 Fuse 服务器,我无法让 Jenkins 在作业完成后让它继续运行。
<profile>
<id>start-fuse</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<id>start-fuse</id>
<phase>integration-test</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
<![CDATA[
def fuseBinDirectory = '${fuse.dir}/bin'
ant.exec(executable:'bash', dir:fuseBinDirectory, failonerror:true, osfamily:'unix') {
ant.env(key:'BUILD_ID',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'KARAF_OPTS',value:'${KARAF_OPTS}')
ant.arg(value:"-c")
ant.arg(value:"nohup ./start ${fuse.start.parameters} </dev/null >> nohup.out 2>&1&")
}
]]>
</source>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
我有什么错吗?
如何在 Windows 下 fork 一个类似的 Fuse 进程,以便 Jenkins 不会杀死它?
更新 - 解决方案
添加接受的答案中提到的 4 个 env 条目在 Windows 和 Linux 上都有效。所以无论你从事哪种工作类型,你都可以有这样的事情:
ant.exec(executable:'sh', dir:fuseBinDirectory, failonerror:true, osfamily:'unix') {
ant.env(key:'BUILD_ID',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'HUDSON_SERVER_COOKIE',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'JENKINS_COOKIE',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'JENKINS_SERVER_COOKIE',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'HUDSON_COOKIE',value:'DO_NOT_STOP_MY_PROCESS_JENKINS')
ant.env(key:'KARAF_OPTS',value:'${KARAF_OPTS}')
ant.arg(line:'-c "./start ${fuse.start.parameters}"')
}
Nohup 似乎根本没有必要。