如何有条件地build立其他项目?
我有一个相当复杂的Jenkins构build,unit testing和打包一个Web应用程序的工作。 根据情况,一旦这项工作完成,我想做不同的事情。 我还没有find一个可重用/可维护的方式来做到这一点。 这是真的吗?还是我错过了什么?
一旦我的复杂工作完成,我想要的选项有:
-
没做什么
-
开始我的低风险修改构buildpipe道:
- 将我的WAR文件复制到我的工件存储库
- 部署到生产
-
启动我的高风险变更构buildpipe道:
- 将我的WAR文件复制到我的工件存储库
- 部署testing
- 运行验收testing
- 部署到生产
我还没有find一个简单的方法来做到这一点。 最简单但不是很可维护的方法是做三个独立的工作,每个工作都会启动下游的构build。 这种做法让我感到害怕,原因有几个,其中包括必须在三个地方而不是一个地方进行更改的事实。 另外,许多下游工作也几乎完全相同。 唯一的区别是他们所称的下游工作。 就业的激增似乎会导致不可维护的混乱。
我已经看过使用几种方法来保持这一个工作,但没有工作到目前为止:
-
使这个工作成为一个多configuration项目( https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project )。 这提供了一个用参数注入作业的方法。 我还没有find一种方法来使“构build其他项目”步骤响应一个参数。
-
使用参数化触发器插件( https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin )。 这个插件可以让你根据某些触发器触发下游作业。 触发器似乎太限制了。 它们都基于构build的状态,而不是任意的variables。 我没有看到在这里提供的任何选项,将为我的用例工作。
-
使用弹性发布插件( https://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publish+Plugin )。 这个插件与参数化触发器插件有相反的问题。 它有许多有用的条件可以检查,但看起来并不像是可以开始build造另一个项目。 其行为仅限于发布types的活动。
-
使用灵活的发布+任何生成步骤插件( https://wiki.jenkins-ci.org/display/JENKINS/Any+Build+Step+Plugin )。 Any Build Step插件允许将任何构build操作提供给Flexible Publish插件。 一旦这个插件被激活,更多的动作就可以使用,但这些动作并不包括“构build其他项目”。
有没有一个简单的方法来做到这一点? 我很惊讶,我没有find它,甚至更惊讶,我没有看到任何人试图做到这一点? 我在做什么不寻常的事情? 有什么明显的,我失踪了?
如果我理解正确,你应该能够通过以下步骤来做到这一点:
- 第一个构build步骤:
- 经常工作吗? 在你的情况下:build设,unit testing和包装的Web应用程序
- 根据结果,让它创build一个具有特定名称的文件。
- 这意味着,如果您希望低风险更改在之后运行,请创build一个文件low-risk.prop
- 第二个构build步骤:
- 创build一个触发器/调用在其他项目上build立从Parameterized-Trigger插件的步骤。
- 把你的低风险工作的名字引入项目build设领域
- 点击: 添加参数
- select: 来自属性文件的参数
- 将low-risk.propinput到文件 Field中的使用属性
- 启用如果有文件丢失,请勿触发
- 第三构build步骤:
- 检查是否存在低风险.prop文件
- 删除文件
对高风险的工作也一样
现在你应该有以下的安装程序:
- 如果在第一个构build步骤中出现一个名为low-risk.prop的文件,那么低风险工作将开始
- 如果在第一个构build阶段发生一个名为high-risk.prop的文件,那么高风险工作将开始
- 如果没有.prop文件没有任何反应
这就是你想达到的。 不是吗?
你有没有看过Conditional Build Plugin? ( https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin )
我认为它可以做你正在寻找的东西。
如果你想要一个有条件的构build后步骤,那么有一个插件:
https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task
它将在控制台日志中search您指定的RegEx,如果find,将执行一个自定义脚本。 您可以configuration相当复杂的标准,并且可以configuration多组标准,每个标准执行不同的构build后任务。
它不会为您提供通常的“构build步骤”操作,因此您必须在此处编写自己的脚本。 你可以用jenkins支持的标准方式触发不同参数的相同作业的执行,或者带有一些参数的另一个作业(例如使用curl)
另一种select是jenkins文本查找插件:
https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin
这是一个后期构build步骤,如果在控制台文本(甚至是工作区中的某个文件)中find正则expression式,则允许强制将构build标记为“不稳定”。 因此,在您的构build步骤中,根据您的条件,在控制台日志中回传一个唯一行,然后为该行执行RegEx。 然后可以使用“触发器参数化的buid”并将条件设置为“unstable”。 这有一个额外的好处,视觉标记不同的build设(与一个黄色的球),但是你只有一个条件选项与这种方法,从你的OP,看起来像你需要2。
试试这两种方法的组合:
你是否使用Ant来构build?
如果是这样的话,可以在Ant中进行条件构build,方法是使用构build脚本可以用来有条件构build的一组环境variables。 在jenkins,你的构build将构build所有的项目,但是你的实际构build将决定构build还是短路。
我认为这样做的方法是添加一个中间作业,在后期构build步骤中将其传递给下游作业可能需要的所有参数,然后在该作业中为真正的下游作业configuration有条件构build。
我发现最简单的方法是远程触发其他作业,以便您可以使用Conditional Build Plugin或其他插件有条件地构build其他作业。