如果当前未完成,如何触发另一个Jenkins构建

时间:2016-06-07 13:48:38

标签: jenkins

我有一个Jenkins构建,第一部分将在localhost上启动一个Web服务器,构建到达应用程序服务点

Running "connect:server_jenkins" (connect) task
Waiting forever...
Started connect web server on http://localhost:3000

我的问题是,在此之后,我无法做任何其他事情,我不会运行其他shell命令,直到此进程具有我相信的退出代码。在这一点上,我甚至会愉快地触发另一个构建。

这样做的目的是应用程序得到设置,然后我运行了功能测试(黄瓜)。

有人有任何关于接近这个的建议吗?

由于

1 个答案:

答案 0 :(得分:1)

异步生成新进程取决于您的OS / Shell:

MS TechNet, Command-Line Reference, Start

  

启动单独的命令提示符窗口以运行指定的程序或命令。

Bash Reference Manual, 3.2.5 Coprocesses

  

coprocess是一个以coproc保留字开头的shell命令。协同进程在子shell中异步执行,就好像命令已使用'&'控制运算符终止,...

另请参阅How do you use the command coproc in Bash?,其中包含其广为接受的答案。

要防止Jenkins在作业完成时终止所有进程,请参阅Use Jenkins > ProcessTreeKiller

  

为了可靠地终止在构建期间由作业生成的进程,Jenkins包含一些本机代码来列出这些进程并将其终止。

     

...

     

如果你的构建想让守护进程落后......

     

...更改Jenkins的ProcessTreeKiller正在寻找的环境变量BUILD_ID。这将导致Jenkins假设你的守护进程不是由Jenkins构建产生的。

BUILD_ID=dontKillMe

我在 构建 步骤→ 执行Windows批处理命令 命令<中尝试了以下操作/ EM>:

start ..\..\jobs\<job's name>\endless.cmd

(相对路径取决于管理Jenkins 配置系统 高级... 工作区根目录,我使用${JENKINS_HOME}/workspace/${ITEM_FULLNAME}

endless.cmd包含:

set BUILD_ID=dontKillMe

ping -t localhost

它起作用了:

  • 构建成功完成
  • 两个进程cmd.exeping.exe,继续运行

由于您在生成异步进程后立即继续构建,因此您可能需要等待一段时间,或者在真正继续之前检查文件是否已存在等。