文档章节

「Jenkins+Git+Maven+Shell+Tomcat持续集成」经典教程

xingfei
 xingfei
发布于 2017/04/08 22:02
字数 2401
阅读 37
收藏 4
点赞 0
评论 0

 

Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能!

亮点

  • 采用shell自定义脚本,控制集成部署环境更加方便灵活

  • 精简war包中的lib包,常驻tomcat里,减少war包传输时间

  • Jenkins 用户权限管理,不让淘气鬼乱动

  • 构建失败发邮件通知相关人员解决

  • 自动按天备份war包,Jenkins配置备份以及版本控制化

环境

Ubuntu 14.10 (GNU/Linux 3.16.0-33-generic x86_64)

准备工作

  • Git版本控制服务器

  • Tomcat发布服务器

  • Jenkins服务器(提前安装好Maven,Git,Jdk)

实验时可以在同一台机器配置,但是生产不建议,一台机器挂了,所有服务器都挂了

废话不多说,直接上干货!

步骤

安装Jenkins

下载Jenkins War包,Jenkins官网 。

启动Jenkins ,将War包放入Tomcat容器里,启动Tomcat。

提示:
此时Jenkins在初始化配置目录,其默认配置目录路径为当前用户下的.jenkins目录,用户也可以自定义目录,Jenkins默认是把配置文件中的数据读到内存中,如果你替换了之前的配置文件,此时需要点击Jenkins的读取设置或者重启Tomcat,如果此时Jenkins页面无响应,则应该查看Tomcat的Catalina.out,多半是由于内存溢出造成(解决方法增大Tomcat调用Java虚拟机时内存大小,本文不做重点),运行Jenkins的服务器配置最好内存1G以上,因为后续会加入一些Jenkins插件,有一些会比较占用内存,导致Jenkins启动不了。

安装Jenkins插件

  • Email Extension Plugin (邮件通知)

  • GIT plugin (可能已经默认安装了)

  • Publish Over SSH (远程Shell)
    安装方法:

首页->系统管理->管理插件->可选插件->过滤(搜索插件名)->勾选->点击最下面直接安装即可(需要等待一段时间,详情可以看catalina.out日志变化)

配置Jenkins

配置基本信息

每个选项后都有个问号解释当前含义(此步新手可以略过,默认不填即可)
配置方法:首页->系统管理->系统设置

配置邮件

管理员邮件地址就是邮件的发件人地址(必须和后面邮件配置发件人邮箱一致,否则发不成功邮件)

配置Jdk

JAVA_HOME为Jdk路径 其中Jdk也可以从这里下载安装解压(不推荐,需要填写oracle account)

配置 Maven

配置 Maven Configuration

路径为maven的setting.xml路径(Maven安装略)

配置Maven项目

配置Maven安装目录

配置 Git

其中Path to Git executable为你git执行的路径 一般默认是/usr/bin/git ,如有差异,可以whereis git

配置邮件

邮件模板配置

配置好邮件的模板(可自定义html编写) User Name为用户名 Password为密码 SMTP不同邮箱不同,请自行google(另外gmail邮件如无代理翻墙,请勿用,推荐163比较好配置)

未翻墙

翻墙后

模板效果图

Default Subject 代码:

构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

模板Default Content分享:

(本邮件是程序自动下发的,请勿回复,<span style="color:red">请相关人员fix it,重新提交到git 构建</span>)<br/><hr/>

项目名称:$PROJECT_NAME<br/><hr/>

构建编号:$BUILD_NUMBER<br/><hr/>
    
GIT版本号:${GIT_REVISION}<br/><hr/>
    
构建状态:$BUILD_STATUS<br/><hr/>
    
触发原因:${CAUSE}<br/><hr/>
    
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
    
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
    
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

配置邮件触发器当失败的时候,会触发邮件通知,这个功能比较实用。

配置 Publish over SSH

远程执行shell脚本 采用公钥私钥连接 其中Key里贴的是私钥 远程被管理的主机里贴的是公钥,这2台主机就是相互信任,这样scp等操作就不需要输入用户名和密码

公钥私钥生成方法:

1.管理主机linux 上 ssh-keygen -t rsa -C "mousycoder@foxmail.com 一路回车 会在/root/.ssh下生成id_rsa(私钥) id_rsa.pub(公钥)。

2.copy 公钥的内容到远程需要通信(被管理)的主机 /root/.ssh/authorized_keys 如无此目录文件则手动创建。

配置完之后可以Test Configuration

配置 Job

步骤:首页->新建->构建一个maven项目(输入item名称)->进入该项目->配置

JOB基本信息

项目源码管理Repository UR 项目地址 Credentials授权可以是SSH也可以是用户名密码(SSH方法同上)

选择需要构建的分支,我们项目采用git工作流 默认master和develop 平时开发构建develop分支,正式上线构建master并且打标签(前公司git提交标准化相当复杂,分支相当多,这里大家可以根据实际情况来)。

构建触发器

这里我们选择poll轮询每隔1分钟去检测git仓库代码库版本,如果有更改则立刻构建,这里大家可以根据自己团队实际情况去制定,当然还有另外一个插件gitlab-hook可以主动去通知jenkins构建,不过插件所占内存比较大,需要增大tomcat虚拟机内存配置,不然会内存溢出,个人觉得如果一个团队人很多的话,选择poll更适合并且时间间隔设置长一些,避免频繁构建,gitlab-hook 适合人很少甚至一个人的情况。

构建命令

我们采用最简单的clean install 当然这里可以根据各自需求
例如 部署后的产物上传到nexus等,详情参考 Maven命令

clean install deploy:deploy-file -DgroupId=com.weitoo -DartifactId=common -Dversion=0.1-SNAPSHOT -Dpackaging=jar -Dfile=D:\workspace\server-aggregator\common\target\common-0.1-SNAPSHOT.jar -Durl=http://192.168.0.200:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

Add post-build step

构建成功后执行shell命令

该shell的目的是取出war包lib中其他所有lib包 只留下common-0.1-SNAPSHOT.jar 大大减少war包大小(完整war包30M 传包到阿里云服务器需要2分多,精简后2M,10秒多,大大提高构建速度)。

分享我的Shell

mv ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/*
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server.war 
mv ~/.jenkins/jobs/server/workspace/server/target/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/
cd ~/.jenkins/jobs/server/workspace/server/target/server/
zip -r ~/.jenkins/jobs/server/workspace/server/target/server.war * -r
scp /root/.jenkins/jobs/server/workspace/server/target/server.war root@123.56.xxx.xx:/opt/war/

构建成功远程执行shell脚本

exec command 是远程sh的路径

分享我的publish.sh文件

作用是备份每次上传的war包 重启Tomcat。

   
export JAVA_HOME=/opt/software/jdk1.7.0_25
TOMCAT_HOME="/opt/software/apache-tomcat-7.0.59"
TOMCAT_PORT=80
PROJECT="server"
BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`



mkdir -p "${BAK_DIR}"
cp /opt/war/"${PROJECT}".war "${BAK_DIR}"/"${PROJECT}"_`date +%Y%m%d%H%M%S`.war


#shutdown tomcat
/opt/sh/kill-tomcat-force.sh

#publish project 
rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}
cp /opt/war/"${PROJECT}".war "${TOMCAT_HOME}"/webapps/${PROJECT}.war

#remove tmp
rm -rf /opt/war/${PROJECT}.war

#unzip war
unzip "${TOMCAT_HOME}"/webapps/${PROJECT}.war -d "${TOMCAT_HOME}"/webapps/${PROJECT}

rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}.war

##copy lib
cp /opt/lib/* "${TOMCAT_HOME}"/webapps/${PROJECT}/WEB-INF/lib/

## start tomcat

sleep 3

#start tomcat
/opt/software/apache-tomcat-7.0.59/bin/startup.sh
echo "tomcat is starting!"

分享我的kill-tomcat-force.sh文件

作用是强制关闭tomcat进程

set fileformat=unix


path=/opt/software/apache-tomcat-7.0.59/bin

ps -ef|grep $path|grep tomcat|awk '{print $2}'

echo "exec $path/shutdown.sh"
$path/shutdown.sh

sleep 3s

#kill -9 pid
ps -ef|grep $path|grep tomcat|awk '{print $2}'|xargs kill -9

#success msg
echo "shutdown success"

ps -ef|grep $path|grep java|awk '{print $2}'

分享我的Tomcat精简方法

  • 在tomcat_home/lib下新建自定义jar包文件,导入项目所需其他jar包(以后有新增的话,单独再导一次)

  • 修改tomcat_home/conf/catalina.properties 搜索=shared.loader加上路径

shared.loader=${catalina.base}/lib/server,${catalina.base}/lib/server/*.jar,${catalina.home}/lib/server,${catalina.home}/lib/server/*.jar

此时Tomcat运行前会加载server下的lib包,如果是多个项目公用一个tomcat的时候,就需要这里放公共的lib包,避免tomcat加载多余的jar包,消耗内存。

构建后邮件设置

邮件主题收件人配置

邮件触发器

局部配置会覆盖掉全局配置,我们之前在全局配置里配置了构建失败邮件触发器,这里是更加精细的配置,

我们选择构建失败Failure-1st触发器,失败以后发邮件给开发者,(这里可以根据实际需要,配置,可以配置多个触发器)开发者的邮件在Recipient List里配置。

Jenkins用户权限管理

步骤:首页-> 系统管理-> Configure Global Security
基本配置:
只有注册的用户才能操作,当然如果是大企业的话,可以采用项目矩阵授权策略,详情可以Google

Jenkins配置的备份和版本控制

很多情况下稍不注意改变了Jenkins的配置,把平台弄坏了,又想去恢复,这个时候就得把Jenkins的配置文件进行配置或者版本化,只需要把/root/.jenkins/加入git版本库里即可,该目录下包含Jenkins所有信息,包括每次构建历史信息和历史jar包
进行全备份然后覆盖掉该文件夹的时候,重新构建JOB会出现文件夹已经存在等exception,只需要手动删掉这些目录即可,不会丢失数据。(这是Jenkins的一个bug,参考 JENKINS-21330)

参考资料

 

 

 

 

本文转载自:http://mousycoder.com/2015/10/14/jenkins-git-maven-shell-tomcat-ci/

共有 人打赏支持
xingfei
粉丝 2
博文 428
码字总数 401593
作品 0
大兴
运维
基于Dubbo的分布式系统架构(四)

基于 Dubbo 的分布式系统架构视频教程 作者:(原著)吴水成,840765167@qq.com,wu-sc@foxmail.com 搭建敏捷高效的持续集成管理平台 1、持续集成介绍 持续集成是一种软件开发实践团队开发成...

有什么关系呢
2016/11/16
161
2
使用Gitlab和Gitlab CI做持续集成(理论篇)

持续集成是一种软件开发实践。 在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。 每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误...

donhui
2016/07/25
4.3K
11
Jenkins+Git+Maven+Shell+Tomcat持续集成

准备工作 Git版本控制服务器 Tomcat发布服务器 Jenkins服务器(提前安装好Maven,Git,Jdk) 实验时可以在同一台机器配置,但是生产不建议,一台机器挂了,所有服务器都挂了。 步骤 安装Jenkins...

liuhao_sh
2016/02/19
41
0
Wijmo 2016 V3 发布,前端控件集

快如闪电,触控优先的前端控件集Wijmo,正式发布2016年最后一次重大更新,2016V3版本在互操作性、图表和报表方面持续增强,经典的FlexGrid控件也新增了数据验证和页脚等实用功能,将为您的企...

葡萄城控件技术团队
2016/12/12
2.3K
6
劈荆斩棘:Gitlab 部署 CI 持续集成

阅读目录: install configue gitlab-ci-multi-runner restore nuget packages bulid .sln run unit tests configue .gitlab-ci.yml configue build status badge image CI 精华文章: 持续集......

技术小哥哥
2017/06/20
0
0
《细说 QML》

关于命名 “中文是最叼的”。。。原本想给本系列也起一个很“叼”的名字,无奈笔者语言匮乏,绞尽脑汁才想出一个还算凑合的名字 - 《细说 QML》,关于“细说”,新华词典中有记载: 细说 [x...

u011012932
2017/02/27
0
0
持续集成是什么?

 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI)。   本文简要介绍持续集成的概念和做法。   一、概念   持续集...

花生核
2016/07/04
257
0
我的友情链接

51CTO博客开发 鹰击长空 卓越始于足下 微软技术专题 云界漫步 Linux:好知 Linux:Linuxcast.net Linux:鸟哥的Linux私房菜 todd911 Yeslab安德老师《TCP/IP路由技术第一卷》讲解视频(持续更...

terence88
2017/11/22
0
0
什么是持续集成?该怎么做?

什么是持续集成?该怎么做? 程序师2018-01-061 阅读 持续集成业界观察 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI...

程序师
01/06
0
0
Docker Registry 和持续集成 (培训视频+Git代码)

6月17日,由cSphere希云(https://csphere.cn )携手腾讯云、开源中国主办的第二期Docker实训课程完美结束! 原计划课程报名截止时间是6月16日21点,但由于Docker爱好者热情高涨,不得不将报名...

oschina
2015/06/18
3.7K
9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
11分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
14分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
21分钟前
7
0
开源 java CMS - FreeCMS2.8 会员管理

项目地址:http://www.freeteam.cn/ 会员组管理 会员管理 会员管理 从左侧管理菜单点击会员管理进入。 添加会员 在会员列表下方点击“添加”按钮。 填写相关属性后点击“保存”按钮即可。 编...

freeteam
22分钟前
0
0
bboss升级至 v5.0.6.8版本,改善对Elasticsearch SQL 的支持

v5.0.6.8功能改进如下: (1)持久层支持支持Elasticsearch SQL,使用参考文档:玩转Elasticsearch SQL功能 (2)解决持久层/elasticsearch模板变量解析多层级不起作用问题 (3)完善国际化功能 (4...

linux-tao
23分钟前
1
0
扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
30分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
36分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
37分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部