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。