• 新版网站前后台即将上线,2019年将致力于提高文章质量,加大原创力度,打造一个更加舒适的阅读体验!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 新版网站前后台即将上线,2019年将致力于提高文章质量,加大原创力度,打造一个更加舒适的阅读体验!
  • 如果有任何体验不佳的地方,欢迎向客服反馈!

Jenkins + Git + Maven + tomcat集成环境搭建

主要实现“自动构建、部署”web 应用

1、安装环境

    操作系统:Centos 6.5
    JDK:1.7.x
    Maven:3.1.x
    Git: 1.7.1,自建GitLab 平台
    tomcat:7.x
    上述宿主机器 2 台:192.168.1.194,192,168.1.198,其中 194 为Jenkins Master,198 位 slave。
2、第三方安装安装和环境配置
    JDK、GitMaven、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 解析,例如:
  1. 192.168.1.110    git.xxx.com  
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 挂载。
<Context>  
….  
   <Environmentname=“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 信息】
<tomcat-users>  
     <rolerolename=“admin”/>  
     <userusername=“admin”password=“admin”roles=“admin”/>  
     <userusername=“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.sh
    5)访问“http://192.168.1.194:38080”,然后使用 admin 用户登录(用户密码参见 tomcat-users.xml)。
4、master 配置
    如果 master 需要真正的能够运行 job,我们还需要一些周密的配置。
    1)插件管理:
    jenkins master 需要几个常用的插件,在“可选插件”中,建议将如下列表插件选中并安装:
 
    这些插件主要涉及到: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”目录下,当然管理员可以放置任何可以访问的目录(有访问权限即可):
#!/bin/sh
echoTomcat:$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”,输入如下语句:
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 即可。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Jenkins + Git + Maven + tomcat 集成环境搭建
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00