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

标签 maven ant groovy jenkins

我在 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 中少数人(评论部分)所建议的那样链接。

关于maven - 如何在 Jenkins 中创建一个后台进程?设置 BUILD_ID 并使用 nohup 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639678/

相关文章:

java - Maven项目错误: Diamond/multicatch operator not supported in -source 1. 5

Java Ant错误: ClassNotFoundException

gradle - geb-gradle-saucelabs集成的驱动程序错误

groovy - 如何生成源文件并用gradle编译

java - Maven H2 Lucene 类未找到

java - 如何在 Eclipse 中添加 Maven 依赖项?

java - 如何在 clojure 中导入本地 java 库? (莱恩)

java - 在 Eclipse 和命令行中运行 javac ant 时的类文件大小差异

java - 是否可以调试外部 Ant 任务?

Grails:创建不想存储在数据库中的类