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

简介:

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

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

    7. log4j作为日志输出。

    8.centos6.5系统

    注:其实这套东西非常像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 的下载地址请点这里



本文转自 msj0905 51CTO博客,原文链接:http://blog.51cto.com/sky66/1698382

相关文章
|
3天前
|
Ubuntu jenkins 测试技术
软件测试中的自动化与持续集成实践
【9月更文挑战第15天】在软件开发的快节奏世界中,自动化测试和持续集成(CI)已成为确保质量和效率的关键策略。本文旨在揭示如何通过实施自动化测试框架和CI流程来优化开发周期,减少人为错误,并加快产品上市时间。我们将探讨一些实用的工具和技术,以及它们如何帮助团队实现更流畅、更可靠的软件发布。
|
3天前
|
敏捷开发 jenkins Devops
软件测试的新篇章:自动化与持续集成的融合
【9月更文挑战第15天】在软件开发领域,质量保障始终是核心议题。随着敏捷开发的普及和DevOps文化的兴起,自动化测试和持续集成(CI)已成为现代软件工程不可或缺的组成部分。本文将深入探讨自动化测试的重要性、实施策略以及如何将其无缝集成到CI流程中,以实现更高效、更稳定的软件开发周期。通过具体案例分析,我们将揭示自动化测试和CI如何相互促进,提升软件交付的速度和质量。
|
12天前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
|
16天前
|
运维 Cloud Native Devops
云原生时代的DevOps实践:自动化、持续集成与持续部署
【9月更文挑战第3天】未来,随着人工智能、大数据等技术的不断融入,DevOps实践将更加智能化和自动化。我们将看到更多创新的技术和工具涌现出来,为软件开发和运维带来更多便利和效益。同时,跨团队协作和集成也将得到进一步加强,推动软件开发向更加高效、可靠和灵活的方向发展。
|
18天前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
39 1
|
16天前
|
jenkins 持续交付 网络安全
利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
43 0
|
23天前
|
Java Apache Maven
Maven 项目文档
本节介绍如何构建Maven项目文档,以C:/MVN目录下的`consumerBanking`为例。通过`mvn archetype:generate`命令快速搭建Java项目骨架。为避免`mvn site`执行时遇到`java.lang.NoClassDefFoundError`错误,需在`pom.xml`中加入或更新`maven-site-plugin`至3.3版本和`maven-project-info-reports-plugin`至2.7版本。
|
5天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
1天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
9天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档

热门文章

最新文章