Jenkins 自动化部署

内容提要

Jenkins + Git + Maven + tomcat集成环境部署,实现自动构建、部署web应用

环境依赖

OS:Centos 6.5
JDK:1.7.x
Maven:3.1.x
Git: 1.7.1,自建GitLab平台
tomcat:7.x
Host:
    master:194
    slave: 198
   (静态IP统一定义为内网24位子网掩码,配置双机互信,首次验证,需人为操作)

步骤说明

上述环境依赖宿主机上均需安装

· JDK安装,安装后之后,请注意配置JAVA_HOME环境变量。

·Maven安装:从apache下载tar.gz压缩包,在合适的目录下解压即可。此后配置全局环境变量。

·tomcat安装:不做详细阐述

·Git:节省实验时间,直接执行“yum install git”

若贵司GitLab是自建的内网平台,不要忘机在宿主机上添加hosts解析
Jenkins 配置

· Jenkins jar包下载

· 将jenkins.war通过tomcat部署

使用tomcat挂在启动jenkins服务
这样我们可以非常简单的修改一些配置参数和维护
启动jenkins服务的方式还可以通过jar方式启动

· 修改context.xml文件,增加jenkins环境变量,由tomcat挂载。


        

· 修改tomcat-users.xml,配置jenkins的用户,此后用户可以在jenkins的页面上登录和授权操作

拓展:
     关于jenkins的用户授权,官方提供了很多方式,比如LDAP、基于数据库等等。本实例基于tomcat user的方式,简单易用。
 
        
        
        


admin可以对系统各项配置进行修改,manager可以管理项目、部署等

· 将jenkins.war放置在webapps目录下

我希望jenkins作为ROOT项目加载
所以删除原有的ROOT项目,并将jenkins.war重命名位ROOT.war
这样在通过http访问jenkins时,不需要加ContextPath了

· 启动jenkins tomcat,并通过web访问。

./startup.sh

访问http://*.*.*.194:$PORT,然后使用admin用户登录

· Master 配置

1、插件管理
在“可选插件”中,需要几个常用的插件
主要涉及到:
     SSH
     Git
     GitLab
     Maven
     Deploy插件(我们可以在maven build之后,立即将war发布到web容器中,而不需要手动操作或者写shell脚本来copy文件)
管理员可按需安装,安装完成之后,重启Jenkins

2、系统配置
其中重要的2个选项:JDK,Maven
我们需要告知master它们安装在何处

3、Build与发布
Deploy插件是通过外部(http)方式“deploy/redeploy”
所以需要在tomcat上进行用户授权
编辑tomcat-users.xml,增加如下配置:
  
      
      
      

增加一个“deployer”用户,我们可以通过tomcat manager机制来部署war

master需要ssh访问slave机器(部署、启动,发送文件等)
所以在开始之前,需要在“jenkins”-->“Credentials”-->“Add Credentials”添加一个SSH验证规则
同时创建一个Global范围的SSH无密码登陆
此外,我们还需要在GitLab中目标项目中增加“deploy key”

在创建item时,还需要指定,这个item的job运行结果最终保存在哪个“节点”上,即最终发布的位置

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

当代码从Git下载之后,启动Maven build阶段
在Maven build时,我们指定“Goals”,这个很重要,否则就没有意义了

值得注意的是:
在发布之前,需要先删除web应用的tomcat中原有的ROOT.war,才能触发tomcat undeploy操作。
这或许是“Deploy plugin”的bug,如果ROOT.war已经存在,则无法再次deploy/redeploy

· Slave 配置

值得注意的一点是:
   jenkins的slave不需要像master一样部署在tomcat上。
   master将会通过ssh将slave.jar文件到slave节点上,并启动slave。
   通过导航:“系统管理”-->“节点管理”-->“新建节点”,来增加slave。
   此后需要部署在slave上的web应用,只需要在创建item时指定“Restrict where project can be run”为slave即可。

Q&A

Q:为什么两台机器所需要的环境依赖需要完全一致?
A:因为slave接收master的job调度后,将会使用Git从GitLab上同步代码并使用Maven进行build,这个过程都是在salve的本地进行。
Q:如果部署的时候报错了,那我有哪些思路可以进行排查?
A:1)tomcat是否已经启动。
   2)tomcat-users.xml是否配置正确。
   3)tomcat的版本和“Deploy plugin”中container指定的是否一致。
   4)tomcat下是否已经有ROOT项目,如果有,请删除,然后重启tomcat,此后再使用jenkins发布

你可能感兴趣的:(Jenkins 自动化部署)