折腾了好几天,终于把Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现“自动构建、部署”web应用。

1、安装环境

操作系统:Centos 6.5JDK:1.7.xMaven:3.1.xGit: 1.7.1,自建GitLab平台tomcat:7.x上述宿主机器2台:192.168.1.194,192,168.1.198,其中194为Jenkins Master,198位slave。

2、第三方安装安装和环境配置

JDK、Git、Maven、tomcat在上述2个宿主机器上都需要安装,即jenkins master和slave都需要这些环境。1)JDK安装:略;安装后之后,请注意配置JAVA_HOME环境变量。2)Maven安装:从apache下载tar.gz压缩包,在合适的目录下解压即可。此后配置M2_HOME环境变量。3)tomcat安装:略。4)Git:安装非常简单,直接执行“yum install git”即可。5)如果你的GitLab是自建的内网平台,千万不要忘了在上述2个宿主机器上增加hosts解析,例如:

Java代码 收藏代码

192.168.1.110    git.xxx.com  上述环境安装,需要在Jenkins和slave上都进行,即slave上也需要JDK、Maven、Git,因为slave接收master的job调度后,将会使用Git从GitLab上同步代码并使用Maven进行build,这个过程都是在salve的本地进行。此外,两个宿主机器,还需要安装ssh-keygen等必要软件,同时它们还需要交换public Key,确保2个机器能够实现“无密码登陆”(过程略)。因为Jenkins在ssh传输时无法绕过“授权确认”的手动操作,所以管理员需要人为的进行一次ssh登陆。

3、jenkins master

master是job调度的分配者,我们需要首先安装部署它。从“https://jenkins-ci.org/”官网下载jenkins.war部署包,我们将jenkins.war通过tomcat部署,即使用tomcat挂在启动jenkins服务,因为这样我们可以非常简单的修改一些配置参数和维护。(启动jenkins服务的方式还可以通过jar方式启动,请参见其他说明文档)将master安装在192.168.1.194机器上,单独安装一个tomcat,其http端口为38080。并修改如下文件:1)context.xml:增加jenkins环境变量,由tomcat挂载。

Java代码 收藏代码

<Context>
....  <Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/>
</Context>  “JENKINS_HOME”是jenkins的home目录,通常设定为“磁盘空间较大”的分区,这个目录中将放置maven build的文件,历史部署记录等等,所以将会消耗很大的存储空间。2)tomcat-users.xml:配置jenkins的用户,此后用户可以在jenkins的页面上登录和授权操作,对于jenkins的用户授权,官方提供了很多方式,比如LDAP、基于数据库等等。本实例基于tomcat user的方式,简单易用。【备注:在下文中,提供了“非热部署”方式,将可以不用配置tomcat-users信息】

Java代码 收藏代码

<tomcat-users>  <role rolename="admin"/>  <user username="admin" password="admin" roles="admin"/>  <user username="developer" password="developer" roles="manager"/>
</tomcat-users>  添加2个管理员用户,其中admin可以对系统各项配置进行修改,manager可以管理项目、部署等。3)将jenkins.war放置在webapps目录下,我们此处希望jenkins作为ROOT项目加载,所以删除原有的ROOT项目,并将jenkins.war重命名位ROOT.war,这样在通过http访问jenkins时,不需要加ContextPath了。4)启动jenkins tomcat:./startup.sh5)访问“http://192.168.1.194:38080”,然后使用admin用户登录(用户密码参见tomcat-users.xml)。

4、master配置

如果master需要真正的能够运行job,我们还需要一些周密的配置。1)插件管理:

jenkins master需要几个常用的插件,在“可选插件”中,建议将如下列表插件选中并安装:

 ![](https://s1.51cto.com/images/blog/201712/12/7ebeca27476fa5c9ede298c3e780699e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)这些插件主要涉及到:ssh、Git、GitLab、Maven,已经后面我们需要提到的“deploy”插件。管理员可以根据需要选择性的安装需要的plugins。安装完之后,重启jenkins。

5、 系统配置

在jenkins的“系统管理”-->“系统设置”页面,来设定master全局的配置,其中重要的2个选项位JDK和Maven,我们需要告知master它们安装在何处。1)JDK:

   2)Maven:

6、Build与发布

我们接下来创建一个job,这个job将从GitLab上下载源码到本地,然后使用Maven build和打包,并发布到tomcat上。这个过程正是我们常用的。 1)新建Item:授权与验证:master需要ssh访问slave机器(部署、启动,发送文件等),以及从git上下载代码,所以我们在开始之前,需要指定这些。“jenkins”-->“Credentials”-->“Add Credentials”添加一个SSH验证规则:

我们创建一个Global范围的SSH无密码登陆,这个可以在此后master与slave通讯有用。前提是master与slave已经交换了public key。“From the Jenkins master ~/.ssh”即使用master宿主机器“~/.ssh”目录下的公私钥。

然后,我们“新建”:

因为我们是基于Maven构建项目,所以选择第二项,如果你已经创建过类似的item,可以选择“复制已有的item”,输入item的名字,那么它相应的配置就会导入,就像模板一样,我们无需每次都重复填写配置表单。

在创建item时,我们还需要指定,这个item的job运行结果最终保存在哪个“节点”上,例如web项目最终发布在哪个server上,在jenkins中,master和slaver都称为“节点”。

指定Git库的地址,并配置master与GitLab通讯的SSH验证机制:

因为master、slave均需要使用Git从远端下载代码,在这个模块中,“Credentials”选择刚才我们添加的“root”,这样jenkins使用Git下载代码时将会把SSH的秘钥发过去。此外,我们还需要在GitLab中目标项目中增加“deploy key”:

我们将master、slave两个机器的public key添加到GitLab项目的“deploy key”中。如果你的item无法正确访问Git,比如“验证被拒绝”,你应该尝试通过shell登录到master、slave机器上,使用git命令尝试下载项目代码,可能因为jenkins无法跳过ssh的“授权确认”导致。

2)部署脚本思路:在项目build成功后,关闭tomcat,删除旧的项目文件,然后将新的项目文件copy到webapps目录下,然后重启tomcat。如下为脚本,“deploy.sh”,我们将此脚本放置在每个节点的“/home”目录下,当然管理员可以放置任何可以访问的目录(有访问权限即可):Java代码  收藏代码#!/bin/sh
echo "Tomcat:$1"
echo "Module:$2"
echo "++++++++++++++++++++++++++++++++"
pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}')
#if instance is running,shutdown it!
if [ "$pid" ];then  echo "Current instance is running,pid:$pid"  echo "Shutdown now!"  cd $1/bin  ./shutdown.sh  sleep 3s
fi
#but somethimes,shutdown operation will be failure!
#check status for 10 times
i=0
while [ $i -lt 10 ]
do  pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}')  if [ "$pid" ];then  sleep 1s  if [ $i -ge 10 ]  then  kill -9 $pid  break  else  ((i++))  fi  else  break  fi
done
#remove current application files
cd $1/webapps
rm -r -f ROOT
rm -f ROOT.war
cd $1/bin
cd $WORKSPACE/$2/target
cp ROOT.war $1/webapps
cd $1/bin
./startup.sh
sleep 3s
pid=$(jps -v |grep $1 | grep -v 'grep $1' | awk '{print $1}')
echo "restart ok!"
echo "pid:$pid"
echo "++++++++++++++++++++++++++++++++"  

这个脚本,就是执行“关闭tomcat”、“删除文件”、“复制文件”、“重启tomcat”过程;脚本中可以引用jenkins的一些系统变量,比如“$WORKSPACE”表示当前build项目的工作空间;此脚本接收2个参数,我们约定,第一个参数表示“tomcat home路径”,第二个参数表示“项目module名称”用于告知需要部署那个web项目(这在多modules项目中有用)。

我们需要删除原来的“Pre steps”,然后增加一个“Post steps”,选定为“Execute Shell”,输入如下语句:Java代码  收藏代码BUILD_ID=dontKillMe /home/deploy.sh "<tomcat_home>" "<module_name>"  其中<tomcat_home>和<module_name>替换成实际的字符串值。

BUID_ID是jenkins的一个特殊的运行时变量,之所以这么做,原因就是直接使用shell启动tomcat是不行的,因为jenkins进程退出后其创建的、包括其调用的脚本创建的进程都将被一起销毁,参见:【ProcessTreeKiller】

配置完毕后,基本上就可以尝试“立即部署”了,通过控制台日志查看部署过程的问题,祝你好运!7、Slave节点通过上文,我们已经在Slave机器上安装好了SSH、Git、Maven、JDK等,同时我们也需要在Slave节点安装一个tomcat,用来部署web application。需要注意的是,jenkins的slave不需要像master一样部署在tomcat上,我们只需要在jenkins的页面上操作即可,master将会通过ssh将slave.jar文件到slave节点上,并启动slave。通过导航:“系统管理”-->“节点管理”-->“新建节点”,来增加slave。其实此时我们已经看到“master”节点已经被默认添加进来了。

保存后,会提示你“启动slave”,你可以根据需要是否启动slave。

此后那些需要部署在slave宿主机器上的web应用,只需要在创建item时指定“Restrict where project can be run”为slave即可。

转载于:https://blog.51cto.com/xsunday/2049691

Jenkins + Git + Maven + tomcat集成环境搭建相关推荐

  1. jenkins 安装及配置部署操作 (jenkins+svn+tomcat and jenkins+git+maven+tomcat)

    jenkins 安装及配置部署操作 jenkins+svn+tomcat and jenkins+git+maven+tomcat jenkins rpm软件包下载地址: https://pkg.je ...

  2. 【二十二】win 10 :Jmeter 报告可视化 —— 配置 Jmeter 接口 HTML 可视化测试报告,Jenkins + Jmeter + Ant 自动化集成环境搭建

    目录 一.环境搭建 二.文件下载 三.文件配置 四.本地调试 五.创建.bat文件 六.Jenkins配置邮件 七.配置测试项目 八.自动部署成功校检 九.jmeter仪表盘HTML报告自动化构建 一 ...

  3. Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)

    一.安装说明 系统环境:CentOS release 6.4 JDK版本:jdk1.8.0_181 Jmeter版本:apache-jmeter-3.0 Ant版本:apache-ant-1.9.13 ...

  4. Jenkins Robot framework 持续集成环境搭建

    为什么我们要引入RF?其实最初我们引入RF是为了能够快速的开展自动化验收测试,为敏捷保驾护航.这其中有个重要的工具Jenkins,同时也是应群里朋友们的要求,这次就来介绍一下RF如何快速便捷的结合Je ...

  5. Jenkins+Git+Maven持续集成经典教程

    作者:mousycoder(极简小站) segmentfault.com/a/1190000002895521 Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得 ...

  6. IDEA Git Maven 基础开发环境搭建

    bin下修改 idea64.exe.vmoptions -Xms500m -Xmx1500m -XX:ReservedCodeCacheSize=500m idea只有Project(工程)和 Mod ...

  7. jenkins+git+maven搭建项目自动化持续集成

    2019独角兽企业重金招聘Python工程师标准>>> 1.概要说明 为了开发人员和测试人员的解耦,让开发和测试流程更加便捷,所以采用jenkins+git+maven这套可持续性集 ...

  8. Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)

    Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...

  9. 构建基于Jenkins + Github的持续集成环境

    登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...

最新文章

  1. 投影串口测试程序_【原创】串口通信测试程序
  2. 构造函数与析构函数到底做了啥?
  3. 台式计算机机箱的作用,如何选择台式电脑机箱?小白安装电脑机箱常识指南
  4. windows php postgre,windows下php不支持pgsql的解决方法
  5. MongoDB分布式(分片存储)部署
  6. ModelSim使用$display查看变量值和输出信息
  7. 为什么无法建立过程性能模型?
  8. live555学习笔记-RTP打包与发送
  9. 删除windows server backup备份
  10. lambda expressions
  11. JavaScript学习总结(10)——实用JS代码大全
  12. 货车超载计算公式用计算机怎么算,超载计算公式
  13. vim打开文件时显示行号
  14. mysql analyze_MySQL 案例:analyze,慢查询,与查询无响应
  15. 什么是光纤?光纤的原理是什么?你能想象没有光纤通讯的世界么?
  16. .backdoor.php,Metasploit - crack chinese caidao php backdoor
  17. 设置mysql数据库为只读
  18. 给定一个递增序列,a1 a2 ...an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤in),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小...
  19. 印象笔记 linux 命令行,在Linux的命令行下使用Evernote的教程
  20. word如何首页和目录不编辑页码

热门文章

  1. Cocos2d-x游戏中默认的AndroidManifest.xml的解析
  2. layoutSubviews何时被调用
  3. ymcms SQL注入漏洞
  4. 常用的键盘按键(一些小技巧)
  5. 基于JSP的开题报告定做
  6. 法律应是站在加密和隐私这面的……
  7. jvm诊断与优化(3)
  8. 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
  9. Matlab的部分文件操作
  10. Spring定时器表达式