我们有一堆maven项目要构建并部署到Nexus,我们正在从Jenkins 1.500升级到最新版本,这为我们打开了管道可能性。经过大量的研究,我们编写了一个管道脚本来查询我们的bitbucket实例,找到项目密钥和repo,这样就可以重用这个脚本了。
涉及的阶段:Checkout,Build,Test& Nexus Deploy
Checkout阶段涉及不同的git repo,之后步骤相同
现在我们有了这个设计,所以类似的项目使用相同的Jenkinsfile,这是正确的吗?
根据maven_nexus目前的设计Jenkinsfile
,管道项目(bitbucket结构)的repo将用于至少400个项目。我们发现这是有利的,
有不利之处吗?我们是否通过从Jenkins管道脚本查询每个构建的bitbucket实例做错了什么? (虽然时间/网络成本很低,但我不确定这是否可行)。
到目前为止,在论坛中,我已经读过项目团队维护自己的Jenkins文件。是否有充分理由允许团队自愿编辑。
答案 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'
}