Jenkins -- 1.Jenkins集成Git实现自动部署中踩过的坑

Jenkins的说明

  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
  Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有
Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson

  Jenkins官网:https://jenkins.io/

  Jenkins下载:http://updates.jenkins-ci.org/

Jenkins的安装

  关于Jenkins的安装,已经有很多文章写了,几乎照着搭一般没啥问题,这里推荐一个博客:https://www.cnblogs.com/lidong94/p/7427923.html
  我这里主要介绍在集成过程中的坑,也是大部分人可能会踩的,好了,我们就开始填坑吧。

Jenkins集成中的坑

坑1,传输文件为0

   如果按照上面博客的方法去配置,拉取代码、SSH通信、编译打包应该就没问题了,这里主要有一个问题就是,Jenkins传送到目标服务器的文件数为0。。。从下图可以看到拉取代码、SSH通信、编译打包都没问题,唯一就是打完的包发送到目标服务器的数量为0。这个坑其实主要是配置的不对,这里主要是理解Jenkins的Transfer配置的理解。
Jenkins -- 1.Jenkins集成Git实现自动部署中踩过的坑
  看下图Jenkins传输文件的配置,我的第一个TransferSet主要是做了一下备份,这个也可以直接写在脚本里,直接调用脚本就行,主要看下面第二个TransferSet的配置。
  首先第一个参数SourceFiles,就是你要传输的文件位置,需要说明的是,这个位置其实是jenkins对某一个job的根路径,jenkins在对这个job打包时会在jenkins的根目录的workspace目录下创建一个该job的目录,即/xxx/xxx/jenkins/workspace/job名称(即你在新建jenkins job时的名字)/,然后下面的目录结构就是你这个maven工程的目录结构了,我这里是一个service,两个web的工程,所以,从该路径开始,我的jar位置是在下面配置的路径中,即这个配置的起始位置是在Jenkins工作目录下/xxx/xxx/jenkins/workspace/job名称(即你在新建jenkins job时的名字)/
Jenkins -- 1.Jenkins集成Git实现自动部署中踩过的坑
  然后第二个参数RemovePrefix,是指当把war包传到服务器的时候去掉source files处填写的war包之前的路径,要是不去除的话会在tomcat的webapps建一个target target之下才是war包,这当然不是我们想要的。
  然后第三个参数RemoteDirectory,是要传输到远程服务器的目录位置,这里的路径是针对你配置ssh时的用户根目录来说的,比如你配置的是root,那这个配置默认是在/home/root/目录下的,如果是以比如是hadoop用户连接的远程服务器,那这个配置默认是在/home/hadoop/下的,所以这个配置我直接cfs-service/开始了,就是把包传输到远程服务器的/home/用户名/cfs-service/目录下,如果没有该目录就创建,这个配置和第一个配置主要是理解他的默认路径
  然后第四个参数ExecCommand就是要执行的命令行或者脚本了,这里可以直接是shell命令行,也可以是sh一个脚本文件,这个配置的默认路径也是在该用户的根目录下。

坑2,进程起不来

Jenkins -- 1.Jenkins集成Git实现自动部署中踩过的坑
  当我们配置好上面,就是可以正常传输了,并且配置好了关闭程序的脚本和启动程序的脚本,但是发现只会关闭进程,却起不来进程。。。这是因为Jenkins默认会在构建完成后杀死构建过程中由jenkins中的shell命令触发的衍生进程。这里主要有两种方式来解决。
  方法一:

    修改配置,启动jenkins时禁止其杀死衍生进程
    在/etc/sysconfig/jenkins中加入参数-Dhudson.util.ProcessTree.disable=true
    即java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

  方法二:

    在启动脚本中加入配置BUILD_ID=DONTKILLME
    Jenkins -- 1.Jenkins集成Git实现自动部署中踩过的坑
  好了,到了这一步应该就可以了。