jenkins+svn自动发布和回滚
jenkins回滚思路
- 当选择版本时,还原归档版本 ${BUILD_NUMBER} # 获取当前build的版本
- 还原上一版的操作
- 获取要还原版本的war包 在jenkins工作目录/jobs/project_name/某个archive下
- 将还原的版本文件替换为当前打包的版本
- 将还原的版本替换 jenkins工作目录/workspace/project_name/target/xx.war包
- 获取这个还原的war,在进行后续操作
/xx/jobs/${JOB_NAME}/modules/\*\*/\*\*/\*\*\/\${release_Id}/archive/\*\*/\*\*/\*\*-.war
- 配置文件可以通过回归服务器的上一版本.config
- 只回滚代码, 没有执行远端
创建-示例
-
创建一个maven项目
-
配置保存天数
-
构建选参
-
源码管理
-
构建时选参
clean compile install -Dmaven.test.skip=true
6. 最后执行
脚本就是 回滚思路的具体说明
- 脚本内容
# 后续只需改release_id传递id
jenkins_release_id=${release_Id}
date_time=`date +%Y%m%d%H%M%S`
# target 路径
project_name_target="${WORKSPACE}/target"
# job归档war包 固定路径
jobs_dir=/${JENKINS_HOME}/jobs/${JOB_NAME}/modules/com*/builds
# 现有存档war包
now_war=${jobs_dir}/${BUILD_NUMBER}/archive/com*/**/**/*.war
# 获取war包,如果等于零 说明没有,直接退出
get_war_num=`/usr/bin/find ${
project_name_target} -name *.war | wc -l`
[ ${get_war_num} -lt 1 ] && exit 10 && echo "war包过多,请重新打包"
replaceWar() {
archive_war=${jobs_dir}/${jenkins_release_id}/archive/com*/**/**/*.war
# unalias cp
cp -rf ${archive_war} ${now_war} # 强制覆盖原war包
get_war_num=`/usr/bin/find ${
project_name_target} -name *.war`
cp -rf ${archive_war} ${project_name_target}/`basename ${
get_war_num}`
}
# 不为空就执行,
if [ -n "${jenkins_release_id}" ];then
# 查找输入的对应版本,如果没有循环直到最后,当有这个 就退出脚本
for i in `find ${
jobs_dir} -maxdepth 1 -type d `;do
if [ ${jenkins_release_id} == `basename $i` ];then
replaceWar
echo $i
# 如果jenkins跟项目在同一机器 在这里在写一个脚本 bash /xx/xx
# 如果不在可以执行 ansible或 ssh推送对应war包,然后调用远端脚本
exit 0 # 正常退出
fi
done
fi
echo "不知道你输入的是啥,同步主干中"
- 测试
test-maven]# pwd
# jenkins工作目录/workspace/projectName
/root/.jenkins/workspace/test-maven
test-maven]# cp target/gHttpDataShare.war /tmp/test/gHttp/
test-maven]# cd !$
gHttp]# ls
gHttpDataShare.war trunk
gHttp]# unzip gHttpDataShare.war
]# ls WEB-INF/
404.jsp classes common jsp lib test.txt web.xml
[root@cat2 gHttp]# cat test.
cat: test.: 没有那个文件或目录
[root@cat2 gHttp]# cat WEB-INF/test.txt
用于测试-jenkins打包 回滚 # 注意,当前项目有test.txt文件,我们在svn中将它删除, 版本 44
- 构建测试
不需要输入就是主干,构建之后,在执行第8步,测试war包是否还包含test.txt
]# ls WEB-INF/
404.jsp classes common jsp lib web.xml
- 回滚测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TXYv3cH-1595216540473)(C:\Users\xiong\AppData\Roaming\Typora\typora-user-images\image-20200716091216612.png)]
- 回滚-效果检查
```bash
# 依旧在执行第8步的脚本
]# ls WEB-INF/ # 回滚上一版,成功, 但是如果数据库改动过大的话就会有一些奇怪的问题
404.jsp classes common jsp lib test.txt web.xml
```
可以通过over-ssh推送,也可以通过ansible或其它工具
未完待续(ansible)。