哪个更好,一个Jenkins文件用于类似的管道或独占的Jenkinsfile

时间:2017-06-26 11:45:35

标签: maven jenkins jenkins-pipeline

我们有一堆maven项目要构建并部署到Nexus,我们正在从Jenkins 1.500升级到最新版本,这为我们打开了管道可能性。经过大量的研究,我们编写了一个管道脚本来查询我们的bitbucket实例,找到项目密钥和repo,这样就可以重用这个脚本了。

涉及的阶段:Checkout,Build,Test& Nexus Deploy

Checkout阶段涉及不同的git repo,之后步骤相同

现在我们有了这个设计,所以类似的项目使用相同的Jenkinsfile,这是正确的吗?

根据maven_nexus目前的设计Jenkinsfile,管道项目(bitbucket结构)的repo将用于至少400个项目。我们发现这是有利的,

  • 开发人员不必考虑Jenkinsfile(我们还没有进入DevOps)
  • 可以使用模板文件
  • 自动创建Jenkins作业

有不利之处吗?我们是否通过从Jenkins管道脚本查询每个构建的bitbucket实例做错了什么? (虽然时间/网络成本很低,但我不确定这是否可行)。

到目前为止,在论坛中,我已经读过项目团队维护自己的Jenkins文件。是否有充分理由允许团队自愿编辑。

1 个答案:

答案 0 :(得分:4)

除了缺乏可定制的行为之外,没有固有的“劣势”。我的直觉是告诉你要编写共享库(在此描述:https://jenkins.io/doc/book/pipeline/shared-libraries/)。这将允许您将“Checkout,Build,Test& Nexus Deploy”阶段存储在一个他们可以调用的脚本中,但如果他们想要一些像linting,静态分析或其他自定义行为,他们也可以添加自己的工作通常不包括。具体来说,请查看“定义更结构化的DSL”一节。他们给出了以下示例(一旦您设置了共享库):

共享库步骤定义:

// vars/buildPlugin.groovy
def call(body) {
    // evaluate the body block, and collect configuration into the object
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    // now build, based on the configuration provided
    node {
        git url: "https://github.com/jenkinsci/${config.name}-plugin.git"
        sh "mvn install"
        mail to: "...", subject: "${config.name} plugin build", body: "..."
    }
}

对应Jenkinsfile:

buildPlugin {
    name = 'git'
}

所以,如果你的团队使用这种模式,他们可以通过做类似的事情来增加它......

node() {
    stage('Lint') {
        sh 'exit 0'
    }
}

buildPlugin {
    name = 'git'
}