当前位置: 首页 > 面试题库 >

一个种子作业可以处理来自多个存储库的DSL吗?

郤瀚
2023-03-14
问题内容

我最近设法将几个手动创建的作业转换为DSL脚本(内联为临时的“种子”作业),并且感到惊讶的是它如此简单。现在,我想摆脱 多个
种子工作,并尝试更整洁地构建事物。

为此,我创建了一个新的存储jenkins-ci库,并将所有Groovy DSL脚本提交给它。然后,我创建了一个job- generatorJenkins作业,该作业从存储jenkins-ci库中提取,并且只有一个 Process Job DSLs 步骤。此步骤已选中
“在文件系统查找” 框,“ DSL脚本”
字段设置为jobs/*.groovy。有了全局推送通知后,此操作或多或少地达到了预期的效果:如果我对存储库进行了更改jenkins- ci,该job-generator作业将自动运行并重新生成所有作业,真棒!

我对该解决方案不满意的是,它的参考位置很差:作业的DSL脚本位于与代码完全独立的存储库中。我倒是 真的很
喜欢,是保持工作DSL脚本中的每个单独的代码库,在一个jenkins子文件夹,有一个 单一的
种子作业过程中他们所有。这样,就可以在代码旁边同时检查对CI设置的更改。对我来说,这就像是一个 理想的 设置。

不幸的是,我对如何实现这一目标尚无明确的想法。如果我能找到一种方法来使种子作业监视多个存储库,以便对其中任何一个的提交都会触发它,也许我可以在“
处理作业DSL” 步骤之前注入另一个构建步骤,并(以某种方式)编写脚本胜利,但是…我不确定如何甚至 得到
这一点。(我当然不想只生成DSL脚本就对生成器作业中的每个仓库进行 完整的 克隆!)

我怀疑我不是第一个希望他们可以将Job DSL脚本与代码放在一起的人,尽管也许我高估了收益。感谢您提供有关该主题的任何建议!


问题答案:

不幸的是,没有直接的方法可以解决这个问题。一些功能要求已开通(JENKINS-33275,JENKINS-37220),但据我所知没有一个人正在其中任何一个。

解决方法是,您可以使用管道多分支插件,并为每个存储库创建一个多分支项目。然后,您必须Jenkinsfile向每个存储库/分支添加一个简单文件,并使用Jenkinsfile来执行Job
DSL脚本。有关详细信息,请参见在管道脚本中使用作业DSL。这将需要最少的编码,但是我认为必须克隆每个存储库才能正常工作,因为Job
DSL文件必须在文件系统上可用。

您可以使用Job
DSL创建多分支作业,请参阅API查看器中的multibranchPipelineJob。这将是您的“根”种子工作。

如果您的存储库托管在GitHub上,则还可以签出GitHub Organization Folder
Plugin。使用该插件,您只需要为每个组织创建一个工作,而不是多个多分支工作。



 类似资料:
  • 我已经开始探索Spring Batch,并遇到了一些基本问题。

  • 我对Spring Data JPA不太感兴趣,在Spring Boot项目中我遇到了以下问题。 对于如何正确处理这种情况,我有以下架构上的疑问: 我有一个由这样的接口实现的存储库,我在其中定义了我的“查询方法”: 如您所见,我正在扩展Crudepository接口,并指定了一个名为**Country*的模型类,映射数据库中的特定表。 我添加了第二个方法,用于映射不同的数据库表的另一个实体类(Blo

  • 我们正试图建立关于如何在大型IT服务中使用Spring Batch的标准,并具有不同的商业利益。 我们可能会有几个属于不同业务领域的批次。我们已经知道其中一些必须从所有批次通用的表中获取一些参数(即Java和COBOL;例如日期参数)。 我们将实现的Spring批处理作业的数量很难评估。没有重写现有COBOL批次的目标,只要有可能,就鼓励连续流程处理。 一些关于概念证明的问题不时出现,但目前几乎没

  • 我有一个管道(jenkins)工作,它使用多个存储库。 存储库是这样签出的: 现在,我想在对任何存储库进行提交时触发该作业。如何配置?

  • 我想使用一个存储库从不同的表中选择实体。我使用Spring Data JPA,并有自己的查询方法: 第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码。 接下来我有两个子类EntityOne和EntityTwo。它们的字段(列)与BaseEntity相同,但它们必须在不同的表中。 我尝试过为BaseEntity使用@Mep dSuperclass注释。但它不起作用,我有一个例外

  • 我正在创建一个由groovy bean builder支持的spring批处理(spring boot)。但是,我无法找到以下xml结构的正确语法: 更新:豆子。棒极了 我想使用选项1技术,如果我这样做,我会得到“beanName must not empty”错误。我没有使用选项2中的bean,而是它们似乎在工作。 我假设使用选项1,将使用其他定义的bean自动配置jobRepository等。