Jenkins可持续集成配置说明

  |   3,799 浏览

1、前言

jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

2、下载及运行

从官网下载最新的war包:https://jenkins.io/index.html

将下载下来的war丢到tomcat的webapps下面,启动tomcat即可食用。

3、jenkins的一些系统配置

A、系统编码格式的设置

当我们配置一个job实现我们的项目自动化构建集成后,每次触发构建,控制台会输出所有构建的信息,如果里面有中文,可能会出现乱码的情况。所以需要设置一下系统编码方式:

点击主界面左边的【系统管理】->【系统设置】

在全局属性下面,新增一条key-value:LANG=zh_CN.UTF-8
后台进程保持:BUILD_ID=allow_to_run_as_daemon

B、git插件配置

当我们需要配置GIT源码仓库时,需要在本机安装git。否则jenkins执行不了git命令取不到github的代码。安装git可以在线安装也可以到官网下载安装包。安装成功后即可。

C、maven安装

当我们项目是用maven构建的时候,我们需要在本机安装maven,从官网下载一个maven安装包,解压到指定目录,然后在jenkins的【系统管理】->【Global Tool Configuration】里面的Maven配置,只需要配置MAVEN_HOME指向我们刚下载解压的目录即可

D、当我们构建项目时,需要编译代码,这时需要安装jdk,一般新系统都只自带了jre,如果不安装jdk,构建的时候会报错,提示使用的是jre而不是jdk,这时我们就需要在本机安装jdk,并在jenkins的【系统管理】->【Global Tool Configuration】里面的jdk安装配置。设置我们的java_home即可。

到此,我们自动化构建项目所依赖的环境已经全部配置好,下面我们就创建实例来实现我们的自动化集成部署

4、全量版本实例job的配置说明

运行tomcat后,在浏览器中打开:http://ip:port/jenkins

界面会出现一系列的安装指引,类似安装windows系统初始化一样,根据提示输入指定信息即可,无需要特别注意的地方。指引结束后,跳转到jenkins主界面:

初次使用,界面元素还是挺多的,下面我们只介绍创建一个job实现我们的自动化集成部署的例子。

A、 创建job

点击主界面左上角的【新建】,创建一个【构建一个自由风格的项目】

在下图的项目配置中我们只需要配置源码管理,及构建触发器和构建三点:

源码管理,通常我们使用两种:SVN和GIT做我们的源代码版本控制

B、GIT源码配置

在Repository URL中配置我们GitHub的项目地址如:https://github.com/xqtt29/Demo.git

在Credentials中点击Add按钮新增一组我们有访问github权限的用户名和密码,只需要填写username和password两个值即可:

配置完这两个就OK了。

C、SVN源码配置

同样在Repository URL中配置我们SVN的项目地址

在Credentials中点击Add按钮新增一组我们有访问github权限的用户名和密码,同GIT配置操作类似

D、构建触发器配置

在Poll SCM中配置我们的定时器如:H/2 * * * *

表示每隔两分钟从github或者svn服务器取一次最新代码,如果有新代码,就会触发后面的构建操作。

E、构建配置

通常我们项目都是用maven构建的,在这里我们选择Invoke top-level Maven targets

然后在配置中的Goals填写我们要构建项目的指令,例如:install

构建后,如果成功了,会在工程下面生成一个war包,jenkins默认的工作目录在:

/root/.jenkins/workspace下面

如果要实现自动部署,接下来我们需要把war包copy到我们的tomcat的webapps下面,tomcat会自动解压部署。下面介绍一个简单且粗暴的方法:

再增加一个构建步骤,选择Execute shell,在命令窗口中我们写三条命令:

cp target/Demo-0.0.1.war /usr/local/tomcat/webapps/Demo.war

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

docker commit ed69e9e677a7 jenkins:2.0

第一条命令,将构建的war包复制到我们的tomcat的webapps目录下。

第二条命令,将webapps目录中原来部署的项目目录强制删除即可。

第三条命令,将容器重新打成镜像,镜像中tomcat的webapps项目代码已经由第一条命令更新上传了,所以这里打的镜像就是集成上线的镜像了。

这些构建步骤只是介绍大致的自动化构建并生成docker镜像的思路,具体操作需要细化。

5、增量版本实例job的配置说明

增量版本的自动化集成部署以我们目前开发版本提交的流程为原型,开发人员将自己的增量源代码版本打成zip包提交到配置库(svn或者git),jenkins定时去配置库取得需要部署的增量版本zip包,构建的过程就是将zip包拷贝到docker-容器中去并执行容器中的shell脚本,容器中的shell脚本执行的是将zip包全部解压并拷贝到tomcat的webapps中的项目工程路径下,相同文件覆盖会自动以时间缀备注源文件。然后重启docker容器,即完成本次增量版本的部署。

利用jenkins实现增量版本的自动化集成部署,可以有效的提高开发测试环境的项目工程部署的效率,减少测试人员在部署项目工程中的人工成本,让测试人员专注于项目的功能点测试。

A、创建job

点击主界面左上角的【新建】,创建一个【构建一个自由风格的项目】

在下图的项目配置中我们只需要配置源码管理,及构建触发器和构建三点:

增量版本我们以svn源码库为例,git源码库原理一样。

B、SVN源码配置及增量版本的规范

a、SVN源码库配置

在Repository URL中配置我们SVN的项目地址

在Credentials中点击Add按钮新增一组我们有访问github权限的用户名和密码,同GIT配置操作类似。

源代码配置库地址后面加上@HEAD,表示每次都取最新版本如:

http://172.16.168.111:8000/svn/DemoIncrement@HEAD

下方提示红色错误信息,可忽略,这时的jenkins检测不是很准确,例如网络是用的代理环境,这里都是会校验不通过的,具体错误信息我们只看构建过程的输出日志信息。

b、增量版本规范说明

要实时系统自动化部署增量版本包,就必须规范开发人员提交的增量版本zip包的规范:

1, zip包中的根目录必须以项目名称开始,如目录层次:ecb/com/chinacreator/****

这样所有增量版本zip包解压出来的源代码相对路径就都是以项目名称为准。如果出现不同的相对路径,不仅增加系统解压合并版本的复杂度,也对目前测试人员手工部署增量版本时不停的cd到指定的相对目录增加部署的人工操作成本。

2, zip包命名必须以时间缀方式记录版本先后顺序,如版本名称:

V1.0[20161219-001]ecb.zip

V1.0[20161219-002]ecb.zip

这样可以避免不同开发人员提交同一个源文件时,会出现代码被覆盖的情况。系统总是会以最新的源代码覆盖老的源代码部署方式进行。

C、构建触发器配置

在Poll SCM中配置我们的定时器如:H/2 * * * *

表示每隔两分钟从github或者svn服务器取一次最新代码,如果有新代码,就会触发后面的构建操作。

D、构建配置

构建的代码如下:

sfiles=`ls /usr/local/node1`

#这个目录是我们主机与docker容器的共享目录,现在我们的docker容器是低于1.8版本的,所以不能直接将主机上的文件拷贝到容器中,需要做目录映射

for sfile in $sfiles

do

  rm -rf /usr/local/node1/$sfile

done

#以上代码只是将工作目录清空,保持不会存在历史遗留文件

files=`ls`

for file in $files

do

  cp $file /usr/local/node1/$file

done

#以上代码将我们取得的增量版本zip包全部拷贝到我们的工作目录

pid=`docker inspect -f {{.State.Pid}} 4b1969c1678c`

nsenter --target $pid --mount --uts --ipc --net --pid '/usr/local/workscript/1.sh'

#以上代码是进入我们的docker容器并执行容器中的shell脚本进行增量部署操作

docker restart 4b1969c1678c

#重启docker容器,将增量版本生效(4b1969c1678c是容器id)

E、容器中的shell脚本执行增量版本的部署

以上构建代码中docker容器的shell脚本代码如下:

#~/bin/bash

set -o errexit

#与主机的映射目录

workpath="/usr/local/work/"

#tomcat的项目工程目录

despath="/usr/local/tomcat/webapps/"

path=`ls $workpath`

#遍历映射目录,将所有的增量版本zip包解压

for file in $path

do

  ff=$workpath${file}

  echo "正在解压版本:"$ff

  unzip -o $ff -d $workpath

  rm -rf $ff

done

nowpath=`ls $workpath`

#如果没有增量版本文件就抛出异常,通知jenkins本次构建失败

if [ "${#nowpath}" -eq "0" ]

then

  echo "未发现上线版本!" 1>&2

  exit 1

fi

echo "正在上传版本...."

DATE=$(date +%Y%m%d%H%M%S)

#将增量版本源文件拷贝覆盖tocmat下的项目工程文件,重名文件以当前时间缀备份源文件

cp -R -b -S $DATE $workpath$nowpath $despath

echo "上传版本成功...."