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