第一集 hudson+gradle+git+maven(非必選)持續集成編譯,打包,發佈到倉庫集成php
隨着軟件開發複雜度的不斷提升,團隊開發成員間如何更好地協同工做以確保軟件開發的質量已經慢慢成爲開發過程當中不可迴避的問題。尤爲是近些年來,敏捷(Agile) 在軟件工程領域愈來愈紅火,如何能再不斷變化的需求中快速適應和保證軟件的質量也顯得尤爲的重要。java
持續集成正是針對這一類問題的一種軟件開發實踐。它倡導團隊開發成員必須常常集成他們的工做,甚至天天均可能發生屢次集成。而每次的集成都是經過自動化的構建來驗證,包括自動編譯、發佈和測試,從而儘快地發現集成錯誤,讓團隊可以更快的開發內聚的軟件。
持續集成的核心價值在於:git
1 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減小重複過程以節省時間、費用和工做量;
2 持續集成保障了每一個時間點上團隊成員提交的代碼是能成功集成的。換言之,任什麼時候間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能;
3 持續集成還能利於軟件自己的發展趨勢,這點在需求不明確或是頻繁性變動的情景中尤爲重要,持續集成的質量能幫助團隊進行有效決策,同時創建團隊對開發產品的信心。程序員
業界廣泛認同的持續集成的原則包括:shell
1)須要版本控制軟件保障團隊成員提交的代碼不會致使集成失敗。經常使用的版本控制軟件有Subversion Git 等;centos
2)開發人員必須及時向版本控制庫中提交代碼,也必須常常性地從版本控制庫中更新代碼到本地;api
3)須要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建能夠被軟件的修改來直接觸發,也能夠定時啓動,如每半個小時構建一次;tomcat
4)必須保證構建的成功。若是構建失敗,修復構建過程當中的錯誤是優先級最高的工做。一旦修復,須要手動啓動一次構建。服務器
因而可知,一個完整的構建系統必須包括:app
一個自動構建過程,包括自動編譯、分發、部署和測試等。
一個代碼存儲庫,即須要版本控制軟件來保障代碼的可維護性,同時做爲構建過程的素材庫。
一個持續集成服務器。本文中介紹的 Jenkins /Hudson 就是一個配置簡單和使用方便的持續集成服務器。
準備工做(centos 7 爲例)
Hudson(戳一下進入官網)是一款輕量級、易擴展、易配置的持續集成平臺,該集成平臺maven2有良好的支持,而且擴展插件豐富,包括findbug,PMD靜態分析插件、emma單元測試覆蓋率插件、junit測試報告插件等等。
下面咱們以Hudson持續集成平臺爲例,主要講解怎麼安裝hudson和hudson擴展插件的使用,並以maven2工程爲例,創建新做業。
啓動方式一
nohup java -jar hudson-1.398.war > hudson.log 2>&1 & // 啓動hudson
啓動方式二
下載Hudson的war包,http://hudson-ci.org/ 在tomcat環境裏,在confCatalinalocalhost 中新建配置文件hudson.xml,配置以下
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="HudsonPath/hudson.war" path="hudson" reloadable="false"> </Context>
HudsonPath爲hudson.war的目錄路徑。
啓動tomcat,訪問http://localhost:8080/hudson便能訪問咱們的持續集成應用了。Jboss環境中,複製war包到default目錄下便可。以下爲安裝好之後的hudson訪問界面。
系統管理選擇管理插件
根據本身項目須要選擇須要安裝的插件,固然hudson也支持本身開發插件上傳,這裏就不贅述。
系統管理中進入系統設置
因爲使用了gradle進行打包,上一步已經安裝好了ant和gradle的插件。不過前提是安裝好了jdk,git,gradle等的運行環境。具體怎麼安裝這裏也不贅述,你能夠去去問GG(google)
這裏講解兩種,在咱們的項目中也是有兩種包,一種是jar包,也就是一些基礎jar包,須要提供給其它項目使用。
另外一種是服務包(tar),裏面有4種內容,配置文件,自身的jar包,依賴的libs包,和相關的腳本(gradle和啓服停服腳本)
配置job明細以下:
因爲每次發佈jar到maven私服須要手動打開Nexus移除陳舊的jar包,這樣比較耽誤時間,這裏補充一個shell腳本配置方式,在每次打發布jar包前,將maven私服中對應的jar包移除掉,再執行打包發佈.配置以下:
[注意:這裏是hudson和maven私服是在同一個服務器上,若是不是得需ssh上去進行相應的操做]
拉取最新的代碼到本地倉庫,配置以下:
[注意:/fishsaying/admin/code_server.txt這個文件是用來配置須要打包的代碼的分支 配置好的效果如圖所示]
須要將遠程倉庫的代碼克隆到本地服務器,如/fishsaying/build_dir/sys
編寫腳本獲取須要動態選擇的分支的最新代碼到本地 代碼以下
利用groovy語音編寫,不會的小夥伴能夠學習一下這個在安卓開發中經常使用
build.gradle腳本文件以下
apply plugin: 'java' apply plugin: 'maven-publish' // 設置 JDK 版本 sourceCompatibility = 1.8 targetCompatibility = 1.8 //打包的版本 def _version = System.properties['version']; // 設置編譯使用utf-8編碼 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } //maven倉庫地址 repositories { maven { url "http://192.168.3.108:8081/nexus/content/groups/public/" } } //依賴的第三方jar包 dependencies { compile "com.fasterxml.jackson.core:jackson-annotations:2.4.0", "com.fasterxml.jackson.core:jackson-core:2.3.3", "com.fish.saying:fishsaying-log-sdk:2.0.0" testCompile "junit:junit:3.8.1" } //說明打包成jar文件 task apiJar(type: Jar) { baseName "fishsaying" from sourceSets.main.output } //推送到maven私服 設置好骨架 publishing { publications { api(MavenPublication) { groupId 'com.fs.fishsaying-service-api' artifactId 'fishsaying-service-api' version _version from components.java } } } //制定須要deploy的maven倉庫地址 publishing { repositories { maven { url "http://192.168.3.108:8081/nexus/content/repositories/thirdparty/" credentials { username 'admin' password 'admin123' } } } }
補充:如何搭建maven私服請google這裏再也不贅述。
整個流程作完就能夠進行打包工做,這裏選擇的是手動打包,持續集成中的第一步完成,後續增長自動部署,測試,上線的內容,敬請期待……^_^
小福利:持續集成