Jenkins构建管道和并行作业的问题

时间:2013-04-22 16:35:46

标签: jenkins

背景

我正在使用Jenkins和Build Pipeline插件来构建一些需要多个编译步骤的相当复杂的项目:

  1. 构建源RPM。
  2. 构建二进制RPM(执行两次,每个平台执行一次)。
  3. 部署到YUM存储库。
  4. 我解决构建需求的策略涉及将公共工作拆分为可以跨项目和分支重用的参数化作业,每个作业代表管道中的一个阶段。每个阶段都由参数触发,构建工件传递给管道中的下一个作业。但是,我在使用这个策略时遇到了一些麻烦,并且可以使用一些技巧来解决如何以最优雅和最灵活的方式解决这个问题。

    更具体地说,有两个公共库,由其他项目共享(但不是所有项目)。这些库的构建方式与依赖项目不同,但不必在Jenkins中指定依赖项目的内容。

    有多个分支,主分支(每晚重建),开发分支(轮询更改),功能分支(也轮询)和发布分支(轮询,但为发布而构建)。分支在多个项目中以相同的方式构建。

    我们每月创建多个存储库,虽然可以期望为新项目进行一些设置,但我们通常希望这样做尽可能简单和自动化。

    问题

    1. 我有很多拥有多个分支的项目,我不希望以同样的方式构建所有分支甚至所有项目。因为大多数构建步骤都是类似的,所以我可以将这些常见步骤转换为参数化构建作业,并让每个作业触发链中的下一个,传递参数并在链中构建工件。但是,如果需要跳过其中一个步骤,则会崩溃,因为我不知道有条件地跳过构建步骤的方法。这意味着我需要复制构建作业,以便我可以为每个管道自定义它们,从而产生大量的构建作业。我可以使用插件的组合来创建作业生成器(例如,dsl flow,dsl job等),并尽可能地隐藏用户,但是最优雅的Jenkins解决方案是什么?有没有插件,或者我可能错过的例子?你这样做的经历是什么?

    2. 因为第2步可以分成两个可以并行运行的作业,这会带来一个复杂性,导致我的管道出现问题。我的第一次尝试将使用不同的参数触发参数化构建作业两次,然后使用join插件加入作业,但是开始看起来复制从两个上游作业的构建工件中会很复杂。这很重要,因为我需要来自第3阶段两个作业的构建工件。加入并行作业和从中复制工件的最优雅解决方案是什么?有没有我可能错过的例子?

    3. 我需要合并第2阶段中两个作业生成的测试结果,并将它们复制到触发构建的作业。处理这个问题的最佳方法是什么?

    4. 我很高兴阅读文章,演示文稿,技术文章,参考文档,编写脚本以及其他任何必要的工作,但我不是Jenkins的专家。如果有人能就这三个问题给我一些建议,那将会有所帮助。此外,如果相关,我将非常感谢如何在Jenkins中获得最佳的管道CI构建。

1 个答案:

答案 0 :(得分:1)

首先,我编写的Job Generator插件是为了解决这个用例而开发的。您可以找到更多信息on the wiki page of Job Generator。 还有相同类型的插件具有不同的方法(作业生成器作为构建步骤),它被称为Jobcopy Builder。 你提到的其他方法需要某种DSL,也是一个很好的选择。