作者:极简小站
链接: 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 War 包,Jenkins 官网 。
启动 Jenkins ,将 War 包放入 Tomcat 容器里,启动 Tomcat。
提示:
EmailExtensionPlugin
(邮件通知)
GIT plugin
(可能已经默认安装了)
PublishOverSSH
(远程 Shell)
安装方法:
每个选项后都有个问号解释当前含义, (此步新手可以略过,默认不填即可)
配置方法:首页 -> 系统管理 -> 系统设置
管理员邮件地址就是邮件的发件人地址 (必须和后面邮件配置发件人邮箱一致,否则发不成功邮件)
JAVA_HOME
为 Jdk 路径 其中 Jdk 也可以从这里下载安装解压
配置 Maven Configuration
路径为 maven 的 setting.xml 路径 (Maven 安装略)
配置 Maven 项目
配置 Maven 安装目录
其中 PathtoGitexecutable
为你 git 执行的路径 一般默认是 / usr/bin/git , 如有差异,可以 whereis git
邮件模板配置
配置好邮件的模板 (可自定义 html 编写) User Name 为用户名 Password 为密码 SMTP 不同邮箱不同, 请自行 google(另外 gmail 邮件如无代理翻墙,请勿用,推荐 163 比较好配置)
2020年最新的常问企业面试题大全以及答案
未翻墙
翻墙后
模板效果图
Default Subject 代码:
模板 Default Content 分享:
配置邮件触发器
远程执行 shell 脚本 采用公钥私钥连接 其中 Key 里贴的是私钥 远程被管理的主机里贴的是公钥, 这 2 台主机就是相互信任,这样 scp 等操作就 不需要输入用户名和密码 。
公钥私钥生成方法:
管理主机 linux 上 ssh-keygen-t rsa-C"mousycoder@foxmail.com
一路回车 会在 / root/.ssh 下生成 idrsa(私钥) idrsa.pub(公钥)。
2.copy 公钥的内容到远程需要通信 (被管理) 的主机 /root/.ssh/authorized_keys
如无此目录文件则手动创建。
配置完之后可以 Test Configuration
配置 Job
步骤: 首页 ->新建 ->构建一个 maven 项目 (输入 item 名称)-> 进入该项目 ->配置
JOB 基本信息
项目源码管理
选择需要构建的分支,我们项目采用 git 工作流 默认 master 和 develop 平时开发构建 develop 分支,正式上线构建 master 并且打标签 (前公司 git 提交标准化相当复杂,分支相当多, 这里大家可以根据实际情况来)。
构建触发器
这里我们选择 poll 轮询每隔 1 分钟去检测 git 仓库代码库版本, 如果有更改则立刻构建,这里大家可以根据自己团队实际情况去制定,当然还有另外一个插件 gitlab-hook 可以主动去通知 jenkins 构建, 不过插件所占内存比较大,需要增大 tomcat 虚拟机内存配置,不然会内存溢出。
构建命令
我们采用最简单的 clean install
当然这里可以根据各自需求
例如 部署后的产物上传到 nexus 等, 详情参考 Maven 命令
Add post-build step
构建成功后执行 shell 命令
该 shell 的目的是取出 war 包 lib 中其他所有 lib 包 只留下 common-0.1-SNAPSHOT.jar 大大减少 war 包大小 (完整 war 包 30M 传包到阿里云服务器需要 2 分多, 精简后 2M,10 秒多, 大大提高构建速度)。
分享我的 Shell
构建成功远程执行 shell 脚本
execcommand
是远程 sh 的路径
分享我的 publish.sh 文件
作用是备份每次上传的 war 包 重启 Tomcat。
分享我的 kill-tomcat-force.sh 文件
作用是强制关闭 tomcat 进程
分享我的 Tomcat 精简方法
在 tomcat_home/lib 下新建自定义 jar 包文件,导入项目所需其他 jar 包 (以后有新增的话,单独再导一次)
修改 tomcat_home/conf/catalina.properties 搜索 =shared.loader 加上路径
此时 Tomcat 运行前会加载 server 下的 lib 包, 如果是多个项目公用一个 tomcat 的时候,就需要这里放公共的 lib 包,避免 tomcat 加载多余的 jar 包, 消耗内存。
构建后邮件设置
邮件主题收件人配置
邮件触发器
局部配置会覆盖掉全局配置, 我们之前在全局配置里配置了构建失败邮件触发器, 这里是更加精细的配置,
步骤:首页 -> 系统管理 -> Configure Global Security
基本配置:
只有注册的用户才能操作, 当然如果是大企业的话,可以采用项目矩阵授权策略, 详情可以 Google。
很多情况下稍不注意改变了 Jenkins 的配置,把平台弄坏了,又想去恢复,这个时候就得把 Jenkins 的配置文件进行配置或者版本化,只需要把 /root/.jenkins/ 加入 git 版本库里即可, 该目录下包含 Jenkins 所有信息, 包括每次构建历史信息和历史 jar 包
进行全备份然后覆盖掉该文件夹的时候,重新构建 JOB 会出现文件夹已经存在等 exception, 只需要手动删掉这些目录即可,不会丢失数据。 ( 这是 Jenkins 的一个 bug, 参考 JENKINS-21330 )
Jenkins 权威指南
jdkleo
感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,你的鼓励是作者写作最大的动力,