Java自動化佈署
透過Gradle + Jekins + Gitlab
Why?
手動部屬的問題
人會犯錯 , 手動佈署容易發生問題 , 尤其在 站台 及 區域 越來越多的時候。
手動部屬花時間 , 尤其是站台越來越多的時候
UnitTest要手動測試
人越多 , 更新越頻繁 => 更多的佈署次數
新人學習要話一段時間才能了解整個手動部屬的流程
上手慢
Developer的希望
程式上傳後 , 自動有人
代勞佈署
有人幫忙跑測試.
架構
Why Gradle
Gradle是專案對外的包裝工具 , 非常重要
透過Maven or Gradle , 可以作到包裝行為的一致性
Library的下載及管理交由工具處理 , 不用再自己處理
Gradle的設定檔比Maven來的簡潔
Gradle新增自訂的包裝工作比Maven來的容易
Jenkins 針對常見的包裝工具支援度佳
http://gradle.org/whygradle-build-automation/
Why Jenkins
Open Source,free
被大量測試過
社群大 , 社群能量大 , 更新快
Plugin超級多
容易上手
其他的CI Server大部分都要收費
Why GitLab?
社群版不收費 , 也有商業版.
Gitlab-CE功能接近Gitlab-EE , 功能豐富
安全控管細 , 可針對個別專案作控制
提供Code Review界面
提供簡單的wiki or issue tracking
Gitlab是目前最受歡迎的private Git repository
有被100,000人數的大型企業採用
專案有接口可以主動跟其他服務作串接
整合方式
分為主動或被動
主動
Developer 上傳Code到Gitlab
Gitlab觸發Jenkins 拉專案
Jenkins拉回專案 , 進行建置
Jenkins部屬到設定的目標站台(Tomcat)
被動(沒測試)
Developer 上傳Code到Gitlab
由Developer or Issue 系統發出merge request 給Gitlab
Jenkins 設定排程 , 定期檢查是否有merge request
如果有 , Jenkins拉回專案 , 進行建置
Jenkins部屬到設定的目標站台(Tomcat)
下面介紹主動的方式
環境說明
測試環境的架設使用Docker , 以便快速架設各服務
主機為ubuntu server
Gradle Project
包裝工具導入的差異
專案目錄會有固定的預設路徑 , 跟MyEclipse 或 Eclipse預設路徑不同
會有Test的目錄方便存放UnitTest
大部分OpenSource的Library , 只要Maven Repository有的話 , 不用自行掛載. 後續可整合private Library repository.
會有預設的包裝任務 , 沒有依賴IDE=> 包裝可跨IDE支援
Gradle
Gitlab
Gitlab
Jenkins
Jenkins-plugin
Jenkins-plugin
Jenkins
Jenkins
Jenkins
Jenkins
Run
Run
基本上差不多等於外面說的Continuous integration
但 Continuous integration 通常要求
整個流程要非常順
integration的週期要短.
可以再做的優化
根據不同的Git分支 , 自動發布到不同的Zone
整合merge request plugin
訊息提示整合
library發布及自動版號整合nexus
動態根據feature branch作自動發布及建置Ap Server
參考
http://www.slideshare.net/fatmuemoo/juc-boston2014pptx
http://www.vogella.com/tutorials/Jenkins/article.html
End
Made with Slides.com