Jenkins DSL 插件:如何在现有的 jenkins 视图中创建作业?

Jenkins DSL Plugin: How to create a job in an existing jenkins View?

我发现了以下关于使用 DSL 插件创建工作和添加到新创建的视图的问题。

Adding job to newly created view.

如何使用 DSL 插件将创建的作业添加到现有视图?我在文档中找不到任何提示。也许太明显了,我看不到解决方案?

虽然我读到,如果视图已经存在,创建视图将导致重新创建。对于此视图下的现有项目,这意味着什么?

感谢您的帮助。

您不能将作业添加到不受作业 DSL 管理的视图。但是由 DSL 管理的视图可以包含不由 DSL 管理的作业。

例如,您可以有一个名为 project-a 的作业,它是手动管理的,还有一个名为 project-b 的作业,它是由 DSL 管理的。由 DSL 管理的视图可以包含这两个作业。

job('project-b') {
}

listView('project-view') {
  jobs {
    name('project-a')
    name('project-b')
  }
}

无法使用 Jenkins API 从 DSL 脚本向视图添加作业。作业必须存在才能添加到视图中。但是当脚本被执行时,作业并没有立即创建。所有 DSL 项目都是在脚本处理后创建的。

如果您不想使用 DSL 管理视图(但您应该这样做),您可以尝试使用基于过滤器的视图配置。例如。包括名称与正则表达式匹配的所有作业。或者您可以使用 View Job Filters Plugin 创建更复杂的过滤器。

感谢 daspilker,根据你提供的详细信息,我找到了一个可接受的解决方案。

-> 视图过滤器

要求:View Job Filter PLugin

由于无法将 DSL 创建的作业添加到非 DSL 创建的视图中,因此我设置了两个视图过滤器。

  • 一个正则表达式视图过滤器,用于从默认视图中排除 DSL 创建的作业(如果您不创建 DSL 视图并将作业添加到其中,则会在其中创建作业)- select 默认视图->编辑视图->添加作业过滤器->regexpJobFilter

  • 视图上的一个正则表达式视图过滤器,您要在其中收集 DSL 创建的作业。

目前,这工作正常。我在手动管理的视图中创建了 DSL 作业。

但正如 daspilker 所说:

If you do not want the manage the view with the DSL (but you should)

也许经验表明,我必须切换到 DSL 托管视图。

我刚刚找到了一个非常简单的解决方法来解决这个问题——尽管我们应该记住@daspilker 的回答显示了管理作业和视图的正确方法。只是当时对我来说太复杂了(或者太懒了)。

解决方法:

  • 删除由您的 DSL 生成的作业
  • 从 DSL
  • 复制(或记住)生成的作业的 确切 名称
  • 转到您希望新作业所在的视图
  • 创建一个新的空作业,其名称与从 DSL 生成的新作业相同
  • 在保存新的空作业时选中添加到当前视图
  • 运行 DSL 脚本,它将使用正确的内容更新您现有的(空的)作业,同时将其保留在所需的视图中。

我刚刚想到这个解决方案,同时记得我曾经通过 运行 具有相同目标名称的 DSL 作业从视图中删除(覆盖)现有作业,但至少它保留在原始位置查看 :)