Jenkins 我如何在詹金斯组织参数化作业的变体构建?

Jenkins 我如何在詹金斯组织参数化作业的变体构建?,jenkins,Jenkins,我有一个参数化作业,它有一个名称、一个SVN存储库和一个共享目录。我需要用大约20组这些参数定期给这个工作打电话。目前,我刚刚创造了20个职位,每个职位都称为主要职位 这是一个非常乏味的配置,并且扰乱了Jenkins中的主视图 有没有更好的可能性来解决这个问题?我愿意重组工作或使用插件“隐藏”它们 有关作业的更多详细信息: 我实际上有两种主要工作: 送货工作。我们将应用程序部署到大约20个不同的共享目录。这些作业配置为每晚运行一次。(定期触发构建) 计算工作。这一个基于svn存储库计算数据,

我有一个参数化作业,它有一个名称、一个SVN存储库和一个共享目录。我需要用大约20组这些参数定期给这个工作打电话。目前,我刚刚创造了20个职位,每个职位都称为主要职位

这是一个非常乏味的配置,并且扰乱了Jenkins中的主视图

有没有更好的可能性来解决这个问题?我愿意重组工作或使用插件“隐藏”它们


有关作业的更多详细信息: 我实际上有两种主要工作:

  • 送货工作。我们将应用程序部署到大约20个不同的共享目录。这些作业配置为每晚运行一次。(定期触发构建)
  • 计算工作。这一个基于svn存储库计算数据,并将其存储在共享目录中。这些作业配置为每15分钟运行一次
  • 这些作业可以而且应该并行运行
我需要/想要的:

  • 有时,开发人员需要手动启动一个(或两个)配置
  • 类似矩阵配置插件的东西可以解决我的问题。如果有可能以某种方式将我的参数设置为一个轴,我会很高兴
  • Multijob将是解决我问题的另一个近在咫尺的解决方案,不幸的是,这个“bug”阻碍了我:

不允许发表评论,但@russic Mind,听起来你一开始只想做一份适合所有人的工作,现在就失败了。当你有大约20种不同的设置时,试着找到一个更大的公共基础或将它们完全分开

还有,我们也有这样的工作。。。。旧的shell脚本垃圾,我的一位同事围绕它构建了一个多作业管道,可以并行运行。在多作业阶段下,可以将作业执行设置为并行


但是要小心,如果它包含bower之类的构建工具,你就不能轻易地擦除缓存,因为它们共享一个缓存。

你可以使用管道插件并编写groovy代码来实现这一点。您可以添加一组复选框输入参数,每一组参数对应一个,然后使用该组参数有条件地执行另一个作业


此示例按顺序运行,但您也可以。

您正在进行部署吗?:)只是你在运行这20种组合吗?您是否可以创建1到20个bash函数(取决于有多少个参数有意义),通过API触发(一个)主要jenkins作业?还应该触发哪些不同的作业?它们是手动运行、cron等吗?我添加了一些附加信息@burnettk这可能会起作用,我担心这会将配置埋在作业的深处,很难调用一个特定的配置。@Morfic构建是直接从jenkins触发的:触发周期取决于您能做什么或不能做什么,想到的最简单的想法是保持当前配置,但只显示主作业。或者,您可以将所有作业替换为一个(或类似的管道),为每个当前作业创建一个阶段。不幸的是,我没有看到执行单个阶段的方法。。。请看一看,如果您发现这些方法有任何问题,请告诉我们。主作业有大约100行bash脚本和多个下游作业。这是常见的部分。这20个作业之间的差异有三个字符串:“name”、“svnRepo”、“path”。我不明白我怎么能把其中的一条线移到主工作中去。完全拆分它们会复制很多配置,而且似乎不可行。在你的后半段,你是说多任务插件吗?是的,我是说。好吧,这真的没什么区别。也许UltiJob插件有帮助。我们还使用不同的参数多次调用另一个作业。我对此解决方案有一些顾虑:1)我将作业的配置埋藏在管道的深处,这将很难理解/维护2)参数和“if”只是松散耦合的,检测错误将变得困难3)识别失败的作业变得困难4)重新启动失败的阶段变得不容易(此时我只需要按下重建按钮)5)处理错误将变得笨拙(尝试/抓住每个阶段):阶段1不应停止阶段2;使用matrix配置插件会更好,但是管道没有任何意义……我理解#1,它的代码,你必须深入到配置中,尽管你可以重构,使所有作业在对象列表中声明在最上面,丑陋的东西在错误处理的循环中。我不知道为什么很难识别失败的作业,因为每个阶段的状态和日志输出都清楚地显示出来。至于#4,您可以在每个阶段之前使用
检查点
,这允许您通过单击按钮再次运行特定阶段。。。不幸的是,它似乎是。我不知道事实上,你可以有平行的阶段。仍然无法在某个特定阶段启动管道是一个令人沮丧的问题
node: {
   stage ('set1') {
      if(env.build_set1) {
         build job: 'main_job', parameters: [[$class: 'StringParameterValue', name: 'name', value: 'Name1'], [$class: 'StringParameterValue', name: 'directory', value: 'dir1']]
      }
   }

   stage ('set2') {
      if(env.build_set2) {
         build job: 'main_job', parameters: [[$class: 'StringParameterValue', name: 'name', value: 'Name2'], [$class: 'StringParameterValue', name: 'directory', value: 'dir2']]
      }
   }
}