也许是目前最好的Jenkins部署指南
通过标题能看出我是锤子的粉丝,哈哈哈,本人确实是一名锤粉,看过锤子历届的发布会,买过我锤发布的每一款手机产品。不管我锤以后是一小撮人用,还是后面烂大街的人用,我都为这家企业的情怀买单。
好了,言归正传。很久之前,看到项目组打包,部署测试环境的确是一个重复劳动,费时又费力的过程。几个人同时开发一个项目,修改或新增的类很多,导致只能对项目打全量包。打包的过程是固定的,机械的活动:
1 ) 将代码从版本控制工具上更新到本地(我们用的是SVN);
2)将项目所依赖的jar包从公司的maven私服上面下载下来;
3)使用maven将项目打成war包;
4)备份测试环境服务器webapps下的项目文件;
5)再将打好的war包上传到测试环境服务器webapps下;
平时项目组开发,要打包到测试环境的过程就是这样的。整个过程非常乏味,因公司内网带宽有限制,从公司maven私服上下载下来jar的时候非常慢,所以导致整个过程耗时也是非常长的。这种情况存在已经有一段时间了,后来我在无意中看到jenkins,决定通过搭建jenkins的持续集成实现自动打包,发布来简化这个机械,乏味的手动打包、发布的过程。
具体步骤如下:
一、Jenkins部署
二、安装需要的jenkins插件
三、配置jenkins
一、Jenkins部署
使用jenkins部署前,需要安装一些必要的环境
1)、jdk
2)、maven
3)、tomcat
如果是 jdk是1.7的版本的话,jenkins的部署可以参考这篇:
https://www.cnblogs.com/hdwang/p/6081994.html 但其中有些插件已与jenkins的版本不兼容,
(如果是1.7版本的话,可以下载高一点版本的jenkisn.war)
需要手动下载能兼容版本的插件
手动安装插件见这篇:
http://www.mamicode.com/info-detail-1794758.html
jenkins安装过程,参考上述博文即可,在此不做详述。如安装过程遇到以下错误:
1、启动过程如果日志文件中报错如下图: (原因是 jenkins 版本和 jdk版本不配,升级jenkins版本或者jdk版本即可)
2、如果日志文件中报错如下图: ( 原因是tomcat目录下缺少 temp 文件夹,在tomcat目录下建立temp文件夹,重新启动即可)
详情见: https://stackoverflow.com/questions/41679543/jenkins-installation-on-tomcat-giving-hudson-util-notempdir-java-io-ioexception
安装所需要的jenkins插件:
安装过程中安装了建议的插件,为了能实现自动部署还需安装以下插件:
1 ) Subversion / Git ( 版本控制工具,用来获取项目源码)
2 ) SSH plugin ( 通过SSH协议连接不同主机,用来执行脚本命令,如:备份 )
3 ) Deploy to container Plugin (发布war包到容器)
配置jenkins:
开始配置jenkins自动部署前,需要准备一些关于tomcat的配置:
1 ) tomcat 的 webapps 文件夹下 的manager目录 一定的有(如果没有的 重新下载一个tomcat软件,复制其中的manager文件夹即可)
2)编辑 tomcat conf 下的 tomcat-users.xml 文件,添加相应的角色,账号,以及为账号赋予相应的权限。(后续jenkins推送war包到tomcat webapps下的时候,需要这个账号以及权限)
编辑如下:
<role rolename="admin-gui"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<!-- <user name="tomcat" password="tomcat" roles="manager-gui,manageri,manager-jmx,admin-gui" />-->
<user name="admin" password="[email protected]#" roles="manager-gui,manager,manager-jmx,admin-gui,manager-script,manager-status" />
3 ) 修改完 tomcat-users.xml 后,需要重启tomcat才能生效,可以在浏览器上做以下验证:
如果出现下图,则说明账号权限验证通过:
关于权限问题,如果按照上述配置了访问 http://ip:port/manager/text/list 还是 403的话,就需要修改tomcat/webapp/manager/META-INF
注释掉以下信息:
重启再验证。如果还是 403 的话,看 tomcat/conf/Catalina/localhost是否有下图所示四个文件:
如果有,将四个文件中的以下信息都注释掉:
重启,再验证即可。
关于 403这个问题,可以看下这篇博文(基本总结了各类403问题):
http://blog.****.net/staticabc/article/details/79255790
整个配置过程非常清晰:( 如图 )
分为以下几个模块:
General : 项目构建的一些通用配置。
源码管理: 配置版本管理工具,代码仓库的地址以及账号密码。
构建触发器: 配置一些特定情况下触发构建。(比如一天构建一次 等)
构建环境 : 配置一些执行脚本。(比如说 构建前先备份)
构建 : 配置 maven 的 操作 命令,也可以配置执行脚本(但是只能执行jenkins部署本机的脚本)
构建后的操作:配置一些在打包成功之后的操作,常见的有 部署(Deploy war to a container),发邮件通知呀..... 等等。
1、General :
2、 源码管理 :(选择版本控制工具 SVN/Git,输入仓库地址,以及SVN账号和密码)如下图:
添加SVN账号和密码:
输入SVN仓库地址,选择刚添加的SVN账号和密码:
其中 Check-out Strategy 选择的是 每次打包都从SVN上获取最新代码。
3、构建触发器(可以通过 Build periodically 这个配置成 周期性构建)
4、构建环境:
因我构建的应用和 jenkins部署的机器 不在同一台机器,所以执行备份脚本的时候需要配置SSH:(保存刚刚的配置,进入到首页——>配置)
配置构建的项目所在机器的SSH信息:
继续配置执行备份脚本:
5、构建: 配置mavne打包命令
6、构建后操作 : ( 配置发布到tomcat 容器的相关信息 )
PS : 上图中的 Credentials 账号 和密码 就是 我们前面 写在 tomcat-users.xml文件中的账号和密码。
WAR/EAR files 这个文件的目录是 相对目录,相对于 target目录。(target目录是 在 jenkins的workspace的当前项目名称下)
配置完之后 构建即可:
查看Console Output,能看到jenkins在执行的操作,按照我们的配置,顺序应该是这样的: 从SVN检出代码——》备份——》打包——》发布到tomcat中。出现下图的结果,即代表发布到tomcat容器成功了。
本来部署jenkins自动打包是为了主要项目搭建的,然后搭建完全后,其它不常用的项目通过配置都可以自动部署了,唯独主项目打包不成功,因组内也一直在负责新迭代,在找了一段时间,没找到解决办法后,这个问题就暂停了一段时间。后面有个版本完成需求后,空闲时间比较多,于是继续排查这个问题,这次终于找到原因了。如下:
项目打包一直报这个错:
程序包com.sun.image.codec.jpeg不存在
解决方案:
报这个错误的原因是,Maven没有权限操作jre自带的jar包。
找到rt.jar和jce.jar上传到nexus的3rd party仓库,在pox.xml中引入依赖
详情见博文:
http://blog.****.net/gisredevelopment/article/details/29223139
https://my.oschina.net/ydsakyclguozi/blog/212917
看了下时间,这个问题知道解决,竟有两、三个月之久,最终还是得到了解决了。
最近这段时间,因公司测试环境需要迁移到新服务器上,重新部署了jenkins,关于jenkins部署的文章网上很多,我写这篇文章就是为了记录下自己在部署,配置过程遇到的一些问题,顺便分享下,如果你恰巧遇也到了这些问题,看到这篇文章能很快解决。
后记:
迁移jenkins的时候,在原机器上做了个测试,无意之间发现,项目组在三年前就曾引入了jenkins,查看构建记录,构建了40 多次,从没构建成功过。估计是因此放弃了。想想也是挺有趣的,事隔三年,我又无意部署了Jenkins,哈哈哈。遂截图留念:
参考链接:
1) 用户权限的配置 tomcat-user.xml
conf/Catalina目录的权限
webapps/manger/META-INF/context.xml
http://blog.****.net/staticabc/article/details/79255790
2) jenkins配置 SSH服务器 (执行脚本命令)
http://blog.****.net/liujingqiu/article/details/58584559
3) 报这个错误的原因是,Maven没有权限操作jre自带的jar包。
maven 程序包com.sun.image.codec.jpeg不存在的解决方案
找到rt.jar和jce.jar上传到nexus的3rd party仓库,在pox.xml中引入依赖
http://blog.****.net/gisredevelopment/article/details/29223139
https://my.oschina.net/ydsakyclguozi/blog/212917
4) 手动安装插件—————http://www.mamicode.com/info-detail-1794758.html
5) war包路径说明————http://blog.****.net/tragedyxd/article/details/51852276