一般业务cicd一直基于jenkins来实现这里来分享一篇关于maven项目的流水线构建分享。业务代码是在gitlab上,下面是自动构建-编译-部署的全过程
编译完成jar包放置在自己搭建nginxweb服务器上。
直接上pipeline代码
pipeline {
agent { label 'master'}
environment {
//改成你的git 凭证
gitsec='xxx'
//#改成你的git地址
giturl='xxx'
propath='$PWD'
//#是否执行清除
is_clear='true'
// #是否执行scm
is_check='true'
//#是否执行编译
is_build='true'
// #是否规定jar包到web服务器
is_archivejar='true'
//#是否部署。。。。钉钉消息通知这里没有加上,需要的我给你发
is_deploy='true'
// #jar包归档目录
archivedir='/data/nginx/jar/all'
/ /#远程ssh启动脚本目录 ,这个脚本很关键。是放置在节点上的。需要的话我发你
restartsh='/data/jar/jardeploy.sh'
//hosts='node' 这个变量在单节点启用,有时候我们的模块jar包分散在不同的服务器上,这个一个远程节点就有点不适用了
//这是jar包的版本,取ssh 的date来做
JARVERSION = "${sh(returnStdout: true, script: 'date +\'%Y%m%d%H%M%S\'').trim()}"
}
tools{
maven "obt"
}
parameters {
//这里添加两个参数,一个是git分支参数,这里需要改下你的defaultValue和
//useRepository的值
gitParameter(branchFilter: 'origin.*/(.*)', defaultValue: 'test', name: 'CODEBRANCH', type: 'PT_BRANCH', useRepository: '.*xxx.git')
//一个是需要部署的模块名称,模块名字最好被你target的jar包包含,
//比如模块是xxx 编译出来的jar包最好是xxx.jar或者xxx-1.0.0.jar 这里需要你修改defaultValue和value
extendedChoice defaultValue: 'xxx', description: '选择部署模块', multiSelectDelimiter: ',', name: 'modulesname', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'module1,module2,module3', visibleItemCount: 5
}
stages {
stage('gitbranch') {
steps {
git credentialsId: gitsec ,branch: CODEBRANCH , url: giturl
}
}
stage(clean){
when { environment name: 'is_clear', value: 'true' }
steps {cleanWs()}
}
stage('printenv') {
steps {
script{
sh 'printenv'
}}
}
stage('check') {
when { environment name: 'is_check', value: 'true' }
steps {
checkout([$class: 'GitSCM', branches: [[name: CODEBRANCH]], extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]], userRemoteConfigs: [[credentialsId: gitsec, url: giturl ]]])
}
}
stage('bulidjar') {
when { environment name: 'is_build', value: 'true' }
steps {
sh """
mvn clean package
"""
}
}
stage('archivejar') {
when { environment name: 'is_archivejar', value: 'true' }
steps {
sh "mkdir -p $archivedir/$JARVERSION"
script{
def server = env.modulesname.split(',')
for (i in server){
sh """
find $WORKSPACE -name "${i}*jar"|xargs -i cp {} $archivedir/$JARVERSION
"""
if (env.msg){
env.msg=env.msg+"sh ${restartsh} ${i} ${JARVERSION} \n"
}
else{env.msg="${modulesname}服务发版 \nsh ${restartsh} ${i} ${JARVERSION} \n"}
}
}
echo "$msg"
}
}
stage('deploy') {
when { environment name: 'is_deploy', value: 'true' }
steps {
script{
//这里需要你改下你的模块和部署节点的对应关系。这个好就是env中的那个hosts参数。我这是sshkeygen免密登录的。
def modules_list=["module1":"node1","module1":"node2"]
def server = env.modulesname.split(',')
for (i in server){
hosts = modules_list["${i}"]
sh """
ssh $hosts "sh $restartsh ${i} ${JARVERSION}"
"""
}
}
}
}
}
}
前两次运行需要加载变量。失败没有问题,等成功了差不多是这个样子,
第一个参数时分支
第二个是模块可多选
运行时候是这个样子,