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

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

龚威
2023-03-14

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

  1. 构建源RPM。
  2. 构建二进制RPM(这是执行两次,一次为每个平台)。
  3. 部署到YUM仓库。

我解决构建需求的策略包括将公共工作拆分为参数化作业,这些作业可以跨项目和分支重用,每个作业代表管道中的一个阶段。每个阶段都由参数触发,并将构建工件传递给管道中的下一个作业。然而,我在这个策略上遇到了一些麻烦,我真的可以使用一些关于如何以最优雅和灵活的方式解决这个问题的技巧。

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

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

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

>

  • 我有许多具有多个分支的项目,我不希望以相同的方式构建所有分支甚至所有项目。因为大多数构建步骤是相似的,所以我可以将这些常见步骤转化为参数化的构建作业,并让每个作业触发链中的下一个,沿着链传递参数和构建工件。但是,如果需要跳过其中一个步骤,这就会失败,因为我不知道有条件地跳过构建步骤的方法。这意味着我需要复制构建作业,以便我可以为每个管道定制它们,从而产生大量的构建作业。我可以使用插件的组合来创建一个作业生成器(例如。dsl流,dsl作业等),并尽可能地隐藏用户,但是对此最优雅的詹金斯解决方案是什么?是否有任何插件,或我可能错过的例子?你做这件事有什么经验?

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

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

    我很乐意阅读文章、演示文稿、技术文章、参考留档、编写脚本和任何其他必要的东西来使这项工作顺利进行,但我不是詹金斯专家。如果有人能就这三个问题给我一些建议,那将是有帮助的。此外,如果相关的话,我将感谢任何关于如何从詹金斯的管道CI构建中获得最佳效果的建设性建议。

  • 共有1个答案

    蒋默
    2023-03-14

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

     类似资料:
    • 我目前使用的是Build Flow插件,在Jenkins 2.0中,这个插件似乎已经被放弃,转而支持管道。 在使用新管道重建现有工作时遇到了一些问题。 目前,我有类似这样的代码: 此处的目标是并行运行多个现有作业,然后访问有关已完成的生成的信息。这在构建流插件中一直没有问题。 我无法找到使用新管道访问这些数据的方法。 join['Job1']的转储不会像构建流插件那样提供对抽象构建或类似内容的访问

    • 我有一个Jenkins管道作业,它需要监控另一个Jerkins作业(比如JobA)当前构建,并在当前管道阶段发布状态(构建状态:成功或失败)。如何实现这一点。不会从管道作业触发作业(JobA)。它将独立运行。从管道作业中,需要获取作业A的状态。

    • 我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline

    • 我目前正在使用全局构建统计插件,显示我们的工作状态在一个良好的格式图表。

    • 如果作业使用构建流(包括重复作业)运行,构建管道插件是否仍然正确显示作业序列? 以下是构建流程的伪代码: 包将从源代码控制中提取代码,编译它,并将其存储为工件 部署将从上游Package作业复制工件,然后将其复制到目标参数中提供的URL 集成测试将针对参数中提供的URL运行一套集成测试。 即使部署作业重复,构建管道插件是否将此管道显示为4个步骤?

    • 问题内容: 我想在管道作业中使用EnvInject插件。因此,我可以设置复选框“为运行准备一个环境”,但是 没有动作“注入环境变量”,就像在自由式作业中一样。我在“属性内容”块中声明了变量:在此处输入图片说明 如何使用EnvInject在管道作业中注​​入环境变量? 问题答案: 如果在“属性内容”块中声明了以下变量: 然后,您可以将它们放入管道中,以便: