Java自动化集成
使用Gradle + Jekins + Gitlab
Why?
手动部署的问题
- 人会犯错 , 手动佈署容易发生问题 , 尤其在 站台 及 区域 越来越多的时候。
- 手动部属花时间 , 尤其是站台越来越多的时候
- UnitTest要手动测试
- 人越多 , 更新越频繁 => 更多的佈署次数
- 新人学习要话一段时间才能了解整个手动部属的流程
上手慢
Developer的祈望
- 程式上传后 , 自动有人代劳佈署
- 有人帮忙跑测试.
架構
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2606931/Continuous_integration.png)
Why Gradle
- Gradle是专案对外的包装工具 , 非常重要
- 透过Maven or Gradle , 可以作到包装行为的一致性
- Library的下载及管理交由工具处理 , 不用再自己处理
- Gradle的设定档比Maven来的简洁
- Gradle新增自订的包装工作比Maven来的容易
- Jenkins 针对常见的包装工具支援度佳
- http://gradle.org/whygradle-build-automation/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602104/gradle.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602146/gradle-logo-vertical-retina.jpg)
Why Jenkins
- Open Source,free
- 被大量测试过
- 社群大 , 社群能量大 , 更新快
- Plugin多
- 容易上手
- 其他的CI Server大部分都要收费
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602145/logo-jenkins2.png)
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
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602161/docker_small_v.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602165/ubuntu-logo.png)
Gradle Project
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602174/gradle-project.png)
包装工具导入的差异
- 专案目录会有固定的预设路径 , 跟MyEclipse 或 Eclipse预设路径不同
- 会有Test的目录方便存放UnitTest
- 大部分OpenSource的Library , 只要Maven Repository有的话 , 不用自行挂载. 后续可整合private Library repository.
- 会有预设的包装任务 , 没有依赖IDE=> 包装可跨IDE支援
Gradle
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602184/gradle-2.png)
Gitlab
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602190/gitlab-1.png)
Gitlab
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602198/gitlab-2.png)
Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602458/jenkins-0.png)
Jenkins-plugin
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602472/jenkins-setting-1.png)
Jenkins-plugin
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602481/jenkins-setting-2.png)
Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602459/jenkins-1.png)
Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602461/jenkins-2.png)
Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602463/jenkins-3.png)
Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602464/jenkins-4.png)
Run
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602506/jenkins-run-0.png)
Run
![](https://s3.amazonaws.com/media-p.slid.es/uploads/343265/images/2602509/jenkins-run-1.png)
基本上差不多等于外面说的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
Copy of Continuous integration
By Mars Yang
Copy of Continuous integration
- 717