`

Jenkins+Git+Maven+Shell+Tomcat 持续集成部署环境大众化解决方案

阅读更多

亮点

  • 采用shell自定义脚本,控制集成部署环境更加方便灵活
  • 精简war包中的lib包,常驻tomcat里,减少war包传输时间
  • Jenkins 用户权限管理
  • 构建失败发邮件通知相关人员解决
  • 自动按天备份war包,Jenkins配置备份以及版本控制化

环境

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

准备工作

  • Git版本控制服务器
  • Tomcat发布服务器
  • 空的一台服务器(安装好Maven,Git,Jdk)

可以在同一个服务器上 但是分布式部署更加灵活,也方便维护

步骤

1. 安装Jenkins服务器

1.1 下载war包 放到tomcat运行即可和部署普通的javaweb程序一样 Jenkins官网

1.2 启动tomcat

此时Jenkins在初始化配置目录 默认配置目录路径:当前用户下的.jenkins目录 最好不修改 Jenkins默认是把配置文件中的数据读到内存中,如果你替换了之前的配置文件(涉及Jenkins配置版本管理以及备份),此时需要点击Jenkins的读取设置或者重启Tomcat,如果此时Jenkins页面无响应,则应该查看Tomcat的Catalina.out,多半是由于内存溢出造成(解决方法增大Tomcat调用Java虚拟机时内存大小,本文不做重点)

2. 配置Jenkins

2.1 安装所需插件

自动化部署所需全部插件Email Extension Plugin(邮件通知)GIT plugin(可能已经默认安装了)Publish Over SSH(远程Shell) 安装方法:首页->系统管理->管理插件->可选插件->过滤(搜索插件名)->勾选->点击最下面直接安装即可(需要等待一段时间,详情可以看catalina.out日志变化)

2.2 Jenkins 配置

2.2.1 基本信息配置

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

2.2.2 邮件配置

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

2.3 Maven 配置

2.3.1 Maven Configuration 配置

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

2.3.2 Maven项目配置

2.3.3 Maven安装目录配置

2.4 Jdk 配置

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

2.5 Git 配置

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

2.6 邮件配置

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

未VPN代理连接

VPN连接

模板效果图:

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/>
2.6.2 配置邮件触发器

当失败的时候 会触发发邮件

2.7 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

3. 配置 Job

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

3.1 JOB基本信息

3.2 项目源码管理

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

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

3.3 构建触发器

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

3.4 构建命令

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

clean install deploy:deploy-file -DgroupId=com.weitoo -DartifactId=common -Dversion=0.1-SNAPSHOT -Dpackaging=jar -Dfile=D:workspaceserver-aggregatorcommon	argetcommon-0.1-SNAPSHOT.jar -Durl=http://192.168.0.200:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

3.5 Add post-build step

  1. 构建成功后执行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/

2.构建成功远程执行shell脚本

exec command 是远程sh的路径

分享我的publish.sh文件

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

TOMCAT_HOME="/opt/apache-tomcat-7.0.59"
TOMCAT_PORT=80
PROJECT="server"
BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`

#shutdown tomcat
${TOMCAT_HOME}/bin/shutdown.sh
echo"tomcat shutdown"

#check tomcat process 
#TOMCAT_PID="lsof -n -P -t -i :${TOMCAT_PORT}"
#echo"current tomcat pid :"${TOMCAT_PID} 
#while [ -n"${TOMCAT_PID}"] 
#do
# sleep 5 
# tomcat_pid="lsof -n -P -t -i :${TOMCAT_PORT}"
# echo"scan tomcat pid :"${TOMCAT_PID} 
#done
sleep 3 

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

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

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

#start tomcat
"${TOMCAT_HOME}"/bin/startup.sh
echo"tomcat is starting!"

分享我的Tomcat精简方法

  1. 在tomcat_home/lib下新建自定义jar包文件,导入项目所需其他jar包(以后有新增的话,单独再导一次)
  2. 修改tomcat_home/conf/catalina.properties 搜索到shared.loader加上路径

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

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

3.6 构建后邮件设置

3.6.1 邮件主题收件人配置

3.6.2 邮件触发器

局部配置会覆盖掉全局配置,我们之前在全局配置里配置了构建失败邮件触发器,这里是更加精细的配置 我们选择构建失败Failure-1st触发器,失败以后发邮件给开发者,(这里可以根据实际需要,配置,可以配置多个触发器)开发者的邮件在Recipient List里配置

4. Jenkins用户权限管理

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

5. Jenkins配置的备份和版本控制

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

分享到:
评论

相关推荐

    Jenkins+Git+Maven+Shell+Tomcat持续集成环境

    Jenkins+Git+Maven+Shell+Tomcat 持续集成环境 本文主要讲述如何使用 Jenkins、Git、Maven、Shell 和 Tomcat 搭建一个持续集成环境,以提高软件开发效率和质量。首先,Jenkins 是一个开源软件项目,旨在提供一个...

    jenkins+git+maven+tomcat

    Jenkins+Git+Maven+Tomcat 自动化集成环境搭建 本文将详细介绍如何使用 Jenkins、Git、Maven 和 Tomcat 实现自动化构建、部署 web 应用程序的集成环境。 环境安装 首先,我们需要安装以下环境: 1. 操作系统:...

    Jenkins+Maven+SVN+Tomcat 持续集成环境快捷部署

    搭建Jenkins+Maven+SVN+Tomcat的持续集成环境,需要按照以下步骤: 1. 环境准备 - JDK1.8.0_131,版本不低于1.7,使用最新版本以获得最佳性能和最新特性。 - Apache Maven 3.3.9,不推荐使用3.5.0版本,以免出现...

    Windows平台搭建Jenkins+maven+git实现自动发布已经越过几道坑

    在Windows平台上搭建Jenkins+maven+git实现自动化发布,首先需要准备好以下环境: - **JDK**: 安装Java Development Kit (JDK),本文案例中的路径为`C:\Program Files\Java\jdk1.8.0_131`。 - **Maven**: Maven用于...

    jenkins+git+maven搭建自动化部署环境

    jenkins+git+maven搭建自动化部署环境说明文档,详尽的说明

    K8S+DockerCE+Jenkins+Maven+Gitlab自动化打包部署

    "K8S+DockerCE+Jenkins+Maven+Gitlab自动化打包部署" 以下是从给定的文件中生成的知识点: 一、概述 * 自动化打包部署是指将程序从开发到部署的整个流程自动化,以提高研发效率和生产效率。 * 本文将介绍使用 K8S...

    jenkins+git+maven

    jenkins+git+maven搭建自动构建项目过程,其中部分简单安装省略

    Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建

    1. Docker+Jenkins+GitLab+Maven+Harbor+SpringBoot自动化构建+Jenkins自动化部署配置 2.无须运维部署 ,而是相关的开发人员,测试人员登录jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力

    Docker+Jenkins+GitLab+Maven+SpringBoot自动化构建.pdf

    Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud;自动化构建

    持续集成环境maven+nexus+jenkins+svn搭建

    持续集成环境是软件开发过程中的一个重要阶段,它通过自动化的方式来构建、测试和部署软件,从而提高软件的质量和开发效率。在这个环境中,Maven、Nexus、Jenkins 和 SVN 等工具都是不可或缺的组件。下面我们将详细...

    postman+newman+jenkins+git APItest自动化集成测试 ppt文档

    Postman+Newman+Jenkins+Git API测试自动化集成测试是一种非常实用的解决方案,可以帮助开发者快速测试和验证API。 知识点: * Postman的基本使用 * Newman的安装和使用 * Jenkins的基本使用 * Git的基本使用 * ...

    Jenkins+Maven+SVN+Tomcat持续集成实战

    总结来说,Jenkins+Maven+SVN+Tomcat的持续集成方案,能够简化网站部署流程,降低错误率,提高团队协作效率。通过自动化,开发者可以更快地获得反馈,及时修复问题,从而加速产品的迭代和发布。在实践中,不断优化...

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    1. **Jenkins**:Jenkins 是一个开源的持续集成(CI)服务器,可以自动化各种软件开发任务,如编译、测试、部署等。在这个场景下,Jenkins 监听 Gitlab 仓库的代码变更,一旦检测到新的提交,就会触发构建流程。 2....

    Jmeter+Jenkins+maven接口自动化集成

    Jmeter+Jenkins+maven 接口自动化集成测试框架是一种自动化测试解决方案,旨在简化测试过程,提高测试效率和测试质量。该框架通过集成 Jmeter、Jenkins 和 Maven 三个软件工具,实现了自动化测试、自动构建和自动...

    实战Docker+Jenkins+Git+Registry构建持续集成环境

    实战 Docker+Jenkins+Git+Registry 构建持续集成环境 本文将详细介绍如何使用 Docker、Jenkins、Git 和 Registry 构建持续集成环境,实现自动化的 Java 项目发布流程。 知识点 1: Jenkins 简介 Jenkins 是一个...

    jenkins+testng+reportng+maven+java环境搭建

    jenkins+testng+reportng+maven+java环境搭建 本文将指导测试人员搭建jenkins+testng+reportng+maven+java环境,涵盖了Eclipse环境准备、Maven配置、TestNG插件安装、ReportNG报告引入等内容。 一、Eclipse 环境...

    Jenkins+Maven+SVN+Tomcat持续集成实战视频.zip

    目录 1、传统网站部署流程 2、主流网站部署流程及方法 3、Jenkins持续平台安装 4、Jenkins持续集成MAVEN讲解 5、Jenkins持续集成JOB工程设置 6、Jenkins持续集成网站构建实战...Jenkins+Maven+SVN+Tomcat持续集成实v1战

    Jenkins持续集成maven+jmeter+git接口自动化测试框架.pdf

    背景:jenkins作为中央调度器,集成java、maven、git、email、html-report环境,搭建 一个自动化测试框架,可性能也可接口;maven负责项目管理,jenkins服务器就不需要安 装jmeter运行环境(错误的,maven项目配置...

    Jmeter+Jenkins+maven接口自动化集成.rar

    【Jmeter+Jenkins+maven接口自动化集成】 接口自动化测试是现代软件开发中不可或缺的一环,它可以有效地提高测试效率,确保系统的稳定性和可靠性。在这个项目中,我们将利用JMeter、Jenkins和Maven三个强大的工具...

    linux下搭建jenkins+git+maven+tomcat高可用集成

    在Linux环境中,构建一个基于Jenkins、Git、Maven和Tomcat的高可用集成系统是一项重要的任务,这对于持续集成和持续部署(CI/CD)流程至关重要。以下将详细阐述这个集成过程中的关键知识点。 首先,我们需要了解每...

Global site tag (gtag.js) - Google Analytics