阅读目录:

Jenkins持续集成企业实战
1.1 目前主流网站部署的流程
1.2 Jenkins持续集成简介
1.3 Jenkins持续集成组件
1.4 Jenkins平台安装部署
1.5 Jenkins相关概念
1.6 Jenkins平台设置
1.7 Jenkins构建JOB工程
1.8 Jenkins自动化部署
1.9 Jenkins插件安装
1.10 Jenkins邮件配置
1.11 Jenkins多实例配置
1.12 Jenkins+Ansible高并发构建

Jenkins持续集成企业实战

构建企业自动化部署平台,可以大大的提升企业网站部署效率,企业生产环境每天需要更新各种系统,传统更网站的方法是使用Shell+Rsync实现网站代码备份、更新,更新完之后,运维人员手动发送邮件给测试人员、开发人员以及相关的业务人员,传统更新网站耗费大量的人力,同时偶尔由于误操作会出现细小问题。构建自动化部署平台变得迫在眉睫。

本章向读者介绍传统网站部署方法、企业主流部署方法、Jenkins持续集成简介、持续集成平台构建、Jenkins插件部署、Jenkins自动化部署网站、Jenkins多实例及Ansible+Jenkins批量自动部署等。

1.1  目前主流网站部署的流程

传统部署网站的方法对于单台或者几台服务器更新很容易,如果服务器规模超过百台或者千台,或者更新网站代码很频繁,手工更新就非常消耗时间成本。

基于主流的Hudson/Jenkins工具平台实现全自动网站部署、网站测试、网站回滚会大大的减轻网站部署的成本,Jenkins的前身为Hudson,Hduson主要用于商业版,Jenkins为开源免费版。

Jenkins是一个可扩展的持续集成引擎、框架,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。而且Jenkins平台的安装和配置非常的容易,使用也非常简单。构建Jenkins平台可以解放如下人员的双手,如图:

  • 开发人员,对于开发人员来说,只需负责网站代码的编写,不需要手动再对源码进行编译、打包、单元测试等工作,开发人员直接将写好的代码分支存放在SVN、GIT仓库即可。
  • 运维人员,对于运维人员来说,使用Jenkins自动部署,可以减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、手动更新。
  • 测试人员,对于测试人员来说,可以通过Jenkins进行代码测试、网站功能或者性能测试。

1.2  Jenkins持续集成简介

持续集成(Continuous Integration,CI|CD)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础,持续集成意义如下:

  • 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  • 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  • 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

1.3  Jenkins持续集成组件

  • 自动构建过程JOB,JOB的功能主要是:获取SVN/GIT源码、自动编译、自动打包、部署分发和自动测试等;
  • 源代码存储库,开发编写代码需上传至SVN、GIT代码库中,供Jenkins来获取;
  • Jenkins持续集成服务器,用于部署Jenkins UI、存放JOB工程、各种插件、编译打包的数据等。

1.4  Jenkins平台安装部署

Jenkins官网免费获取Jenkins软件,官网地址为:http://mirrors.jenkins-ci.org/下载稳定的Jenkins版本。由于Jenkins是基于Java开发的一种持续集成工具,所以Jenkins服务器需安装JAVA JDK开发软件。Jenkins平台搭建步骤如下:

(1) Jenkins稳定版下载:

http://updates.jenkins-ci.org/download/war/1.651.2/jenkins.war

(2) 官网下载JAVA JDK,并解压安装,代码如下:

tar -xzf  jdk-7u25-linux-x64.tar.gz  ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/

(3) 配置JAVA环境变量,/etc/profile配置文件中末尾加入如下代码:

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

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

执行如下代码使其环境变量,并查看环境变量,命令如下:

source /etc/profile

java  --version

(4) Tomcat JAVA容器配置

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.53/bin/apache-tomcat-6.0.53.tar.gz

tar  xzf  apache-tomcat-6.0.53.tar.gz

mv  apache-tomcat-6.0.53   /usr/local/tomcat

(5) Tomcat发布Jenkins,将Jenkins war拷贝至Tomcat默认发布目录,并使用jar工具解压,启动Tomcat服务即可,代码如下:

rm    -rf  /usr/local/tomcat/webapps/*

mkdir  -p /usr/local/tomcat/webapps/ROOT/

mv    jenkins.war  /usr/local/tomcat/webapps/ROOT/

cd    /usr/local/tomcat/webapps/ROOT/

jar    –xvf  jenkins.war;rm -rf  Jenkins.war

sh    /usr/local/tomcat/bin/startup.sh

(6) 通过客户端浏览器访问Jenkins服务器IP地址,如图22-5所示:

              图22-5 Jenkins自动部署平台

1.5  Jenkins相关概念

要熟练掌握Jenkins持续集成的配置、使用和管理,需要了解相关的概念,例如代码开发、编译、打包、构建等名称概念,常见的代码相关概念包括:MAKE、ANT、MAVEN、Eclipse、Jenkins等。

(1) Make编译工具

Make编译工具是Linux和Windows最原始的编译工具,在Linux下编译程序常用make,Windows下对应的工具为nmake。读取本地makefile文件,该文件决定了源文件之间的依赖关系,Make负责根据makefile文件去组织构建软件,负责指挥编译器如何编译,连接器如何连接,以及最后生成可用二进制的代码。

(2) Ant编译工具

Make工具在编译比较复杂的工程使用起来不方便,语法很难理解,延伸出Ant工具。Ant工具属于Apache基金会软件成员之一,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。

Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标元素,这些目标之间可以有依赖关系。

构建一个新的项目时,首先应该编写Ant构建文件。因为构建文件定义了构建过程,并为团队开发中每个人所使用。

Ant构建文件默认名为build.xml,也可以取其他的名字。只不过在运行的时候需把这个命名当作参数传给Ant。构建文件可以放在任何的位置,一般做法是放在项目顶层目录也即根目录,这样可以保持项目的简洁和清晰。

(3) Maven编译工具

Maven工具是对ant工具的进一步改进,在make工具中,如果我们要编译某些源文件,首先要安装编译器等工具。有时候需要不同版本的编译器,在java的编译器需要不同的各种包的支持,如果把每个包都下载下来,在makefile中进行配置制定,当需要的包非常多时,很难管理。

Maven与Ant类似,也是个构建(build)工具,它是如何调用各种不同的编译器连接器呢?使用Maven plugin (maven 插件),Maven项目对象模型POM (Project Object Model),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。

POM是Maven项目中的文件,使用XML表示,名称为pom.xml。在Maven中,当构建Project的时候,不仅仅是一堆包含代码的文件。还包含pom.xml配置文件,该文件包括Project与开发者有关的、缺陷跟踪系统、组织与许可、项目的URL、项目依赖、以及其他配置。

在基于Maven构建编译时,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

(4) Jenkins框架工具

Maven可以实现对软件代码进行编译、打包、测试,功能已经很强大了,那还需要Jenkins做什么呢?Maven可以控制编译,控制连接,可以生成各种报告,可以进行代码测试。

但是默认不能控制完整的流程? 没有顺序定义,是先编译还是先连接?先进行代码测试,还是先生成报告?可以使用脚本来对Maven进行控制,实现这些流程的控制。

(5) Eclipse工具

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK),主要用于开发者开发网站代码。

1.6  Jenkins平台设置

Jenkins持续基础平台部署完毕,需要进行简单配置,例如配置JAVA路径、安装Maven、指定SVN、GIT仓库地址等,如下为JAVA路径和Maven设置步骤:

(1) Jenkins服务器安装Maven:

wget

http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

tar -xzf  apache-maven-3.3.9-bin.tar.gz

mv  apache-maven-3.3.9   /usr/maven/

(2) Jenkins系统设置环境变量,如图22-6(a)、22-6(b)所示:

          图22-6(a) Jenkins系统设置

          图22-6(b) Jenkins系统设置

(3) Jenkins系统设置完毕,需创建job工程:

Jenkins平台首页à创建一个新任务填入Item名称构建一个maven项目单击OK,如图22-7所示:

图22-7 Jenkins创建Jenkins JOB工程

(4) 创建完JOB任务,需对其任务进行配置,如图22-8所示:

            图22-8 Jenkins配置JOB工程

(5) 单击www.jfedu.net工程名à配置进入JOB工程详细配置à源码管理选择Subversion配置SVN仓库地址,如果报错需要输入SVN用户名和密码,如图22-9所示:

            图22-9 Jenkins配置SVN仓库地址

源码管理,SVN代码迁出参数详解如下:

Respository url     配置SVN仓库地址;

Local module directory         存储SVN源码的路径;

Ignore externals option     忽略额外参数;

Check-out Strategy     代码检出策略;

Repository browser     仓库浏览器,默认Auto;

add more locations 源码管理,允许下载多个地址的代码;

Repository depth     获取SVN源码的目录深度,默认为infinity;

empty: 不检出项目的任何文件,files: 所有文件,immediates:目录第一级,infinity:整个目录所有文件。

(6) 配置Maven编译参数,Build Goals and options输入“clean install -Dmaven.test.skip=true”,此处为maven自动编译、打包并跳过单元测试选项,如图22-10所示。

            图22-10 Jenkins配置MAVEN编译参数

Maven工具常用命令如下:

mvn clean     打包清理(删除target目录内容);

mvn compile       编译项目;

mvn package          打包发布;

mvn package -Dmaven.test.skip=ture 打包时跳过测试。

通过以上步骤的配置步骤,即完成了JOB工程的创建。

1.7  Jenkins构建JOB工程

Jenkins JOB工程创建完毕,如下直接运行构建,Jenkins将从SVN仓库获取SVN代码,然后通过Maven编译、打包,并最终生成可以使用的war包即可。操作步骤如下:

(1) 单击www.jfedu.net工程名,进入JOB工程详细配置界面,单击“立即构建”,如图22-11所示:

            图22-11 Jenkins JOB工程配置界面

(2) 查看Build History,单击最新一次百分比滚动条任务,如图22-12所示:

          图22-12 Jenkins JOB工程Build界面

(3) 进入JOB工程编译详细页面,单击“Console Output”,如图22-13所示:

          图22-13 Jenkins JOB工程Console Output界面

(4) 查看Jenkins构建实时日志,如图22-14(a)、22-14(b)所示:

          图22-14(a) Jenkins JOB工程编译控制台

          图22-14(b) Jenkins JOB工程编译控制台

控制台日志打印“Finished: SUCCESS”,则表示Jenkins持续集成构建完成,会在Jenkins服务器目录www.jfedu.net工程名目录下生产网站可用的war文件,将该war包部署至其他服务器即可,war路径为:/root/.jenkins/workspace/www.jfedu.net/target/edu.war。

至此,Jenkins持续集成平台自动构建软件完成,该步骤只是生成了war包,并没有实现自动将该war包部署至其他服务器,如果要自动部署需要基于Jenkins插件或者基于Shell、Python等自动化部署脚本。

1.8  Jenkins自动化部署

如上通过手动构建Jenkins JOB工程,自动编译、打包生成war包,并不能实现自动部署,如需要实现自动部署可以基于自动部署插件或者Shell脚本、Python脚本等。

如下以Shell脚本实现Jenkins自动部署war至其他多台服务器,并自动启动Tomcat,实现最终WEB浏览器访问。Jenkins自动部署完整操作步骤如下:

(1) 单击www.jfedu.net工程名à配置à构建后操作Add post-build step Archive the artifacts 用于存档的文件à输入:**/target/*.war,该选项主要用于Jenkins编译后会将war包存档一份到target目录,该文件可以通过Jenkins Tomcat的HTTP端口访问,如图22-15(a)、22-15(b)所示:

          图22-15(a) Jenkins JOB工程编译控制台

          图22-15(b)Jenkins JOB工程编译控制台

(2) Jenkins构建完毕,访问Jenkins war存档的文件,URL地址如下:

http://139.224.227.121:7001/job/www.jfedu.net/lastSuccessfulBuild/artifact/target/edu.war

(3) 选择Add post-build step Execute shell Command输入如下代码,实现Jenkins edu.war包自动部署,如下为139.199.228.59客户端单台服务器部署edu.war,如果多台可以使用ip.txt列表,将IP加入至ip.txt,通过for循环实现批量部署,如图22-16(a)、22-16(b)所示:

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

ssh  root@ 139.199.228.59  'bash -x -s' < /data/sh/auto_deploy.sh

#for  I  in  `cat ip.txt`;do ssh  root@${I}  'bash -x -s' < /data/sh/auto_deploy.sh ;done

          图22-16(a)Jenkins JOB构建完毕执行Shell

          图22-16(b)Jenkins JOB构建完毕执行Shell

(4) 基于Jenkins将edu.war自动部署至139.199.228.59服务器Tomcat发布目录,需提前配置登录远程客户端免秘钥,免秘钥配置首先在Jenkins服务器执行ssh-keygen命令,然后按Enter键生成公钥和私钥;然后将公钥id_rsa.pub拷贝至客户端/root/.ssh/目录,并重命名为authorized_keys,操作命令如下:

ssh-keygen  -t  rsa  -P ' '  -f /root/.ssh/id_rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub 139.199.228.59

(5) Shell脚本需放在Jenkins服务器/data/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

如上通过Shell+For循环可以实现网站简单的异步部署,如果需要将Jenkins edu.war包批量快速部署至100台、500台服务器,该如何去实现呢?后续小结会讲解到。

1.9  Jenkins插件安装

Jenkins最大的功能莫过于插件丰富,基于各种插件可以满足各项需求,Jenkins本身是一个框架,真正发挥作用的是各种插件。Jenkins默认自带很多插件,如果需添加新插件,可以在Jenkins平台主页面进行操作,操作步骤如下:

Jenkins平台首页à系统管理à管理插件à可选插件à搜索email-ext-plugin插件选择并安装,如果没有该插件,则需单击“高级”,手动上传插件并安装,操作步骤如图22-17所示:

          图22-17 Jenkins 添加新插件

访问Jenkins官网手动下载插件,将下载的插件传到服务器Jenkins根目录(/root、)下的plugins目录,即/root/.jenkins/plugins目录,重启jenkins即可。Jenkins插件下载地址:https://wiki.jenkins-ci.org/display/JENKINS/Plugins。安装Email-ext-Plugin邮件插件的方法如下:

(1) 下载Email-ext和Token-macro、Email-template,可以搜索某个插件,输入插件名称,如图22-18所示:

          图22-18 Jenkins 下载新插件

(2) Email-ext和Token-macro、Email-template插件下载URL如下:

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin

https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Template+Plugin

(3) 安装Token-macro插件,如图22-19(a)、22-19(b)所示:

          图22-19(a) Jenkins Token-macro插件安装

          图22-19(b) Jenkins Token-macro插件安装

(4) 安装email-ext插件,如图22-20所示:

          图22-20 Jenkins email-ext插件安装

(5) Email-ext、Token-macro和Email-template插件安装完毕,如图22-21所示:

          图22-21 Jenkins 插件安装完毕

(6) Email插件安装完毕, Jenkins主界面系统管理系统设置会出现选项Extended E-mail Notification,则表示Jenkins Email邮件插件安装完毕,如图22-22所示:

          图22-22 Jenkins Email邮件插件

如需安装GIT、Publish Over插件或者安装装Jenkins其他任意插件,方法与Email插件安装方法一致。

1.10  Jenkins邮件配置

如上Jenkins持续集成配置完毕,可以进行网站代码的自动更新、部署、升级及回滚操作,通过控制台信息可以查看每个JOB工程构建的状态。

如果网站项目很多,人工去查看状态就变得不可取,可以借助Jenkins Email插件实现网站构建完成,自动发送邮件给相应的开发人员、运维人员或者测试人员。Jenkins发送邮件,需安装Email邮件插件,Email-ext、Token-macro和Email-template,Jenkins Email邮件配置常见参数:

SMTP server 邮件服务器地址;

Default Content Type     内容展现的格式,一般选择HTML;

Default Recipients     默认收件人;

Use SMTP Authentication 使用SMTP身份验证;

User Name 邮件发送账户的用户名;

Password     邮件发送账户的密码;

SMTP port SMTP服务器端口。

Jenkins Email邮件配置方法如下:

(1) 设置Jenkins邮件发送者,Jenkins平台首页à系统管理à系统设置àJenkins Locationà填写Jenkins URL与系统管理员邮件地址,如图22-23(a)、22-23(b)所示:

          图22-23(a) Jenkins Email邮件配置

          图22-23(b) Jenkins Email邮件配置

(2) 设置发送邮件的SMTP服务器、邮箱后缀,发送类型html、接收者或者抄送者,单击Jenkins平台首页à系统管理系统设置 Extended E-mail Notification,填写如图22-24所示的选项,包括SMTP server、默认后缀、使用SMTP认证、Default Recipients邮件接收人等信息:

          图22-24 Jenkins Email邮件配置

(3) 设置邮件的标题Default Subject内容如下:

构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS

(4) 设置发送邮件的内容,Default Content内容如下:

<hr/>

<h3>(本邮件是程序自动下发的,请勿回复!)</h3><hr/>

项目名称:$PROJECT_NAME<br/><hr/>

构建编号:$BUILD_NUMBER<br/><hr/>

构建状态:$BUILD_STATUS<br/><hr/>

触发原因:${CAUSE}<br/><hr/>

构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

变更集:${JELLY_SCRIPT,template="html"}<br/>

<hr/>

(5) 每个JOB工程邮件设置,单击www.jfedu.net JOB名称à配置à构建后操作à选择Editable Email Notification,如下信息保持默认,出现如图22-25所示:

          图22-25 Jenkins EmailJOB邮件模板配置

(6) 选择Advanced Settings,设置Trigger阀值,选择发送邮件的触发器,默认触发器包括:第一次构建、构建失败、总是发送邮件、构建成功等,一般选择always总是发送邮件,发送给developers组,如图22-26所示。

          图22-26 Jenkins Email 触发器设置

(7) Jenkins构建邮件验证,如图22-27(a)、22-27(b)、22-27(c)所示:

          图22-27(a) Jenkins构建报错触发邮件

          图22-27(b) Jenkins Email邮件信息

          图22-27(c) Jenkins Email邮件信息

1.11  Jenkins多实例配置

单台Jenkins服务器可以满足企业测试环境及生产环境使用Jenkins自动部署+测试平台,如果每天更新发布多个WEB网站,Jenkins需要同时处理很多的任务。

基于Jenkins分布式,也即多Slave方式可以缓解Jenkins服务器的压力,Jenkins多实例架构如图22-28所示,可以在Windows、Linux、MAC等操作系统上执行Slave。

          图22-28 Jenkins Slave架构图

Jenkins多Slave原理是将原本在Jenkins Master端的构建项目分配给Slave端去执行,Jenkins Master分配任务时,Jenkins Master端通过SSH远程Slave,在Slave端启动slave.jar程序,通过Slave.jar实现对网站工程的构建编译以及自动部署。所以在Slave端服务器必须安装Java JDK环境来执行Master端分配的构建任务。配置多Slave服务器方法和步骤如下:

(1) 在Slave服务器,创建远程执行Jenkins任务的用户,名称为jenkins,Jenkins工作目录/home/Jenkins,Jenkins Master免秘钥登录Slave服务器或者通过用户名和密码登录Slave;

(2) Slave服务器安装JAVA JDK版本,并将其软件路径加入系统环境变量。

(3) Jenkins master端平台添加管理节点,系统管理à管理节点à新建节点à输入节点名称,分别如图22-29(a)、22-29(b)、22-29(c)所示:

          图22-29(a) Jenkins Slave配置

          图22-29(b) Jenkins Slave配置

          图22-29(c) Jenkins Slave配置

(4) 配置www_slave节点,指定其Jenkins编译工作目录,设置IP地址,Credentials Add添加登录Slave用户名和密码,如图22-30(a)、22-30(b)所示:

          图22-30(a) Jenkins Slave配置

          图22-30(b) Jenkins Slave配置

(5) Jenkins Slave配置完毕,查看SLAVE状态如如图22-31所示:

          图22-31 Jenkins Slave状态信息

(6) 单击www_slave节点,然后选择launch salve agent,单击测试Slave Agent是否正常工作,如图22-32所示:

          图22-32 Jenkins Slave Agent测试

(7) 出现如图22-33(a)、22-33(b)所示,即证明Slave添加成功:

          图22-33(a) Jenkins Slave测试

          图22-33(b) Jenkins Slave测试

(8) 如上配置完毕,Jenkins-master通过ssh方式来启动slave的slave.jar脚本,java –jar slave.jar,Slave等待master端的任务分配,单击www.jfedu.net,然后选择立即构建,如图22-34所示:

          图22-34  Jenkins Slave构建任务

(9) Jenkins+Slave配置完毕后,如果同时运行多个任务,会发现只会运行一个任务,另外的任务在等待,那需要怎么调整呢,需要配置JOB工程勾选“在必要的时候并发构建”即可,如图22-35(a)、22-35(b)所示:

            图22-35(a) Jenkins Slave构建多任务

          图22-35(b) Jenkins Slave构建多任务

1.12  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 StepsàExecute 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构建任务,查看控制台信息,如图22-36(a)、22-36(b)、22-36(c)所示:

          图22-36(a) Jenkins Ansible自动部署

          图22-36(b) Jenkins Ansible自动部署

Jenkins持续集成企业实战的更多相关文章

  1. Jenkins持续集成企业实战系列之Jenkins插件下载及邮件配置-----05

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  2. Jenkins持续集成企业实战系列之Jenkins手动构建-----04

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  3. Jenkins持续集成企业实战系列之Jenkins配置演示-----03

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  4. Jenkins持续集成企业实战系列之Jenkins持续集成简介及安装-----02

    1.      Jenkins持续集成简介 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求, ...

  5. Jenkins持续集成企业实战系列之两种网站部署的流程-----01

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  6. Jenkins 持续集成综合实战

    Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.本文以 CentOS7 环境为例,总结了 Jenkin ...

  7. Python接口测试实战5(上) - Git及Jenkins持续集成

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  8. Jenkins持续集成相关文章整理

    构建iOS持续集成平台(一)——自动化构建和依赖管理 构建iOS持续集成平台(二)——测试框架 构建iOS持续集成平台(三)——CI服务器与自动化部署 使用Jenkins搭建iOS开发的CI服务器 一 ...

  9. python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?

    python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windo ...

随机推荐

  1. Linux系统出现hung_task_timeout_secs和blocked for more than 120 seconds的解决方法

    Linux系统出现系统没有响应. 在/var/log/message日志中出现大量的 “echo 0 > /proc/sys/kernel/hung_task_timeout_secs" ...

  2. 将Eclipse,MyEclipse等编辑器的项目管理框颜色改为护眼豆沙绿的方法

    转载链接:https://blog.csdn.net/caibaoH/article/details/77005977

  3. leetcode解题报告(21):Majority Element

    描述 Given an array of size n, find the majority element. The majority element is the element that app ...

  4. rdma centos 7.3安装

    rdma centos 7.3安装 corasql0人评论7680人阅读2017-05-28 16:29:40   1.安装依赖包 yum install epel-release -y   yum  ...

  5. scala 递归读取文件夹下所有的指定后缀的文件

    def getFile(file:File): Array[File] ={ val files = file.listFiles().filter(! _.isDirectory) .filter( ...

  6. 计蒜客 UCloud 的安全秘钥 ——(hash)

    题目链接:https://nanti.jisuanke.com/t/15769. 题意是求可以变换位置以后相同的子串有多少个,那么做法是只要每个数字的平方和,立方和以及四次方和都相同就可以了. 代码如 ...

  7. cesium地下模式(地表透明)4

    这篇博客主要罗列一下解决地下模式(地表透明)的相关资源 1.Cesium的Github仓库地下模式issue 有人提了这个问题,但是cesium官方没有解决这个问题,持续跟踪一下问题说不定哪天官方就解 ...

  8. pimpleFoam求解器 vs simpleFoam求解器 vs pisoFoam求解器 vs icoFoam

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/68072-pimplefoam-vs-simplefoam ...

  9. Spring Boot :Failed to instantiate SLF4J LoggerFactory Reported exception:

    Spring Boot出现以下错误: Failed to instantiate SLF4J LoggerFactory Reported exception: Failed to instantia ...

  10. 高效使用Linux快捷键

    命令行操作快捷键 Ctrl+a跳到本行的行首,Ctrl+e则跳到页尾. Ctrl+u删除当前光标前面的所有文字, ctrl+k-删除当前光标后面的所有文字 Ctrl+w删除光标前的单词 Backsap ...