如何在 Jenkins 中 fork 一个后台进程?设置 BUILD_ID 并使用 nohup 似乎不起作用

2023-12-14

我在 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 似乎根本没有必要。


如果您注意到用户“mdp”的评论this页面上,您会注意到,对于使用自由式模板创建的作业,BUILD_ID 确实有效。还有许多其他人面临类似的问题。这些问题只有在非自由式工作时才会出现。

或者,还应该检查取消设置以下变量:HUDSON_COOKIE、HUDSON_SERVER_COOKIE、JENKINS_COOKIE 或 JENKINS_SERVER_COOKIE,如少数人(评论部分)所建议的那样this link.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jenkins 中 fork 一个后台进程?设置 BUILD_ID 并使用 nohup 似乎不起作用 的相关文章

随机推荐