繁体   English   中英

Jenkins Build管道和并行作业的问题

[英]Problems with Jenkins Build pipeline and parallel jobs

背景

我将Jenkins与Build Pipeline插件一起使用来构建一些相当复杂的项目,这些项目需要多个编译步骤:

  1. 构建源RPM。
  2. 构建二进制RPM(此操作执行两次,每个平台执行一次)。
  3. 部署到YUM存储库。

我解决构建要求的策略包括将普通工作分成参数化的工作,这些工作可以在项目和分支之间重复使用,每个工作代表管道中的一个阶段。 每个阶段都由参数触发,并生成工件传递到管道中的下一个作业。 但是,我在使用此策略时遇到了麻烦,确实可以使用一些技巧来尽可能以最优雅,最灵活的方式解决此问题。

更具体地说,有两个公共库,它们由其他项目(但不是所有项目)共享。 库的构建与从属项目不同,但是不必在詹金斯中指定什么是从属项目。

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

我们每个月都会创建多个存储库,虽然可以期望为新项目进行一些设置,但总的来说,我们希望它尽可能简单和自动化。

问题所在

  1. 我有许多具有多个分支的项目,并且我不希望以相同的方式构建所有分支甚至所有项目。 因为大多数构建步骤都是相似的,所以我可以将这些通用步骤转换为参数化的构建作业,并让每个作业触发链中的下一个,沿着链传递参数和构建工件。 但是,如果需要跳过其中一个步骤,这会分崩离析,因为我不知道有条件地跳过构建步骤的方法。 这意味着我将需要复制构建作业,以便可以为每个管道自定义它们,从而导致大量的构建作业。 我可以使用插件的组合来创建作业生成器(例如dsl流,dsl作业等),并向用户尽可能多地隐藏,但是最完美的Jenkins解决方案是什么? 有没有我可能错过的插件或示例? 您的经验是什么?

  2. 由于步骤2可以分为两个可以并行运行的作业,因此引入了复杂性,这使我的管道出现问题。 我的第一次尝试将使用不同的参数触发两次参数化的构建作业,然后再使用join插件将其加入作业,但是从两个上游作业中复制构建工件看起来似乎很复杂。 这很重要,因为在阶段3中,我需要这两个作业都需要构建构件。什么是结合并行作业并从所有作业中复制构件的最佳解决方案? 有没有我可能会错过的例子?

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

我很高兴阅读文章,演示文稿,技术文章,参考文档,编写脚本以及使它正常运行所需的其他任何东西,但我不是詹金斯专家。 如果有人可以针对这3个问题给我一些建议,那将有所帮助。 此外,如果有相关的建议,我将对如何在Jenkins中充分利用管道CI的建设性建议表示赞赏。

对于第一点,我编写的Job Generator插件已经开发出来,可以解决这种用例。 您可以在Job Generator的Wiki页面上找到更多信息。 还有一种具有不同方法(工作生成器作为构建步骤)的相同类型的插件,称为Jobcopy Builder 您提到的其他方法需要某种DSL,也可能是不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM