「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

2年前 (2022) 程序员胖胖胖虎阿
294 0 0

点击上方 Java后端选择 设为星标

优质文章,及时送达


作者:极简小站

链接:
mousycoder.com/2015/10/14/jenkins-git-maven-shell-tomcat-ci/
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+Git+Maven+Shell+Tomcat持续集成」实用教程
启动 Jenkins ,将 War 包放入 Tomcat 容器里,启动 Tomcat。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
提示:

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

安装 Jenkins 插件

  • EmailExtensionPlugin (邮件通知)

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

  • PublishOverSSH (远程 Shell)

安装方法:

首页 ->系统管理 ->管理插件 ->可选插件 ->过滤 (搜索插件名)-> 勾选 ->点击最下面直接安装即可(需要等待一段时间, 详情可以看 catalina.out 日志变化)
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置 Jenkins

配置基本信息

每个选项后都有个问号解释当前含义,
(此步新手可以略过,默认不填即可)

配置方法:首页 -> 系统管理 -> 系统设置
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置邮件

管理员邮件地址就是邮件的发件人地址 (必须和后面邮件配置发件人邮箱一致,否则发不成功邮件)
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置 Jdk

JAVA_HOME为 Jdk 路径 其中 Jdk 也可以从这里下载安装解压
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置 Maven

配置 Maven Configuration
路径为 maven 的 setting.xml 路径 (Maven 安装略)
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
配置 Maven 项目
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
配置 Maven 安装目录
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置 Git

其中 
PathtoGitexecutable为你 git 执行的路径 一般默认是 / usr/bin/git , 如有差异,可以 
whereis git
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置邮件

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

2020年最新的常问企业面试题大全以及答案

未翻墙
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
翻墙后
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
模板效果图
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
Default Subject 代码:
  
  
  
  1. 构建通知:$PROJECT_NAME - Build# $BUILD_NUMBER - $BUILD_STATUS!

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


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


  3. 构建编号:$BUILD_NUMBER<br/><hr/>


  4. GIT版本号:${GIT_REVISION}<br/><hr/>


  5. 构建状态:$BUILD_STATUS<br/><hr/>


  6. 触发原因:${CAUSE}<br/><hr/>


  7. 构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>


  8. 构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>


  9. 变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

配置邮件触发器

当失败的时候,会触发邮件通知,这个功能比较实用。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

配置 Publish over SSH

远程执行 shell 脚本 采用公钥私钥连接 其中 Key 里贴的是私钥 远程被管理的主机里贴的是公钥, 这 2 台主机就是相互信任,这样 scp 等操作就
不需要输入用户名和密码
公钥私钥生成方法:
  1. 管理主机 linux 上 ssh-keygen-t rsa-C"mousycoder@foxmail.com 一路回车 会在 / root/.ssh 下生成 idrsa(私钥) idrsa.pub(公钥)。

2.copy 公钥的内容到远程需要通信 (被管理) 的主机 
/root/.ssh/authorized_keys 如无此目录文件则手动创建。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
配置完之后可以 Test Configuration
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
配置 Job
步骤: 首页 ->新建 ->构建一个 maven 项目 (输入 item 名称)-> 进入该项目 ->配置
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
JOB 基本信息


「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
项目源码管理

Repository UR 项目地址 Credentials 授权可以是 SSH 也可以是用户名密码 (SSH 方法同上)
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
选择需要构建的分支,我们项目采用 git 工作流 默认 master 和 develop 平时开发构建 develop 分支,正式上线构建 master 并且打标签 (前公司 git 提交标准化相当复杂,分支相当多, 这里大家可以根据实际情况来)。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
构建触发器
这里我们选择 poll 轮询每隔 1 分钟去检测 git 仓库代码库版本, 如果有更改则立刻构建,这里大家可以根据自己团队实际情况去制定,当然还有另外一个插件 gitlab-hook 可以主动去通知 jenkins 构建, 不过插件所占内存比较大,需要增大 tomcat 虚拟机内存配置,不然会内存溢出。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
构建命令
我们采用最简单的 
clean install 当然这里可以根据各自需求

例如 部署后的产物上传到 nexus 等, 详情参考 
Maven 命令
  
  
  
  1. 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

「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
Add post-build step
构建成功后执行 shell 命令
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
该 shell 的目的是取出 war 包 lib 中其他所有 lib 包 只留下 common-0.1-SNAPSHOT.jar 大大减少 war 包大小 (完整 war 包 30M 传包到阿里云服务器需要 2 分多, 精简后 2M,10 秒多, 大大提高构建速度)。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
分享我的 Shell
  
  
  
  1. mv ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/

  2. rm -rf ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/*

  3. rm -rf ~/.jenkins/jobs/server/workspace/server/target/server.war

  4. mv ~/.jenkins/jobs/server/workspace/server/target/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/

  5. cd ~/.jenkins/jobs/server/workspace/server/target/server/

  6. zip -r ~/.jenkins/jobs/server/workspace/server/target/server.war * -r

  7. scp /root/.jenkins/jobs/server/workspace/server/target/server.war root@123.56.xxx.xx:/opt/war/

构建成功远程执行 shell 脚本
execcommand 是远程 sh 的路径
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
分享我的 publish.sh 文件
作用是备份每次上传的 war 包 重启 Tomcat。
  
  
  
  1. export JAVA_HOME=/opt/software/jdk1.7.0_25

  2. TOMCAT_HOME="/opt/software/apache-tomcat-7.0.59"

  3. TOMCAT_PORT=80

  4. PROJECT="server"

  5. BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`




  6. mkdir -p "${BAK_DIR}"

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




  8. /opt/sh/kill-tomcat-force.sh



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

  10. cp /opt/war/"${PROJECT}".war "${TOMCAT_HOME}"/webapps/${PROJECT}.war

  11. q


  12. rm -rf /opt/war/${PROJECT}.war



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


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



  15. cp /opt/lib/* "${TOMCAT_HOME}"/webapps/${PROJECT}/WEB-INF/lib/




  16. sleep 3



  17. /opt/software/apache-tomcat-7.0.59/bin/startup.sh

  18. echo "tomcat is starting!"

分享我的 kill-tomcat-force.sh 文件
作用是强制关闭 tomcat 进程
  
  
  
  1. set fileformat=unix



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


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


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

  5. $path/shutdown.sh


  6. sleep 3s



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



  8. echo "shutdown success"


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

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

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

  
  
  
  1. 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 包, 消耗内存。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
构建后邮件设置
邮件主题收件人配置


「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程
邮件触发器
局部配置会覆盖掉全局配置, 我们之前在全局配置里配置了构建失败邮件触发器, 这里是更加精细的配置,
  
  
  
  1. 我们选择构建失败Failure-1st触发器,失败以后发邮件给开发者,(这里可以根据实际需要,配置,可以配置多个触发器)开发者的邮件在RecipientList里配置。

「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

Jenkins 用户权限管理

步骤:首页 -> 系统管理 -> Configure Global Security

基本配置:

只有注册的用户才能操作, 当然如果是大企业的话,可以采用项目矩阵授权策略, 详情可以 Google。
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

Jenkins 配置的备份和版本控制

很多情况下稍不注意改变了 Jenkins 的配置,把平台弄坏了,又想去恢复,这个时候就得把 Jenkins 的配置文件进行配置或者版本化,只需要把 
/root/.jenkins/ 加入 git 版本库里即可, 该目录下包含 Jenkins 所有信息, 包括每次构建历史信息和历史 jar 包

进行全备份然后覆盖掉该文件夹的时候,重新构建 JOB 会出现文件夹已经存在等 exception,
只需要手动删掉这些目录即可,不会丢失数据。(
这是 Jenkins 的一个 bug, 参考 JENKINS-21330)
「Jenkins+Git+Maven+Shell+Tomcat持续集成」实用教程

参考资料

  • Jenkins 权威指南

  • jdkleo

感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,你的鼓励是作者写作最大的动力,

如果您认为本文质量不错,读后觉得收获很大,不妨小额赞助我一下,让我更有动力继续写出高质量的文章。

本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

相关文章

暂无评论

暂无评论...