Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。 --from wikijava
安装:redhat/centos
docker
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
PS1:若是你有tomcat/jetty等容器能够直接下载war部署。不过须要本身建立jenkins用户而且本身写启动脚本。。。shell
PS2:jenkins官方提供稳定版的docker镜像,见https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+with+Docker缺点是5000端口很差用。。并且要特别处理一下时区问题以及中文乱码问题。。建议仍是本身写dockerfile吧从dockerbuild吧。。。数据库
安装完成后打开浏览器,进入localhost:8080能够看到以下界面centos
选择新建项目,这里以maven项目为例:
浏览器
选择源码管理方式:这里以svn为例,填写用户名密码。策略推荐选择先revert在update的策略,防止build出错。
tomcat
而后安装一些插件:安全
自定义邮件:
服务器
Email Extension Plugin oracle
scp远程拷贝文件支持
sonar支持
远程登陆执行脚本支持
配置:
java通常须要指定目录(自动下载须要oracle账号。并且很慢),而maven则通常自动下载便可。
另外邮件服务器配置在最新版1.581上有一个小bug,测试邮件不管你填什么都会提示验证失败。缘由是由于。。。。jenkins的代码中传递的密码参数为空:(....不过不影响正常发送。
sonar的配置:再写一边数据库地址。。。。虽然旁边的问号提示挺全面的。
剩下的scp,ssh比较简单了。按照提示便可。
而后就是项目具体设置了:
一、mail-ex比较复杂推荐http://blog.csdn.net/wangmuming/article/details/22925357,这篇写的很详细,做者比较用心。
二、自动构建:与crondtab 相似 分别
若是使用版本控制系统,构建一次后,就会自动导入到用户列表中,这时能够为每一个用户设置用户名密码和邮件地址,这样就能根据用户提交分别发邮件了。
安全配置:若是你的jenkins由于某些缘由要暴露在公网或者公司内部须要权限控制那最好设置一下用户。
打开系统设置-安全设置通常而言选择jenkins专有用户数据库便可(这样就可使用上面jenkins设置的用户名密码登陆了),对于受攻击妄想症患者请移步https://wiki.jenkins-ci.org。UNIX用户和LDAP配置比较麻烦,而servlet方式好像是为了向后兼容?(待调查)
PS:注意必定要在用户注册完以后将容许用户注册取消。
多war包部署:
jenkins提供了专门在远程deploy war包的插件,可是。。只能部署一个。。。。:(并且连续的持续集成容易致使tomcat/jetty等内存溢出(跟permgen的溢出有关。。话说java的gc何时能在主程序运行期回收一下permgen)所以最好的办法仍是使用ssh远程部署。ssh远程部署除了设置ssh免登陆,使用expect导入用户名密码以外,jenkins还提供了scp和ssh插件。可是scp属于构建后操做,也就是说无论构建成不成功都执行。。。:( 坑爹啊!!
解决办法:
一、使用post-step中打执行shell功能写一个钩子。我实现的方式是使用软链接,详情见代码:
base=/bugaosuni ln -s $base/A.war $base/AA.war ln -s $base/B.war $base/BB.war ln -s $base/C.war $base/CC.war ln -s $base/D.war $base/DD.war
二、而后在pre-step中添加shell脚本,每次构建前清除上次的链接文件。
export LANG="en_US.UTF-8" base="haha" file=( "$base/A.war" "$base/B.war" "$base/C.war" "$base/D.war" ) for iter in $file do echo finding $iter if [ -e "$iter" ] then echo $iter exits!!! rm "$iter" fi done
利用软链接特性(cp复制的不是链接自己而是被链接文件)和jenkins每次构建都会清除上一次打war包特性。就能够仅仅在每次build成功以后才部署。
注意:若是你不想在unstable状况下部署,那么post-step中执行条件必定要选择Run only if build succeeds。(顺便吐槽一下,jenkins能不能为每一个post-step单独指定一个执行的条件选项,而不是一锅端啊!)
对于tomcat/jetty热部署产生的内存溢出问题,能够在每次部署前使用远程ssh服务器重启tomcat/jetty。固然你也能够利用zabbix监控tomcat状态,自动重启tomcat。