【转载】Jenkins + Git + Maven + tomcat集成环境搭建

本文转载自http://shift-alt-ctrl.iteye.com/blog/2208786

 

折腾了好几天,终于吧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、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代码  

  1. 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代码  

  1. <Context>  
  2. ....  
  3.     <Environment name="JENKINS_HOME" value="/home/jenkins_home/" type="java.lang.String"/>  
  4. </Context>  

 

    “JENKINS_HOME”是jenkins的home目录,通常设定为“磁盘空间较大”的分区,这个目录中将放置maven build的文件,历史部署记录等等,所以将会消耗很大的存储空间。

 

    2)tomcat-users.xml:配置jenkins的用户,此后用户可以在jenkins的页面上登录和授权操作,对于jenkins的用户授权,官方提供了很多方式,比如LDAP、基于数据库等等。本实例基于tomcat user的方式,简单易用。

Java代码  

  1. <tomcat-users>  
  2.       <role rolename="admin"/>  
  3.       <user username="admin" password="admin" roles="admin"/>  
  4.       <user username="developer" password="developer" roles="manager"/>  
  5. </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)“Deploy to container plugin”:这个插件我们在上述已经看到,如果还没有安装,请首先安装;它主要用来将“war”文件“deploy/redeploy”到web容器中,比如tomcat、jboss等。有了这个插件,我们可以在maven build之后,立即将war发布到tomcat中,而不需要手动操作或者写shell脚本来copy文件。

 

    首先,我们需要准备一个tomcat,用来部署我们的web application,过程略。此tomcat的端口为8080,部署在master宿主机器上。

 

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

Java代码  

  1. <tomcat-users>  
  2.     <role rolename="manager"/>  
  3.     <role rolename="admin"/>  
  4.     <user username="deployer" password="deployer" roles="standard,manager,admin,manager-script" />  
  5. </tomcat-users>  

 

    增加一个“deployer”用户,我们可以通过tomcat manager机制来部署war。参见稍后讲解。

 

    2)新建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的“授权确认”导致。

 

    当代码从Git下载之后,启动Maven build阶段:


 

 

     在“Pre step”中,我们增加了一小段shell,主要作用就是在发布之前,先删除web应用的tomcat中原有的ROOT.war(在某些版本的tomcat,还需要增加一行“rm -r -f ROOT”,即将原有项目的所有文件删除,才能触发tomcat undeploy操作),这或许是“Deploy plugin”的bug,如果ROOT.war已经存在,则无法再次deploy/redeploy。

    在Maven build时,我们指定“Goals”,这个很重要,否则Maven build就没有意义了。“Goals and options”根据个人项目的情况来定义,选择合适的profile环境。

 

    下面我们介绍“Deploy plugin”,这个插件就是将Maven打包生成的war,发布到指定的tomcat下。很好的一个插件。

    其中“WAR/EAR files”选项指定war的位置,这个路径是个相对路径,相对于“/home/jenkins_home/workspace/{你的item名称}”,本实例是一个maven多模块项目,且每个module打包的名称都为ROOT.war,这样方便部署。 请管理员指定正确的路径。

    Containers中,我们使用了tomcat 7,输入上文我们设定的用户名和密码,指定tomcat Url,需要注意,既然应用是基于http manager的方式deploy,那么此tomcat的webapps自带的“manager”项目不能被删除,同时tomcat还需要处于启动状态。(tomcat也可能以为死亡,所以建议在pre step中加上对tomcat状态的判断,如果tomcat死亡,先执行startup.sh)。

 

    如果在部署时,报错。请按照如下方式排查:

    1)tomcat是否已经启动。

    2)tomcat-users.xml是否配置正确。

    3)tomcat的版本和“Deploy plugin”中container指定的是否一致。

    4)tomcat下是否已经有ROOT项目,如果有,请删除,然后重启tomcat,此后再使用jenkins发布,因为reploy时会检测旧的ROOT和新的ROOT.war项目的版本相容性,如果不同,则会导致reploy失败。

 

 

    到此为止,第一个item配置完毕,保存后即可通过“立即构建”来部署我们的项目了。

 

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即可。

 

---END---

时间: 2024-10-03 10:25:37

【转载】Jenkins + Git + Maven + tomcat集成环境搭建的相关文章

Selenium2+python自动化62-jenkins持续集成环境搭建

 前言 selenium脚本写完之后,一般是集成到jenkins环境了,方便一键执行.   一.环境准备 小编环境: 1.win10 64位 2.JDK 1.8.0_66 3.tomcat 9.0.0.M4 4.jenkins 2.0   二.安装JDK 1.安装JDK教程很多,这里就不讲了,可以参考这个链接的教程:JDK安装配置教程_百度经验 在系统环境变量里添加以下变量: ①JAVA_HOME:jdk的安装路径C:\Sun\Java\jdk ②CLASSPATH:".;%JAVA_HOME%

jenkins + Git 搭建持续集成环境

持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前广泛应用的持续集成工具,本文记录我使用jenkins+Git配置持续集成环境的整个流程以及踩到的坑(jenkins过程的坑往往不是在第一次配置,而是在配置结束后更改某些配置项的时候踩到). 总体流程如下: tomcat8.0下载地址:http://tomcat.apache.org/ jenkins

基于 Jenkins 快速搭建持续集成环境

持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能.本文正是从持续集成的基本概念入手,通过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境. 持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变

java selenium教程环境搭建基于Maven_java

现在Java的大部分项目都是基于Maven,  在Maven项目中使用Selenium2. 非常简单.  首先你需要配置好Maven的环境 可以参考Maven安装以及eclipse配置maven的方法:  http://www.jb51.net/softjc/416034.html 官方的文档 http://docs.seleniumhq.org/download/maven.jsp 新建一个Maven的Project 添加如下到你的POM.XML, 就可以了 <dependency> <

Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)

jenkins自动化部署   目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成.   一.安装jenkins 1.下载jenkins       这里我选择的是war包安装jenkins,简单不伤脑,别的博客写的jenkins版本都很旧,没用最新的,写个比较新的配置2.20版. 官网:https://jenkins.io/index.html WAR包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/war/

如何搭建安卓开发持续化集成环境(Ubuntu + Jenkins + SonarQube)

本文讲的是如何搭建安卓开发持续化集成环境(Ubuntu + Jenkins + SonarQube), 我最近换了一台新的 MacBook Pro 作为我的 Android 开发机.旧的 Mac BookPro (13英寸,2011款,16GB 内存,500G SSD,i5 内核 2.4GHz,64位)我并没有卖掉或丢掉,而是装了 MacOS-Ubuntu 双系统作为持续化集成环境服务器. 本文目标是总结安装步骤,以便广大开发者朋友和我自己将来在搭建自己的 CI 时参考,主要内容如下: 在全新的

jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错

问题描述 jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错 jenkins搭建持续集成环境,配置SVN支持SVN中文路径不,怎么老是报错 解决方案 一样的问题,等待大神解答.................................................

基于Jenkins与Apache Mesos构建弹性高可用的持续集成环境

本文讲的是基于Jenkins与Apache Mesos构建弹性高可用的持续集成环境[编者的话]Jenkins是目前持续集成领域应用最为广泛的工具,通过Jenkins,项目可以进行自动化的编译.打包.分发与部署,通过持续不断的集成,减少了项目风险和重复过程,最终提高工作效率:Docker做为新的容器化的技术代表,能够保持跨环境的一致性,可以实现更快速地交付和部署:Apache Mesos做为一种分布式系统内核,可理解为一个集群管理器,通过对底层计算资源(物理机.虚拟机.云等)的CPU.内存.存储以

quickbuild-持续集成该选择什么工具?环境搭建过程?后续的集成过程?

问题描述 持续集成该选择什么工具?环境搭建过程?后续的集成过程? 首先,我是个小白,对持续集成的理解仅限于网上的一些资料.上述问题可能有点大,不过有知道一些的都欢迎来解答,谢谢~~对于持续集成,我目前的理解是:使用自动化集成工具来对项目进行管理.测试,把一些频繁的操作交给工具来完成,减少程序猿的工作,如每日更新代码的checkout.项目部署.一些测试等等(其实我对持续集成工具能完成什么工作不是很了解),有甚么理解错误的地方还望指出~ 1.然后,现阶段就是想从目前的额一些持续集成工具选择一个,如