一尘不染

如何在Jenkins中派生一个后台进程?设置BUILD_ID并使用nohup似乎无效

jenkins

我在詹金斯(1.578版)做过一份精打细算的工作。下面的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下创建类似的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似乎根本不是必需的。


阅读 412

收藏
2020-07-25

共1个答案

一尘不染

如果您在页面中注意到用户’mdp’的注释,则将注意到在使用自由样式模板创建的作业的情况下,BUILD_ID确实起作用。还有许多其他人面临类似的问题。仅当这是一项非自由式工作时,才会看到此类问题。

或者,也应检查取消设置以下变量的设置:HUDSON_COOKIE,HUDSON_SERVER_COOKIE,JENKINS_COOKIE或JENKINS_SERVER_COOKIE,链接很少有人评论(建议部分)。

2020-07-25