jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如github、bitbucket直接集成。
jenkins本身是用java语言开发的,所以安装jenkins的机器至少要有jdk,另外建议git、ant、maven、gradle、groovy等工具也一并安装好,方便与这些构建工具集成。
1、安装及启动
直接从 http://mirrors.jenkins-ci.org/war/latest/jenkins.war下载最新的war包,通过FTP工具将jenkins.war放到tomcat的webapps目录下,
进入到tomcat的bin目录下,启动tomcat
启动成功后,浏览http://192.168.71.128:8080/jenkins/,弹出如下页面,说明安装已经成功了,是不是很简单啊!
2、安全设置
默认情况下,jenkins允许匿名用户做任何事情,这也就意味着谁都可以使用jenkins进行发布,这显然不够安全,jenkins支持多种安全认证机制,下面演示最传统的用户名/密码模式如何设置:
参考下图,进入Configure Global Security界面
参考下图设置,上面的设置大概意思为采用jenkins内置的用户名、密码认证机制,同时允许用户注册,匿名用户有管理权(首次配置时,建议允许匿名用户有管理权限,以避免操作错误后,无法正常进入jenkins管理界面,等其它用户权限都设置好以后,再去掉匿名用户的管理权)。
保存后,jenkins右上角会有一个注册链接,点击进去,注册一个用户,参考下图:
注册用户,如下图
然后再进入Configure Global Security界面:
可以看到,用户列表多了一个jay的用户,而且有管理权限,可以尝试用jay的用户名登录一下,如果ok,就可以去掉匿名用户的管理权限了,一般情况下,个人建议去掉允许用户注册的勾选(实际应用中,一般都是提前建好所有用户名,很少允许发布系统随意注册),保存后,再次访问jenkins。
就会强制只能登录用户才能使用了。
3、系统配置
第一次进入里面没有数据,我们需要创建job,点击左上角的new job,在new job页面需要选择job的类型,Jenkins支持几种类型,我们选择“构建一个maven项目”,Job名为:pos-web,如图所示:
点击OK按钮后,进会进入详细配置界面,详细配置界面的配置项很多,不过不用怕,大部分使用默认配置就可以了,下面就说说我们需要修改的几个地方:
A、源码管理
因为我们使用SVN管理源码,所以这里选择Subversion,并在Repository URL中输入我们的SVN地址:https://xxx.xxx.xxx.xxx:xxxx/svn/POSCCSProj/trunk
输入SVN库的URL地址后,Jenkins会自动验证地址,并给予提示。
点击红色字体部分的enter credential链接,进入如下页面:
设置好访问SVN库的用户名和密码后,点击OK按钮,显示:
说明设置成功。点击Close按钮,返回之前的Source Code Management页面。此时不再有红色警告信息了。
B、Build
配置到这里,可能有人发现在Build配置节点,有红色错误信息,提示
Jenkins needs to know where your Maven2 is installed.
Please do so from the system configuration.
如图所示:
(补充Goals and options :
clean install)
这是因为Jenkins找不到maven的原因,点击"system configuration",是system configuration的maven配置中添加maven目录就OK,如下图:
点击左下角的SAVE按钮,保存设置。
保存好所有配置后,我们第1个job就算是完成了。
4、手动构建
在经过上面的配置后,回到Jenkins首页,在首页可以看到刚才添加的1个job,如下图:
点击某1个job后后面的"Schedule a build"图片手动构建,点击完后,会在左边的Build Queue或者Build Executor Status 显示正在构建的任务,在自动构建完后,刷新页面,就可以看到构建结果了,如何某个项目构建失败,点击项目后面的构建数字(从1开始递增)进入项目的"Console Output "可以查看项目构建失败的原因。当然我们也可以配置把构建失败的结果发到邮箱。
查询构建输出日记,点击如下图标出的“Console Output”
输出结果如下
到目前为止,1个简单的自动构建环境就搭建好了,很简单吧。
5、自动部署
看完上面发现Jenkins配置真的很简单,几分钟就搭建好自动构建环境,但环境搭建好后发现1个问题,现在是能自动构建了,但是构建好的web.war都还是在Jenkins目录下,并没有发布到tomcat中,还需要手动copy过去?
这是个问题,不过别急,要达到自动部署的目的,需要安装1个Jenkins的部署插件。选择“系统管理”菜单的“管理插件”:
选择“可选插件”,右上角搜索Deploy Plugin插件,点击下图中圈出的Deploy Plugin
点击最新版本
选择最新版本1.10,进行下载
在jenkins中安装Deploy Plugin插件,系统管理–>插件管理–>高级,上传插件中选择deploy.hpi进行上传
上传完成之后,自动进行安装
安装完成
安装完成之后,勾选“安装完成后重启Jenkins”,系统自动重启
此时,在插件管理的“已安装”Tab页,可以看到部署插件已安装完毕。
重新进入web的configure 配置界面,在最下面的“构建后操作”选择"Deploy war/ear to a container"选项
war file使用的是Jenkinsworkspace的相对目录,远程容器需要输入url、用户名、密码。
如果你部署的是集群环境那么可以添加多个容器来部署应用。
此时只要我们运行我们的任务即可将我们的应用发布到tomcat,记住这里要把应用服务器的防火墙关闭。
登录用户需要具备manager-script角色,否则会报“The username you provided is not allowed to use the text-based Tomcat Manager (error 403)”错误,则参考上一篇博文“ The username you provided is not allowed to use the text-based Tomcat Manager (error 403)”,则可能成功解决该问题。
WAR/EAR files:war文件的存放位置,如:target/test.war 注意:相对路径,target前是没有/的。
Context path:访问时需要输入的内容,如ofCard访问时如下:http://192.168.x.x:8080/ofCard/如果为空,默认是war包的名字。
Container:选择你的web容器,如tomca 6.x
Manager user name:填入tomcat-users.xml配置的username内容
Manager password:填入tomcat-users.xml配置的password内容
Tomcat URL:填入http://192.168.x.x:8080/
Deploy on failure:构建失败依然部署,一般不选择
注意:虽然这种部署方法可能会导致tomcat加载时出现卡死的现象。但是也是最简单的部署方式。如果卡死了重启下就好了,将tomcat的java内存参数调高可以解决这个问题。
最后不要忘记点击保存喔。
现在我们重新手动构建
构建成功后,查看输出日记,自动部署成功
打开远程tomcat服务器的webapps目录,发现war包已经过来了,但是不知道为什么war包名字是ROOT.war,而不是pos.war,很是奇怪,待这问题解决完成了再来更新。
以上方法虽然简单,但是实际项目中,我们不这么使用,我们经常使用Excete shell或者Send files or execute commands over SSH
下面代码是我们一个测试库的shell,仅供参考
pid_value=`netstat -nlp | grep :9999 | awk '{print $7}'| awk 'BEGIN{FS="/"}{print $1}'`
if [ ! $pid_value ]; then
echo "PID IS NULL"
else
echo "PID NOT NULL"
kill -9 $pid_value
fi
cd /app/pos/apache-tomcat-7.0.68/bin/
rm -rf catalina.out nohup.out
cd /app/pos/apache-tomcat-7.0.68/webapps/
rm -rf pos pos.war
mv /home/jay/.jenkins/workspace/pos/pos-web/target/pos.war /app/pos/apache-tomcat-7.0.68/webapps/pos.war
sleep 3
/app/pos/apache-tomcat-7.0.68/bin/startup.sh
6、邮件通知设置
在Recipients中输入收件人邮件地址,如果用多个收件人用“,”英文逗号隔开