当前位置: 首页 > 知识库问答 >
问题:

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

司空鸣
2023-03-14

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

完成复杂的工作后,我希望拥有的选项:

>

  • 什么都不做

    启动我的低风险变更构建管道:

      < li >将我的WAR文件复制到我的工件库 < li >部署到生产环境中

    启动我的高风险变更构建管道:

    • 将我的WAR文件复制到我的工件存储库。
    • 部署到测试
    • 运行验收测试
    • 部署到生产环境

    我还没有找到一个简单的方法来做到这一点。最简单但不太可维护的方法是制作三个单独的作业,每个作业都启动了下游构建。这种方法让我感到恐惧有几个原因,包括必须在三个地方而不是一个地方进行更改。此外,许多下游作业也几乎相同。唯一的区别是他们调用了哪些下游作业。工作的激增似乎会导致无法维持的混乱。

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

    >

  • 使作业成为多配置项目(https://wiki.jenkins-ci.org/display/JENKINS/Building矩阵项目)。这提供了一种向作业注入参数的方法。我还没有找到让“构建其他项目”步骤响应参数的方法。

    使用参数化触发器插件(https://wiki.jenkins-ci.org/display/JENKINS/Parameterized触发插件)。此插件允许您基于某些触发器触发下游作业。不过,触发条件似乎过于严格。它们都基于构建的状态,而不是任意变量。我看不到这里提供的任何选项适用于我的用例。

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

    使用灵活发布任何构建步骤插件(https://wiki.jenkins-ci.org/display/JENKINS/Any 构建步骤插件)。“任何构建步骤”插件允许将任何构建操作提供给“灵活发布”插件。虽然激活此插件后会提供更多操作,但这些操作不包括“构建其他项目”。

    真的没有简单的方法来做到这一点吗?我很惊讶我没有发现它,更惊讶的是我没有真正看到任何其他人试图这样做?我做了什么不寻常的事吗?我是不是遗漏了什么明显的东西?

  • 共有3个答案

    高钱青
    2023-03-14

    如果您需要有条件的后期构建步骤,有一个插件:
    https://wiki.jenkins-ci.org/display/JENKINS/Post构建任务

    它将在控制台日志中搜索您指定的RegEx,如果找到,将执行自定义脚本。您可以配置相当复杂的条件,并且可以配置多组条件,每组条件都执行不同的构建后任务。

    它没有为您提供通常的“构建步骤”操作,所以您必须在那里编写自己的脚本。您可以用jenkins支持的标准方式(例如使用curl)用不同的参数触发同一个作业的执行,或者用一些参数触发另一个作业的执行

    还有一个选择是詹金斯文本查找插件:< br > https://wiki.jenkins-ci.org/display/JENKINS/Text-finder插件

    这是一个构建后步骤,如果在控制台文本(甚至工作区中的某个文件)中发现了正则表达式,它允许将构建强制标记为“不稳定”。因此,在您的构建步骤中,根据您的条件,将一个唯一的行回显到控制台日志中,然后对该行执行正则表达式。然后您可以使用“触发参数化buid”并将条件设置为“不稳定”。这还有一个额外的好处,即在视觉上标记构建不同(使用黄色球),但是使用此方法您只有一个条件选项,从您的OP来看,您似乎需要2个。

    尝试这两种方法的组合:

    欧阳昊焱
    2023-03-14

    你看过条件构建插件吗?(https://wiki.jenkins.io/display/JENKINS/Conditional build step插件)

    我认为它能做你正在寻找的。

    秦涵涤
    2023-03-14

    如果我理解正确,你应该能够通过以下步骤做到这一点:

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

      对高风险的工作也一样

      现在,您应该具有以下设置:

        < li >如果在第一个构建步骤中出现名为low-risk.prop的文件,将启动低风险作业 < li >如果在第一个构建步骤中出现名为high-risk.prop的文件,将启动高风险作业 < li >如果没有。prop文件无任何反应

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

     类似资料:
    • 问题内容: 假设有人给您一个类,具有以下构造函数: 假设您要创建一个子类。您如何有条件地在中调用构造函数? 换句话说,进行这种工作的“正确”方法是什么? 问题答案: 是的,@ JohanSjöberg说了什么。 看起来您的示例也非常人为。没有神奇的答案可以解决这个问题:) 通常,如果您有一堆构造函数,则最好将它们重构为四个单独的类(一个类仅应负责一种类型的事情)。

    • 您好,我有一个名为a的项目,包含三个模块(核心、移动网络),结构如下: My settings.gradle类似于: 现在已经有了不同的版本,在版本2.0之前,我们提供移动模块,在此之前,我们不想构建“移动”模块。现在我有了1.0、1.1、1.2、2.0、2.1版本,我们在每次提交代码之前测试和检查编译。我们是这样做的: 这样,在2.0之前的版本中,它仍然会构建“移动”模块,这当然会失败。我的问题

    • 我知道不是一个有效的阶段,但我只是想说明我试图完成什么,即只有在提供选项时才构建fat jar的条件安装。

    • 问题内容: 首先,我要说我是Ant的新手。就像之前一样,我只是在两天前才开始学习它以完成此任务。 我想要做的是创建一个“ master”蚂蚁脚本,该脚本调用其他几个蚂蚁脚本。例如: 现在,我拥有用于​​A,B和C的所有单独版本。通过这个,我的意思是我可以从这些文件夹中的任何一个运行“ ant”,它将构建项目并生成一个jar文件。如果以这种方式构建A,B和C,则我有3个jar文件。然后,我可以将它们

    • 我有一个问题,我必须做一个查询,根据产品上是否有图像,我必须在列中显示“是”或“否”的值。我必须加入product表这是安全的,但我如何在查询中判断“image presence”字段是否为空,写“no”,否则写“yes”。我希望我已经解释过了。谢谢大家。

    • 在dataframe中,如何有条件地将一列的值填充为列表中另一列的值? 这与这个SO问题非常相似,但当我申请时: 我得到一个错误: 我想中的