前言:

此文的解决方案,只能解决释放运维一半的工作量,为何一半?因为需要部署代码的服务器集群,都事先安装配置好项目运行所需的环境,例如java项目需要tomcat,php项目需要nginx+php-fpm等。

如果问有没有更好集群部署方案,都能连运行环境都统一自动化集群部署?答案肯定是有的,要用docker容器化集群,而不是服务器集群。此方案后续会更新博文讲解。



一、前期准备

1、代码分发服务器:192.168.0.1

2、需要部署代码的服务器:192.168.0.2

3、需要分发服务器安装好rsync服务,并配置好,用于分发代码。具体参照之前的文章rsync安装配置。

4、需要分发服务器安装好Jenkins服务,并配置好,用于一键自动化集群部署。具体参照之前的文章jenkins安装配置 5、需要 部署的服务器集群都安装好rsync服务,用于拉取代码



二、配置jenkins

1、浏览192.168.0.1:8080,访问安装好jenkins服务的分发服务器,输入之前安装时设置的账号密码登录

2、登录后找到,系统管理-》管理插件-》可选插件,搜索Publish Over SSH,安装插件,如果安装了忽略

 

jenkins如何进行回滚_svn


jenkins如何进行回滚_回滚_02



3、配置需要集群部署的服务器ssh连接,找到系统管理-》系统设置-》Publish over SSH-》SSH Servers ,点击新增配置ssh,点击高级可展开更多配置,如有多台就配置多台,配置图中几项即可,然后点击保存应用。

 

jenkins如何进行回滚_服务器_03




三、构建服务器集群部署代码

1、jenkins找到新建任务,输入任务名称,选择构建一个自由风格的软件项目,点击确定

 

jenkins如何进行回滚_svn_04

 

2、找到general,

2.1、勾选丢弃旧的构建,设置保持构建的天数输入7天,设置保持构建的最大个数输入10,可按需设置

 

jenkins如何进行回滚_服务器_05


2.2、勾选参数化构建过程,设置两个文本参数,status-构建动作,默认值有deploy-发布,roll_back-回滚;version-构建记录id值,默认值为0

 

jenkins如何进行回滚_回滚_06




3、找到源码管理,选择svn,输入svn地址,选择svn用户,没有则新建,Check-out Strategy选择Emulate clean checkout by first deleting unversioned/ignored files, then 'svn update',勾选Quiet check-out

 

jenkins如何进行回滚_jenkins如何进行回滚_07




4、找到构建触发器,其中,触发远程构建,定时构建,轮询SCM很有用,但不属于此篇文章范畴,构建触发器都不勾选,后续再写博文讲解。

 

jenkins如何进行回滚_服务器_08




5、找到构建环境,也忽略不勾选配置



6、找到构建,增加构建步骤-》执行shell,输入以下内容

case $status in
 deploy)
     echo "status:$status"
         backup_path="${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/target"
         deploy_path="/data/${JOB_NAME}/deploy_target"
         if [ -d $backup_path ];then
         echo "$backup_path is exists!"
         else
         mkdir -p $backup_path
         fi
         if [ -d $deploy_path ];then
         echo "$deploy_path is exists!"
         else
         mkdir -p $deploy_path
         fi
 cp -r ${WORKSPACE} $backup_path/
 cp -r ${WORKSPACE} $deploy_path/
         echo "deploy done!"
 ;;
 roll_back)
 echo "status:$status"
 echo "build_id:$version"
         backup_path="${JENKINS_HOME}/jobs/${JOB_NAME}/builds/$version/target"
 deploy_path="/data/${JOB_NAME}/deploy_target"
 rm -rf $deploy_path
 cp -r $backup_path $deploy_path/
 echo "roll_back done!"
         ;;
 *)
     exit
     ;;
 esac

 

jenkins如何进行回滚_jenkins如何进行回滚_09



构建过程的脚本功能说明:

脚本分为 发布 和 回滚,

发布:

先把svn拉下来的代码,备份到backup_path这个变量的目录里,再复制到deploy_path这个变量的发布目录里

回滚:

根据构建记录ID找到对应的备份代码目录,然后复制到deploy_path这个变量的发布目录里



7、找到构建后操作

7.1、点击增加构建后操作步骤,选择Send build artifacts over SSH

SSH Server-》Name,选择刚刚配置好的服务器集群的服务器

SSH Server-》Transfers-》Exec command,输入

rsync -vzrtopg root@192.168.0.1::test_php_deploy /home/www/test_new/ --password-file=/etc/rsyncd.passwd –delete

chmod -R 777 /home/www/test_new/

用于需要部署代码的服务器同步拉取代码

 

jenkins如何进行回滚_jenkins如何进行回滚_10


其中,rsync命令中的模块test_php_deploy对应的path要改成与构建过程的脚本的deploy_path一致的路径,vim /etc/rsyncd.conf修改,因此可得知,rsync同步的是deploy_path目录的代码到其他服务器的。


7.2、可以点击add server添加多台需要部署代码的服务器

 

jenkins如何进行回滚_回滚_11



7.3、增加构建后操作步骤-》E-mail Notification,输入邮箱,有错误构建会发送邮件通知

jenkins如何进行回滚_回滚_12


8、点击应用保存


四、一键自动化部署

1、点击Build with Parameters,输入status构建动作,deploy部署或roll_back回滚,输入roll_back则需要输入version构建记录ID,version构建记录ID对应的是构建历史的ID,例如#37的37

jenkins如何进行回滚_回滚_13

jenkins如何进行回滚_jenkins如何进行回滚_14

点击开始构建,然后构建历史会出现一次构建历史,点击查看细节

 

2、在构建历史可点击控制台输出,查看构建过程,如果失败查看原因

jenkins如何进行回滚_回滚_15