Centos 针对Jenkins构建的部署以及回滚脚本

版权声明:仅供学习参考 转载请标明出处。 https://blog.csdn.net/xujiamin0022016/article/details/81637998

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

测试  查看回滚列表

测试 回滚


 

猜你喜欢

转载自blog.csdn.net/xujiamin0022016/article/details/81637998