Jenkins持续集成企业实战系列之Jenkins+Ansible高并发构建

Jenkins自动部署基于Shell+For循环方式部署10台以下的JAVA客户端服务器,效率是可以接受的,但是如果是大规模服务器需要部署或者更新网站,通过for循环串行执行效率会大打折扣,所以需要考虑到并行机制。

Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。使用Ansible+Jenkins架构方式实现网站自动部署,满足上百台、千台服务器的网站部署和更新。

Ansible服务需要部署在Jenkins服务器,客户端服务器无需安装Ansible。Ansible基于SSH工作,所以需提前做好免秘钥或者通过sudo用户远程更新网站。此处省略Ansible安装,Ansible相关知识请参考本书Ansible章节配置。

Ansible自动部署网站,有两种方法,一种是基于Ansible远程执行Shell脚本,另外一种是Ansible编写Playbook剧本,实现网站自动部署。如下为Ansible+Shell脚本方式自动部署网站方法:

(1) Jenkins服务器安装Ansible软件,Red Hat、CentOS操作系统可以直接基于YUM工具自动安装Ansible,CentOS6.x或者CentOS7.x安装前,需先安装epel扩展源,代码如下:

rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum   install   epel-release  -y

yum   install   ansible       -y

(2) 添加客户端服务器,在/etc/ansible/hosts中添加需要部署的客户端IP列表,如下代码:

[www_jfedu]

139.199.228.59

139.199.228.60

139.199.228.61

139.199.228.62

(3) Jenkins平台首页单击www.jfedu.net项目选择配置à单击Post StepsExecute shellàCommandà输入如下代码,www_jfedu为Ansible Hosts组模块名称:

cp  /root/.jenkins/workspace/www.jfedu.net/target/edu.war  /root/.jenkins/jobs/www.jfedu.net/builds/lastSuccessfulBuild/archive/target/

ansible www_jfedu  -m  copy -a  "src=/data/sh/auto_deploy.sh dest=/tmp/"

ansible www_jfedu  -m  shell -a  "cd /tmp ;/bin/bash auto_deploy.sh"

(4) Jenkins服务器端/data/sh/auto_deploy.sh Shell脚本内容如下:

#!/bin/bash

#Auto deploy Tomcat for jenkins

#By author jfedu.net 2017

export JAVA_HOME=/usr/java/jdk1.6.0_25

TOMCAT_PID=`/usr/sbin/lsof -n  -P  -t  -i  :8081`

TOMCAT_DIR="/usr/local/tomcat/"

FILES="edu.war"

DES_DIR="/usr/local/tomcat/webapps/ROOT/"

DES_URL="http://139.224.227.121:7001/job/www.jfedu.net/lastSuccessfulBuild/artifact/target/"

BAK_DIR="/export/backup/`date +%Y%m%d-%H%M`"

[ -n "$TOMCAT_PID" ] && kill -9 $TOMCAT_PID

cd $DES_DIR

rm -rf $FILES

mkdir -p $BAK_DIR;\cp -a $DES_DIR/* $BAK_DIR/

rm -rf $DES_DIR/*

wget $DES_URL/$FILES

/usr/java/jdk1.6.0_25/bin/jar  -xvf  $FILES

####################

cd $TOMCAT_DIR;rm -rf work

/bin/sh $TOMCAT_DIR/bin/start.sh

sleep 10

tail -n 50 $TOMCAT_DIR/logs/catalina.out

(5) 单击www.jfedu.net构建任务,查看控制台信息,如下图所示:

Jenkins持续集成企业实战系列之Jenkins+Ansible高并发构建

          Jenkins Ansible自动部署

Jenkins持续集成企业实战系列之Jenkins+Ansible高并发构建

           Jenkins Ansible自动部署