Build Jenkins jobs中的作业继承

Build Jenkins jobs中的作业继承,build,jenkins,continuous-integration,quickbuild,Build,Jenkins,Continuous Integration,Quickbuild,您如何处理Jenkins作业到构建过程的映射,以及您是否能够在继承上构建级联配置 对于任何给定的构建,我将至少有三项工作(标准的连续集成/夜间、安全扫描、覆盖),然后是一些下游集成测试工作。配置切片器插件处理跨作业的某些方面,但每个作业在很大程度上仍然是自己的个体实体,与组中的其他作业没有关系 我最近看到了QuickBuild,它有作业继承,父作业可以定义一组标准步骤,子作业可以重写和专门化。和詹金斯在一起,我有工作的复印件,在我需要改变一些东西之前,这是很好的。通过QuickBuild,工作之

您如何处理Jenkins作业到构建过程的映射,以及您是否能够在继承上构建级联配置

对于任何给定的构建,我将至少有三项工作(标准的连续集成/夜间、安全扫描、覆盖),然后是一些下游集成测试工作。配置切片器插件处理跨作业的某些方面,但每个作业在很大程度上仍然是自己的个体实体,与组中的其他作业没有关系

我最近看到了QuickBuild,它有作业继承,父作业可以定义一组标准步骤,子作业可以重写和专门化。和詹金斯在一起,我有工作的复印件,在我需要改变一些东西之前,这是很好的。通过QuickBuild,工作之间的关系使我能够轻松地传播我的变化

我一直在想如何在詹金斯处理这件事。我可以使用参数化构建触发器插件来允许作业调用其他作业并覆盖方面。然后,我将从调用的作业中获取数据,并将其发送给调用方。我怀疑我会遇到一系列问题,其中有一些方面我无法覆盖,这将迫使我在自己的脚本中实现Jenkins功能,从而降低Jenkins的实用性


在Jenkins的构建工作中,您如何处理复杂性?你听说过QuickBuild有什么严重的问题吗?

我也有同样的问题。我们有一组作业需要为主干和至少两个分支运行。分支代表我们的版本,每隔几个月就会创建一个新分支。手工创造新的就业机会并不是解决办法,所以我检查了一些可能性

一种可能性是使用。这使您可以创建一种作业的层次结构。它为构建器、发布器和SCM设置提供继承。可能对某些人有用,但对我来说还不够

我查到的第二件事是克隆人的工作,还有他的兄弟姐妹。这些真的很棒。其思想是让脚本为创建一个新作业,从模板作业复制所有设置,并根据需要进行更改。因为这是一个脚本,它非常灵活,你可以用它做很多事情。唯一的缺点是,这不会产生真正的层次结构,因此模板作业中的更改不会反映在已克隆的作业上,而只反映在以后将创建的作业上

从这两种解决方案的缺点和优点来看,两者的结合可能是最好的。您可以创建一个模板项目,其中包含一些对所有作业都适用的基本设置,然后使用bash或ant脚本根据该模板创建作业


希望能有所帮助。

有人问我,我们最终解决这个问题的办法是什么。。。经过几个月与我们的采购系统的斗争,我们在Quickbuild上花费了大约4000美元。在大约2-3个月的时间里,我们有了一个模板化的构建系统,我们对此非常满意。在我离开公司之前,我们在系统中有几个产品组,并且正在自动化发布过程

Quickbuild是一款很棒的产品。它应该是4万美元的级别,但价格要便宜得多。虽然我相信Jenkins可以做到这一点,但这将是一个有点混乱的问题,而Quickbuild有这个功能。我以前在产品上实现过复杂的行为(例如SVN 1.0中的合并跟踪),对此我感到遗憾。Quickbuild价格合理,为我们的构建和测试系统提供了坚实的基础


目前,我在一家使用竹子的公司工作,希望它的新功能分支功能能够提供Quickbuild所能做的大部分工作

我们使用Quickbuild,它似乎在大多数情况下都很有效。我甚至能够使用他们的API编写自定义插件。quickbuild缺乏的一个领域是声纳集成。sonar团队有一个Jenkins插件,而不是一个quickbuild插件

我想向大家指出,我的团队开发了一个插件,最近才在开源下发布。 它实现了完全的“作业间继承”

以下是可能对您有所帮助的更多链接:

  • 介绍:
  • 维基:
  • 发布:

鉴于目标是干巴巴的(不要重复),我现在赞成这种方法:

  • 与一起使用以支持TDD
  • 使用groovy/python或任何您喜欢的语言使用docker映像来执行需要API等的复杂操作
  • 保持实际作业管道非常简洁(基本上只是为了拉取构建参数并将其传递给共享库中的函数,这些函数可能使用docker映像来完成工作)
这非常有效,消除了围绕复杂构建作业的枯燥问题

共享管道Docker代码示例-vars/releasepippeline.groovy

/**
 * Run image
 * @param closure to run within image
 * @return result from execution
 */
def runRelengPipelineEphemeralDocker(closure) {

    def result

    artifactory.withArtifactoryEnvAuth {
        docker.withRegistry("https://${getDockerRegistry()}", 'docker-creds-id') {
            docker.image(getReleasePipelineImage()).inside {
                result = closure()
            }
        }
    }
    return result
}
用法示例

图书馆“我的共享詹金斯图书馆”

releasePipeline.runRelengPipelineEphemeralDocker {
    println "Running ${pythonScript}"
    def command = "${pythonInterpreter} -u ${pythonScript} --cluster=${options.clusterName}"
    sh command
}
插件允许您使用任何作业作为其他作业的模板。它非常棒。您只需将基本作业设置为模板:

*通常,您还将禁用基本作业(如“抽象类”)

然后创建新作业,将其设置为使用基本作业模板,然后保存:

现在编辑新作业-它将包括所有内容!(并且您可以覆盖现有配置)


注意:还有另一个配置模板插件,但最近没有更新(上次提交时间为2016年).

我今天一直在研究这些问题,但对QuickBuild没有任何兴趣。特别是,我希望C-I和夜间构建有不同的配置选项,例如签出到干净的工作区与执行恢复+更新、构建工件的存储时间以及如何存档或部署工件,同时维护每个插件的构建说明列表。Matrix/multiconfig插件没有提供足够的选项。我认为我们可以通过一个只进行构建的子作业来管理它,名为wit