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 通常要求

  1. 整个流程要非常顺
  2. 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