当前位置: 首页 > 面试题库 >

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

卢涵畅
2023-03-14
问题内容

我在詹金斯(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似乎根本不是必需的。


问题答案:

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

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



 类似资料:
  • 问题内容: 我正在尝试使用下面的nohup命令使用光纤启动celerycam进程。不幸的是,什么也没有发生,手动使用相同的命令可以启动该过程,但不能通过结构。关于如何解决这个问题的任何建议? 问题答案: 我正在使用Erich Heine的建议使用“ dtach”,并且对我来说效果很好: 这是在这里找到的。

  • 如何在java中调用ProcessBuilder运行nohup...&格式的bash命令? 我现在有一个简单的bash脚本t.sh。这个脚本维护一个计数器,每过1s,该计数器会+1,并且将当前该计数器的值输出到标准输出上。 我可以直接使用nohup bash t.sh & 来在linux环境下运行该脚本,该脚本会在nohup.out中输出下面的预期结果 现在,我想要在Java中通过ProcessB

  • 问题内容: 我正在尝试创建一个Jenkins作业,该作业将重新启动始终在我们的一台服务器上运行的程序。 我指定以下作为要运行的命令: 脚本“工具”包含如下一行: 该命令的输出在我的构建控制台中而不是在nohup.out中结束,因此该作业永远不会终止,除非我手动终止它,这会终止程序。 如何使nohup的行为与从终端执行的行为相同? 问题答案: 如果我对问题的理解正确,则Jenkins将在构建结束时终

  • 我是android编程的新手。我想创建一个计时器程序,可以通过独立定义数据来设置时间。 例如,我可以设置5秒启动,10秒停止第三方程序,该程序像这样切换时间,直到电池减少到指定的值(假设100%到90%),然后计时器将停止在90%。 此外,我还想收集调用start和stop的日志数据。例如,在上午9点开始5秒,然后在上午9点06分至9点15分停止,然后在上午9点15分至9点20分开始,并收集每个级

  • 问题内容: 我们有一个通常从Eclipse运行的测试套件。我们最近已经开始尝试获得更好的开发环境的过程。为此,我们已开始在加利福尼亚州建立我们的项目。如果在构建过程中可以运行测试套件,我们也希望这样做。为此,我认为我们需要一种从命令行执行测试套件的方法,以便我们可以将其集成并解析其输出。 我们如何设置以运行测试? 问题答案: 您可以在构建过程中创建一个ant任务,然后让Jenkins运行该任务 这

  • 我对线程非常陌生,在代码中使用线程时,我面临以下问题。 点击一个按钮,我就启动了一个运行特定任务的线程,这个任务在系统的后台运行。我在线程中使用了一个while循环来检查一个易失性bool是否被另一个按钮点击来停止整个过程而改变。问题是我必须添加一个空循环,否则它看起来就像线程停止自己,不再检查while条件。我认为这是非常低效的,浪费了很多资源。 我添加了一个简短的代码版本,以减少不可读性。 你