这篇文章只是讲述了jenkins如何打包jar项目,同时集成了自动发布,手动回滚,钉钉通知。
-
jenkins打包jar项目,点击新建Item--pipeline
添加图片注释,不超过 140 字(可选)
接下来需要配置git凭据,git凭据是你能拉下代码的关键,拉到最下面有一个流水线语法,点击后选择git,
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加完凭据后下来选择你的凭据,然后点击生产流水线脚本,记住生成的内容拷贝出来后面要用到。
添加图片注释,不超过 140 字(可选)
接下来我写了一个模板,这是根据我们实际情况写的,我会标注好,一般情况下的公司直接使用就行
pipeline{
agent any
parameters {
choice(name:'state',choices:['beforehand', 'synchronization'],description:'beforehand更新,synchronization回退')
string(name:'tagrenum', defaultValue: '0', description:'回滚时版本号,默认是0')
}
//选择打包环境
tools {
jdk 'jdk1.8'
maven 'maven'
}
//定义了全局环境变量
environment {
//分支
repoBranch="master"
//jar包名
name="api-app"
//jar包启动时的端口
Port="8080"
//git地址
git="http://192.168.0.100/mid/heb-heathy.git"
//这个地方要注意,有些代码打包后并不是在当前目录下生产target文件夹,而是在下一层目录里面生成。如 server-api/target/server-api.jar
javapath="api-app/target"
//jar启动时指定的配置文件类型,可以是prod、dev、pro,根据实际情况选择
pat="dev"
//代码备份路径
jarback="/data/java_back"
//项目要启动的服务器
tarip="192.168.0.101"
}
stages {
stage('代码获取,打包备份') {
when {
expression {
return (state == "beforehand" )
}
}
steps {
//${env.repoBranch}对应上面environment中repoBranch,下面的参数都是类似;credentialsId就是刚才你保存脚本。
git branch: "${env.repoBranch}", credentialsId: '100', url: "${env.git}"
//简单理解sh 就是在jenkins服务器上执行了一个命令
//第一步打包
sh "mvn -U clean package -Dmaven.test.skip=true "
//sh "mkdir ${env.jarback}/$JOB_NAME"
//第二步,备份下打包后jar包,我个人习惯是备份在jenkins服务器上,后面如果需要回滚方便操作,不需要手动操作
//${env.name}后面的*是比填的,因为代码打包的时候代码中定义的jar包会有版本号,这个版本号又不是固定的
//$JOB_NAME是jenkins内置的环境变量表示你当前job项目的名称,$BUILD_NUMBER构建的号码
sh "echo ${env.jobname}/${env.name} "
sh "cp -rf ${env.javapath}/${env.name}*.jar ${env.jarback}/$JOB_NAME/${env.name}-${BUILD_NUMBER}.jar"
}
}
stage('更新') {
//对应parameters中choice选择参数
when {
expression {
return (state == "beforehand" )
}
}
steps {
//将文件上传到目标服务器
sh "scp ${env.jarback}/$JOB_NAME/${env.name}-${BUILD_NUMBER}.jar ${env.tarip}:/opt/apps/ "
//重点来了,启动程序流程首先要判断这台服务器上有没有这个程序、然后停止程序、删除旧的程序、重命名程序,然后启动程序
//这个都是无法通过一条命令能够完成,因此借助shell脚本
sh "ansible ${env.tarip} -m script -a '/usr/local/java_jar/jarstart.sh ${env.Port} /opt/apps ${env.name}-${BUILD_NUMBER}.jar ${env.pat}' "
}
}
stage('回滚') {
//对应parameters中choice选择参数
when {
expression {
return (state == "synchronization" )
}
}
steps {
//将文件上传到目标服务器
sh "scp ${env.jarback}/$JOB_NAME/${env.name}-${env.tagrenum}.jar ${env.tarip}:/opt/apps/ "
//重点来了,启动程序流程首先要判断这台服务器上有没有这个程序、然后停止程序、删除旧的程序、重命名程序,然后启动程序
//这个都是无法通过一条命令能够完成,因此借助shell脚本
sh "ansible ${env.tarip} -m script -a '/usr/local/java_jar/jarstart.sh ${env.Port} /opt/apps ${env.name}-${env.tagrenum}.jar ${env.pat}' "
}
}
}
}
jarstart.sh脚本
#!/bin/bash
#shell 脚本执行时可能获取不到环境,手动写进去
JAVA_HOME=/usr/local/jdk/
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
#程序端口
prod=$1
#程序名
#程序所在目录
cou=$2
#拷贝过去的程序名
file=$3
#jar启动时的配置文件类型
pat=$4
#查看port对应的pid
qpid=`lsof -i:$prod |awk "{print $2}" |grep -v PID |sed -n '1p'`
echo "qpid====$qpid"
#同时获取当前启动的文件名
jpsl=`jps -ll |grep $qpid|awk '{print $2}'`
#判断端口是否存在
if [ -n "$qpid" ];
then
echo "端口不是空"
#有些公司不让用kill -9 可以换成kill -15
kill -9 $qpid
#等待10秒,给程序关闭的时间
sleep 10
fi
#进入程序启动目录,删除旧的程序
cd $cou
if [ -f $jpsl ]
then
rm -rf $jpsl
fi
#启动程序
nohup java -jar -Xms512m -Xmx1024m $cou/$file --spring.profiles.active=$pat >/dev/null 2>&1 &
-
jenkins配置钉钉和同时构建数量,同样你代码构建失败成功都需要钉钉通知,解析来配置钉钉
1、在钉钉上创建一个机器人,选择自定义机器人,创建后记录下webhook和加密
2、在jenkins中配置钉钉,我用的是2.420版本,钉钉配置在manage jenkins 最下面
添加图片注释,不超过 140 字(可选)
3、点击进去后,填写下面内容,添加完成后再右下角有一个测试,点击测试,成功后会给你发一条钉钉消息。
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
-
接下来,在job中配置钉钉,这样就添加完成了
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
5、修改同时构建数量,点击manage jenkins -- system,这里面有一个执行器数量,这个的调整表示能同时运行几个job的构建,我一般是设置成10个。
添加图片注释,不超过 140 字(可选)
6、gitlab代码提交后,jenkins自动发布,需要先安装插件gitlab
打开你的jenkins的job,点击构建触发器,然后点击下面Build when a change is pushed to GitLab点击后,点击,高级--generate生产你的secrettoken;
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
打开gitlab你的项目然后找到,设置--集成
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
完成后你会在下面看到webhooks里面有内容,选择你新创建的然后点击 Test,然后选择push events,点击后再点击编辑,就能看到你的触发是否生效,然后你jenkins就会自动去打包。
添加图片注释,不超过 140 字(可选)