Centos 针对Jenkins构建的部署以及回滚脚本
Centos 针对maven构建后war包的部署以及回滚脚本
由于公司使用jenkins ,通过maven编译,随后部署java 代码。为了方便war包的保存和回滚,写了这么一个针对maven编译完之后的备份回滚脚本。
配置tomcat
这边用的是tomcat 软链接 以加快部署的效率。
首先需要对tomcat 的配置文件进行修改 使tomcat 支持软链接
各个版本的tomcat 修改配置文件的方式不同,我这边是tomcat8.5.32.0
修改tomcat conf下的context.xml
添加一行<Resources allowLinking="true" />
添加完成之后 重启tomcat
注意点
脚本中使用sed 将版本插入文件的第一行 需要保证文件初始情况不为空。否则没有第一行存在,sed命令会失效,插入会失败
如果需要使用action命令 一定要在开头添加source /etc/init.d/functions,否则会报错
回滚 成功也可以使用action 命令 使结果显示的更为直观
测试脚本
脚本内容 如下
#!/bin/bash
#action 命令需要 source /etc/init.d/functions #Date/Time CTIME=$(date "+%Y-%m-%d-%H-%M")
#Shell #jenkins编译完之后 scp过来之后的路径 JENKINS_DIR="/Devops/jenkins_package" #存放tar.gz包路径 TAR_DIR="/Devops/tar" #部署解压完之后的包名 context PROJ_NAME="ROOT" #版本号 暂时用时间戳 TAR_VER=-$CTIME #当前所有可用于回滚的包rollback_list ROLLBACK_FILE="/Devops/file/rollback_list_file" #可回退的部署成功,返回200可回退tar.gz的list DEPLOY_SUCCEED_LIST_FILE="/Devops/file/deploy_succeed_list_file" #可回退的部署成功,返回非200可回退tar.gz的list DEPLOY_FAILED_LIST_FILE="/Devops/file/deploy_failed_list_file" #tomcat路径 TOMCAT_DIR="/usr/local/tomcat/webapps"
#备份文件_版本号或发版日期 此步骤要求jenkins 已经将war包 scp至JENKINS_DIR #这边war包或者解压后的包 我感觉都可以 #这边采用解压后的文件 避免非tomcat解压缩出现中文乱码问题 不过建议加入md5验证 避免scp过程丢失
bak_pro(){ cd $JENKINS_DIR && cp -r $PROJ_NAME $PROJ_NAME$TAR_VER if [ $? -eq 0 ]; then action ' < 备份文件成功 > ' /bin/true else action ' < 备份文件失败 > ' /bin/false fi
}
#执行压缩操作 -P 可以使用绝对路径 否则会报错 tar_pro(){ echo "Begin tar czfP" cd $JENKINS_DIR && tar czfP $TAR_DIR/$PROJ_NAME$TAR_VER.tar.gz $PROJ_NAME$TAR_VER if [ $? -eq 0 ]; then action ' < 压缩文件成功 > ' /bin/true else action ' < 压缩文件失败 > ' /bin/false fi
}
#执行部署操作 deploy_pro(){ echo "Begin deploy" rm -rf $TOMCAT_DIR/$PROJ_NAME && ln -s $JENKINS_DIR/$PROJ_NAME $TOMCAT_DIR/$PROJ_NAME if [ $? -eq 0 ]; then action ' < 替换软链接成功 > ' /bin/true
else action ' < 替换软链接失败 > ' /bin/false
fi
} #测试部署 test_pro(){ echo "Begin test" Status_Code=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://localhost:8080`; sed -i "1i$PROJ_NAME$TAR_VER.tar.gz" $ROLLBACK_FILE echo "Status_Code $Status_Code" if [ $Status_Code -eq 200 ]; then sed -i "1i$PROJ_NAME$TAR_VER.tar.gz" $DEPLOY_SUCCEED_LIST_FILE action ' < tomcat 软链接修改正常 > ' /bin/true else sed -i "1i$PROJ_NAME$TAR_VER.tar.gz" $DEPLOY_FAILED_LIST_FILE action ' < tomcat 软链接修改异常 > ' /bin/false fi
} #回滚列表 rollback_list(){ ls -lt $TAR_DIR |grep -v total | grep ^[^d] | awk '{print $9}' > $ROLLBACK_FILE echo "列出当前所有可用于回滚的tar.tz包的list 和 可回退的部署成功返回200的tar.gz的list" echo " 当前所有版本tar.tz包 最近部署成功的tar.gz版本" paste $ROLLBACK_FILE $DEPLOY_SUCCEED_LIST_FILE echo "<---------------------------------------------------------------------->" echo "<---------------------------------------------------------------------->" echo "如果需要回滚请输入 需要回退的版本号 ex:(sh $0 rollback-pro ROOT-2018-08-09-20-46)"
} #指定版本回滚 rollback_pro(){ VERSION=`echo ${1%.*}` tar zxvf $TAR_DIR/$VERSION.tar.gz -C $TAR_DIR && rm -rf $TOMCAT_DIR/$PROJ_NAME && ln -s /$TAR_DIR/$VERSION $TOMCAT_DIR/$PROJ_NAME
} #主函数,对之前编写的进行组合 main(){ case $1 in deploy)
bak_pro; tar_pro; deploy_pro; test_pro; ;; rollback-list) rollback_list; ;; rollback-pro) rollback_pro $2; ;; *) usage; esac } main $1 $2
|
测试结果
测试 部署 deploy
测试 查看回滚列表
测试 回滚