jenkins本身作为一款运维利器,具备
1. 持续集成 (Continuous integration)
2. 持续交付(Continuous delivery)
3. 持续部署(continuous deployment)
的强大能力, 对于生产的版本部署, 有时候会遇到新发的版本出现严重BUG等问题, 急需进行版本回退,为了解决这种应急问题, 特地介绍下如何使用jenkins做web版本控制,在不同版本之间可以快速切换。
1. jenkins的“构建”tab中增加构建步骤: Execute shell
shell脚本讲解:
# 设置部署的项目名称
PROJECT_NAME="optimus-mobile"
# 清理掉上次部署遗留下的项目压缩包
rm -rfv /data/work/.jenkins/jobs/${JOB_NAME}/workspace/*.tar.gz;
# 切换到jenkins部署后打包tar.gz存放的目录空间
cd /data/work/.jenkins/jobs/${JOB_NAME}/workspace;
# 重点!! 创建版本文件 命名规则: rev. + 项目名
touch rev.${PROJECT_NAME}
# 把job的构建编码作为版本号存放到rev文件中(对于SVN代码管理的,可以使用SVN的提交ID作为版本号)
echo $BUILD_NUMBER > rev.${PROJECT_NAME}
# 对workspace空间中的所有文件打包成tar.gz
tar zcvf ${JOB_NAME}.tar.gz *;
2. jenkins的“构建后操作”tab中增加构建步骤: Send build artifacts over SSH (通过SSH通道发送构建好的文件)
在Exec command框中插入如下脚本:
#定义当前最新版本的tomcat目录(里面是apache tomcat解压文件)
PROJECT_DEPLOY_HOME="/data/work/optimus-mobile"
# 定义版本的存放目录(里面存储了该项目的所有的版本)
PROJECT_RELEASE_HOME="/data/work/release/optimus-mobile"
#定义项目名称
PROJECT_NAME="optimus-mobile"
#定义版本号所在的文件名称
PROJECT_CHECKOUT_REV_FILE="rev.${PROJECT_NAME}"
#定义最新的版本存放的文件夹上级目录(tomcat中docs是配置指向这里)
PROJECT_WEB_HOME="/data/work/web"
# 设置CATALINA_BASE(用于后面的tomcat启动)
CATALINA_BASE="/data/work/optimus-mobile"
#定义当前构建的版本文件所在的文件夹
WORK_FOLD="/data/work/jenkins-deployer-upload/${JOB_NAME}/${BUILD_ID}/"
#进入当前构建的版本文件夹
cd ${WORK_FOLD}
#解压tar
tar zxvf *.tar.gz
#删除tar
rm *.tar.gz
#获取版本号存储文件中存储的版本号值
REV=`cat ${WORK_FOLD}/${PROJECT_CHECKOUT_REV_FILE}`
#定义新版本的文件夹名称(带上.版本号)
REV_PROJECT="${PROJECT_NAME}.${REV}"
#删除同版本号的文件夹(如果有)
rm -rf "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#新建新版本对应的文件夹
mkdir "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#把tar解压后的文件全部移动到新建的版本文件夹
mv * "${PROJECT_RELEASE_HOME}/${REV_PROJECT}"
#进入tomcat中当前指向的文件夹目录的上级
cd ${PROJECT_WEB_HOME}
# 删除该目录(这是个软链接)
rm ${PROJECT_NAME}
# 重新创建软链接, 指向最新的版本号
ln -s "${PROJECT_RELEASE_HOME}/${REV_PROJECT}" ${PROJECT_NAME}
# 关闭tomcat
sh ${CATALINA_BASE}/bin/shutdown.sh -force;
sleep 10;
# 删除tomcat中的日志
rm -f ${CATALINA_BASE}/logs/*;
#重启tomcat
sh ${CATALINA_BASE}/bin/startup.sh
3. 配置完毕后,保存jenkins, 立即构建实例
蓝色球表示构建成功, BUILD_ID= 27
4. 此时文件已经上传生产服务器.
看下 /data/work/release/optimus-mobile目录下的文件:
看到里面存了两个版本。
5. 查看最新版本文件夹
cd /data/work/web/
ll
看到当前optimus-mobile软链接指向了BUILD_ID=27的版本文件夹, 这个版本是最新的
6. 查看tomcat的conf/server.xml文件配置:
可见tomcat的部署目录指向的是
/data/work/web/optimus-mobile
路径, /data/work/web/optimus-mobile 路径真实是软链接指向最新的
/data/work/release/optimus-mobile/optimus-mobile.27
7. 如果27版本刚发完生产,测试发现问题,需要马上回退,回退方法只需要修改软链接指向:
# 进入optimus-mobile正式版本目录文件夹上级
cd /data/work/web/
# 删除软链接
rm optimus-mobile
# 新建软链接,指向上一个版本号25
ln -s /data/work/release/optimus-mobile/optimus-mobile.25 optimus-mobile
完毕~~~~~~~~~~~~~~~~~~~~~~~~