如何有条件地建立其他项目?

xni*_*kmx 48 jenkins

我有一个相当复杂的Jenkins工作,它构建,单元测试和打包Web应用程序.根据具体情况,一旦这项工作完成,我想做不同的事情.我没有找到可重用/可维护的方法来做到这一点.是真的如此,还是我错过了什么?

我复杂的工作完成后我想要的选项:

  1. 没做什么

  2. 启动我的低风险更改构建管道:

    • 将我的WAR文件复制到我的工件库
    • 部署到生产
  3. 启动我的高风险更改构建管道:

    • 将我的WAR文件复制到我的工件库
    • 部署测试
    • 进行验收测试
    • 部署到生产

我还没有找到一个简单的方法来做到这一点.最简单但不易维护的方法是制作三个独立的工作,每个工作都会启动下游构建.这种方法让我害怕有几个原因,包括必须在三个地方而不是一个地方进行变更.此外,许多下游工作也几乎相同.唯一的区别是他们称之为下游工作.工作的激增似乎会导致无法维持的混乱局面.

我已经考虑过使用几种方法将其作为一项工作,但到目前为止还没有工作:

  1. 使工作成为一个多配置项目(https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project).这提供了一种使用参数注入作业的方法.我还没有找到一种方法让"构建其他项目"步骤响应参数.

  2. 使用Parameterized-Trigger插件(https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin).此插件允许您根据特定触发器触发下游作业.但是触发器似乎限制性太强.它们都是基于构建的状态,而不是任意变量.我没有看到这里提供的任何选项适用于我的用例.

  3. 使用Flexible Publish插件(https://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publish+Plugin).这个插件与参数化触发器插件有相反的问题.它有许多有用的条件可以检查,但它看起来不像它可以开始构建另一个项目.它的行动仅限于发布类型的活动.

  4. 使用Flexible Publish + Any Build Step插件(https://wiki.jenkins-ci.org/display/JENKINS/Any+Build+Step+Plugin).Any Build Step插件允许任何构建操作可用于Flexible Publish插件.虽然此插件激活后可以使用更多操作,但这些操作不包括"构建其他项目".

真的没有一个简单的方法吗?我很惊讶我没有找到它,甚至更惊讶我没有真正看到任何其他人试图这样做?我做的事情不寻常吗?有什么明显的东西让我失踪吗?

jad*_*tom 30

如果我理解正确,您应该可以通过以下步骤来执行此操作:

  1. 第一个构建步骤:
    1. 经常工作吗?在您的情况下:Web应用程序的构建,单元测试和打包
    2. 根据结果​​,让它创建一个具有特定名称的文件.
    3. 这意味着如果您希望之后运行低风险更改,请创建低风险文件.prop
  2. 第二个构建步骤:
    1. 在其他项目上创建触发/调用构建从Parameterized-Trigger插件开始.
    2. 将您的低风险工作的名称输入到要构建项目字段中
    3. 单击:添加参数
    4. 选择:属性文件中的参数
    5. 在文件字段的使用属性中输入low-risk.prop
    6. 启用如果缺少任何文件,请不要触发
  3. 第三个构建步骤:
    1. 检查是否存在low-risk.prop文件
    2. 删除文件

为高风险工作做同样的事情

现在您应该进行以下设置:

  • 如果在第一个构建步骤期间发生名为low-risk.prop的文件,则将启动低风险作业
  • 如果在第一个构建步骤期间发生名为high-risk.prop的文件,则将启动高风险作业
  • 如果没有.prop文件没有任何反应

这就是你想要实现的目标.不是吗?


Den*_* S. 6

你看过Conditional Build Plugin了吗?(https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin)

我认为它可以做你想要的.

  • 我应该把它添加到我的原始列表中.不,这个插件也不起作用.此插件只能执行条件构建步骤,而不能执行有条件的构建后步骤. (6认同)

Moh*_*uur 1

您的构建使用 Ant 吗?

如果是这样,则可以通过构建脚本可用于有条件构建的一组环境变量来在 ant 中进行有条件构建。在 Jenkins 中,您的构建将构建所有项目,但您的实际构建将决定它是构建还是只是短路。