一,准备工作
1,插件安装
找到jenkins的工作目录更换插件源,可以提高安装速度和成功率
cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
需要安装的插件
Git #拉取git代码
maven #创建Maven项目
Git parameter #参数化构建
Extened Choice Parmeter #扩展选择框参数,支持多选
Role-based Authorization Strategy #用户授权
Publish Over SSH #远程主机
Extended E-mail Notification #邮件通知
2,配置jenkins服务器全局的jdk和git工作目录(其他服务器不配置默认也会使用)
这里需要注意系统可能自带jre而不是jdk,会报错 Perhaps you are running on a JRE ?
解决办法:
yum remove *openjdk*
yum -y install java-1.8.0-openjdk-devel.x86_64
3,配置系统中的ssh用于远程到主机上执行脚本
4,配置邮件发送
点击Test configuration测试邮件发送
二,配置项目
1,创建一个Maven项目
2,构建前的配置
Days to keep builds #构建保留的天数
Max # of builds to keep #构建保留的条数
使用凭据参数来完成参数化构建,定义变量branch值默认master
限制构建过程运行的节点(需要在 Manage Nodes and Clouds 中添加节点后才能使用)
3,配置代码仓库,分支接收上面定义的变量branch
4,构建添加打包命令
clean #清除产生的项目
install #在本地Repository中安装jar(自动编译和打包,然后安装到仓库)
maven.test.skip=true #不执行测试用例,也不编译测试用例类
5,构建后操作,备份旧版本,更新新版本启动服务
#update.sh
#使用前修改
#!/bin/env bash
date=`date +%Y%m%d%H%M%S`
APP_NAME=test-0.0.1.jar #jar包名字
PASSWORD=123456 #部署那台的主机密码
WORKDIR=/root/test/ #工作目录
#检查程序是否在运行
is_exist(){
pid=`ps -ef | grep ${APP_NAME} | grep -v $$ | grep -v tail | awk '{print $2}' `
#若是不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
is_exist
if [ $? -eq "0" ]; then
echo ${PASSWORD} | sudo -S kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
cd ${WORKDIR}
echo ${PASSWORD} | sudo -S mv ${APP_NAME} ${WORKDIR}/backup/${APP_NAME%%.*}${date}.jar
echo "备份成功"
cd /var/lib/jenkins/workspace/A-test-10.144.100.205/target/
sudo cp -r ${APP_NAME} ${WORKDIR}
echo "版本更新成功"
cd ${WORKDIR}
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
java -jar ${WORKDIR}${APP_NAME} >/root/test/logs/test.log 2>&1 &
echo "程序已启动..."
fi
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME}${APP_NAME} is running. pid is ${pid} "
else
echo "${APP_NAME} is not running."
fi
exit
6,配置构建结果邮件发送
Default Content内容
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">历史变更记录:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
</table>
</body>
</html>
三,构建结果展示
邮件结果