从交付角度审视 jenkins

之前做过一段时间的2B产品的交付,感觉并没有像2C产品交付那样容易。同时最近使用 jenkins 比较多,发现 jenkins 在软件部署,升级上都比较方便,有一些值得学习的地方。

支持系统

因为是使用 java + groovy 开发,所以 jenkins 支持所有能够运行 JVM 虚拟机的系统,包括 windows 和 unix like.

安装方式

使用包管理用具安装

  • yum
  • apt
  • pacman
  • 用户自定义 jar , war 运行

升级方式

和安装方式一样,升级也使用包管理工具进行升级,版本之间的差异使用升级脚本解决,可以参考 deb,或者 rpm 包的制作方式.插件之间如果存在版本兼容问题,jenkins 会在插件管理界面提示出来。

进程管理

使用系统自带的进程管理工具

  • service
  • systemd

这样做的好处避免了手动执行 java 命令启动进程,或者 kill 关闭进程,与操作系统上其他系统保持一致的运行规则,也支持开机自动启动。

系统依赖

jenkins 的安装包内置 java 虚拟机,所以基本只要下载了 deb 以后就能安装,安装非常简单。运行期间,配置信息使用 xml 格式保存在本地磁盘,所以不需要安装数据库。jenkins 的配置都保存在 JENKINS_HOME 中,所以对于运维来说,备份文件非常简单。

扩展方式

jenkins 使用插件的方式来扩展本身的功能, 提供开放 api , 用户可以开发自定义插件.插件安装可以从网络安装(可指定网站源), 也可以手动上传插件包。

服务扩容

jenkins 使用 master + slave 的架构,master 管理配置,调度任务, slave 负责执行任务。

服务配置

jenkins 支持灵活的 DSL 配置满足复杂需求。

缺点

  • 因为配置是基于文件保存,数据检索慢,所以加载 blue ocean 界面非常慢
  • 因为使用 master + slave , 不支持多个 master , 所以存在单点问题