阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记

430次阅读
没有评论

共计 3954 个字符,预计需要花费 10 分钟才能阅读完成。

前言
    持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示。自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误。之前一直没有把这个做起来,最近的新项目正好有机会,费了一番功夫总算搞好了,特此记录。

1. 开发环境
    我这边建立的标准开发环境如下:
    1. Maven 做项目管理;
    2. Git 做代码管理;
    3. SpringMVC+Spring+Mybatis 搭建的程序框架;
    4. MySQL 作为数据存储,Druid 做连接池;
    5. unitils 作为测试框架;
    6. Hibernate Validator 作为数据验证;

    7. log4j 作为日志输出。
    注:其实这套东西非常像 Grails,但不敢用太激进的技术和框架,担心招人的问题 -_-!

2. Jenkins 的部署
    Jenkins 原名是 Hudson,这个渊源这里就不追溯了,网上多得是,但是千万别下错了,官网地址是 http://jenkins-ci.org/。建议直接下载最新版本。

    这个软件的安装是我见过最简单的了,直接取 war 包放到 tomcat 下,启动 tomcat 即可。相应的工程配置会在~/.jenkins 目录中。(当然你根据官网给的那种安装方法也行,只是在 debian 的那个弄法还要去下载 openjdk 等等,多下了很多东西,相关配置也按 linux 目录标准分开的,还要去找。)

    另外提醒一下,建议把 Jenkins 安装在 Linux 上,这样就不会出现 ssh 等命令找不到的问题,否则还要想办法去处理。

3. Jenkins 的插件
    安装好后直接访问“http://yourhost:8080/jenkins”即可进入主界面,点击“系统管理”->“管理插件”,首次进入都是空白的,要等 1 分钟左右才能看到内容,在后台估计是在做更新或者下载,然后重新再进此界面就能看到内容了。

3.1 Git 插件
    在“可选插件”中找到“GIT plugin”安装,最下面有个安装完重启的勾选项,选中即可。这里最搞笑的是检测网络是否连通的办法是去尝试打开 google,岂不知天朝是打不开的,还好不影响下载。。。

3.2 Email 插件
    这个事情非常蛋疼,之前测试怎么都发布出来邮件,最后升级了一下默认插件就行了,狂汗。在“可更新”中找到“Mailer Plugin”选中并更新即可。另外如果想有更丰富的邮件内容,就去“可选插件”中安装“Email Extension Plugin”,具体邮件内容配置网上大把可以搜。

3.3 其他插件
    默认就装了很多常用插件,比如 Maven、Junit 等等,如果使用感觉有问题可以尝试升级一下版本,但是没有升级说明,也不知道升级了什么东西。

4. 系统设置
    主界面点击“系统管理”->“系统设置”即可进入。重点配置以下内容:
    1. Java、Git、Maven 的目录位置,确保可以正确找到命令;

    2. Jenkins URL,自动生成的,检查一下即可;
    3. 邮件的设置。这里注意一下,上面有一个“系统管理员邮件地址”需要填写,另外“Extended E-mail Notification”中填写配置,原来的“邮件配置”就不用再理会了。

5. 项目设置
    在主界面直接“新建”,就会有一个新的项目。重点配置以下内容:

    1. 源码管理:选择 Git,填写“Repository URL”,并加上相应的“Credentials”,其中认证信息用私钥的话干脆直接把私钥内容填上去就行了,省的不知道目录查找规则还不知道出的啥问题。

    2. 构建触发器:这个地方要把“Build periodically”和“Poll SCM”都选上,时间格式都填写成一样的即可,比如“H/15  * * * *”,下面会有个具体执行时间的提示,Build 动作会自动比 Poll 延迟 3 分 40 秒,这个设定还是很合理的。

    3. 构建:增加两个构建步骤,分别是“Execute shell”和“Invoke top-level Maven target”,注意先后顺序,可以拖拽摆放的。脚本执行根据自己需要,比如我需要去修改数据库连接配置,官方建议是自己在工程里面写好脚本,这里直接调用,而不是在这写一个完整的脚本。Maven 构建就加上“clean test”即可,就是运行“mvn clean test”的命令。

    4. Publish Junit test result report:在测试报告(XML)上加上“**/target/surefire-reports/*.xml”即可,这样就会每次测试完自动找到测试报告,在 Jenkins 上即可在每个构建结构里面查看到。

    5. 邮件通知:在构建后增加“Editable Email Notification”,填写邮件的接受者、内容格式可以直接用全局变量,重点是配置一下发送触发条件。

6. 安全性配置
    经过以上配置进行一次构建就会发现,Jenkins 可以看到太多内容了,包括 pull 到的源码,所以非常有必要增加权限控制。进入“系统管理”->“Configure Global Security”中进行如下步骤:
    1. 启用安全;

    2. Jenkins 专有用户数据库,先允许用户注册;
    3. 授权策略选择“安全矩阵”,新加一个“admin”的用户,把所有权限都开给 admin 用户;
    4. 在主界面的用户中找到 admin,进行配置,设置登陆密码;
    5. 先重新登陆测试一下是否 admin 正常,没有问题就关闭允许用户注册,把匿名用户的所有权限都去掉。

7. 自动化部署
    这里我没有让 Jenkins 每次测试都去部署,一方面是考虑到单元测试基本已经满足需要了,另一方面因为测试太频繁了,一直部署也搞得 Stage 测试环境要经常重启,反而影响正常的人工测试。所以自己写了个脚本,在必要的时候去运行一下去自动完成整个部署工作。
#!/bin/sh
 
# update code
git pull
 
# package
mvn clean
mvn package -Dmaven.test.skip=true
 
# deploy
WAR=`ls target | grep war`
TOMCAT=/home/test/apache-tomcat-6.0.41
mv target/$WAR $TOMCAT
cd $TOMCAT
# invoke another deploy script
sh deploy-war.sh $WAR webapps

 

8. 一个非常蛋疼的问题
    这个和以上问题都无关,只是极其不解的是这个错误在 Windows 下不出现,在 Linux 下打成 War 也不会出现,只有在 Linux 下直接执行 Maven test 就会出错。其实问题的根源就是配置书写不够规范,但是错误出现的不一致性实在让人蛋疼。报错如下:
1 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx

    这个就是 Mybatis 找不到绑定的类,但是 xml 是正确打包的,怎么看都是没大问题,并且 windows 也是对的,最后发现是我在写模糊路径的时候,classpath 后面必须要加个 * 才是标准写法,正确写法如下:

    <bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>
        <property name=”basePackage” value=”com.gzxitao.demo.*.dao”/>
    </bean>
 
    <bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>
        <property name=”dataSource” ref=”dataSource”/>
        <property name=”configLocation” value=”classpath:configuration.xml”/>
        <!– 这里是要扫描多个目录下的文件,必须声明成“classpath*”,否则在某些情况下会报错 –>
        <property name=”mapperLocations” value=”classpath*:com/gzxitao/demo/*/dao/*.xml” />
    </bean>

Maven 权威指南_中文完整版清晰 PDF  http://www.linuxidc.com/Linux/2014-06/103690.htm

Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm

Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm

Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm

Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm

Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm

Jenkins 的分布式构建及部署——节点  http://www.linuxidc.com/Linux/2015-05/116903.htm

Jenkins 的详细介绍 :请点这里
Jenkins 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-06/118606.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3954字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7994156
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...