Jenkins Shared Library(解决多个项目使用同一jenkinsfile问题)
引言由于项目越来越多, 而且编写的jenkinsfile也大同小异.我们引入Jenkins的Shared Library插件来实现多个项目使用同一个Jenkinsfile.项目结构单独创建工程用于存放jenkins的文件, 不再每个项目的存放Jenkinsfile由于我是直接调用了完整的声明式管道, 这个项目实际上只需要vars目录和根目录下的Jenkinsfile文件.jenkins job首先
·
引言
由于项目越来越多, 而且编写的jenkinsfile也大同小异.我们引入Jenkins的Shared Library插件来实现多个项目使用同一个Jenkinsfile.
项目结构
单独创建工程用于存放jenkins的文件, 不再每个项目的存放Jenkinsfile
由于我是直接调用了完整的声明式管道, 这个项目实际上只需要vars目录和根目录下的Jenkinsfile文件.
jenkins job
首先系统设置->配置 找到Global Pipeline Libraries 然后如图配置即可:
然后修改job配置
前面的环境变量设置略, 修改流水线的git地址为新建的存放统一Jenkinsfile的git地址
编写Jenkinsfile 和 共享库
Jenkinsfile文件
library 'xxxx-library' // 在Global Pipeline Libraries中配置的library name
def config = [:] //一些环境变量与job中配置的环境变量对应
config.put('IPS',"$ips")
config.put('CREID',"$credentials_id")
config.put('GITURL', "$git_url")
config.put('MVN_PARAM', "$mvn_param")
config.put('MVN_PACK_PARAM', "$mvn_package_param")
config.put('SERVICE_NAME',"$service_name")
config.put('PROJECT_NAME', "$project_name")
config.put('ISMODULE', "$isModule")
config.put('DEFAULT_BRANCH',"$default_branch")
if("$isModule" == "true"){ //进行判断根据不同类型的服务调用不同的pipeling
pipelineCall(config)
}else{
normalCall(config)
}
normalCall.groovy
执行的计划几乎之前文章一样, 可参考上篇博文
def call(Map config){
pipeline {
agent any
environment { //设置环境变量 与Jenkinsfile对应
ipList = "${config.IPS}"
credentials_id = "${config.CREID}"
git_url = "${config.GITURL}"
mvn_param = "${config.MVN_PARAM}"
mvn_package_param = "${config.MVN_PACK_PARAM}"
service_name = "${config.SERVICE_NAME}"
project_name = "${config.PROJECT_NAME}"
default_branch = "${config.DEFAULT_BRANCH}"
}
parameters {
gitParameter (
defaultValue: default_branch,
branchFilter: 'origin/(.*)',
name: 'BRANCH',
quickFilterEnabled: true,
selectedValue: 'DEFAULT',
sortMode: 'DESCENDING_SMART',
tagFilter: '*',
type: 'PT_BRANCH',
description: 'Please select a branch or tag to build',
useRepository: git_url
)
}
stages{
stage('Build') {
steps{
git branch: params.BRANCH, changelog: false, credentialsId:credentials_id , poll: false, url: git_url
sh "mvn clean -P ${mvn_param} ${mvn_package_param} -Dmaven.test.skip=true"
}
post {
success {
archiveArtifacts 'target/*.jar'
}
}
}
stage('Deploy') {
steps {
//发布项目 参考之前的文章
//构建失败终止计划
if('FAILURE'.equals(currentBuild.result) || 'UNSTABLE'.equals(currentBuild.result)) {
echo "Current build is in FAILURE or UNSTABLE state, the whole process will exit!!"
break;
}
}
}
}
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)