基于git、maven、nexus、jenkins搭建适合中小型技术团队的CI平台
在阅读本文前,假设你对git、maven有了一个基本的了解,也包括一些其他的专有名词,如不了解,建议查阅官方资料或直接google。
为什么要搭建这样一个平台?
对于一个稍具规模的研发团队来说,每个角色都各司其职,如果没有一套很好的开发流程和管理手段,那在进行一些相对复杂的项目开发时,因开发流程不规范、管理和沟通效率低下带来的各种问题会层出不穷,大家也会手忙脚乱,不利于项目发展和团队配合。因此搭建一套适合自己团队的持续集成平台,是一个非常重要的事情,至少可以带来如下收益:
- 规范的代码分支管理
- 快速的构建
- 尽早的集成
- 提升多项目、多版本的并行能力
- 更可靠的代码和更稳健的应用
- 前后端更彻底的解耦和配合
CI系统结构
基于团队的实际情况,我们搭建了如下的CI平台,基本都是用开源组件实现,其结构如下:
项目开发普通流程(主要是指H5/PC Web)
先简单介绍下我们的开发模式:一般将项目分为前后端两个team,前端team负责UI、样式、前端JS逻辑交互、异步渲染等工作;后端team主要负责数据加工、逻辑处理、持久化、分布式cache等工作。
基于以上分工,一个常规的开发流程一般是这样的:
- 设计师设计UI
- 前端制作人员制作成HTML原型
- 后端开发人员进行rest接口开发
- 前端人员进行UI交互开发(过程中使用mock进行接口数据模拟,逐步过渡到后端开发人员提供的真实接口)
- 前、后端人员在项目开发中期开始在CI平台进行构建和集成
- 反复debug、持续构建,直至达到RC版本
- 上线、打tag
使用这种开发模式,我认为可以带来如下好处:
- 分工清晰、职责明确
- 每个开发人员更加专注于自己的工作
- 系统边界清晰,封装更合理规范
- 对于后端开发人员来说,提供的api是给团队内另外的人来使用,因此在封装的时候,包括url、入参、出参等细节考虑更周全,更易于理解;
- 前后端的debug更加容易
接下来针对该方案,介绍一下几个主要的系统组件的安装和配置方式。
我们的标准环境一般是基于CentOS 6.5的最小化安装。
gitlab安装和配置
git已经越来越流行,基本上成了互联网研发团队的标配,其灵活的分支模型以及强大的分布式仓库管理能力,对于管理大型项目复杂代码,完全能游刃有余,再搭配上gitlab,图形化的代码管理、简单易用的分支、tag管理,和基本的wiki、issue管理,现在gitlab已经开始出收费的版本了,但即便是免费的社区版本,功能已经是完全够用的。
另外要强调一下的是gitlab所提供的pull request或者说code review功能,非常的不错,这对提高团队代码质量能起到很大的作用。
步骤
基本按照官网操作步骤即可,以下操作可能会因版本变化而有所差异
1. 安装必须的依赖组件
2. 安装gitlab rpm包
3. 启动gitlab
4. 访问host地址,使用默认的如下管理员账号可进行配置修改
maven私服(nexus)安装和配置
nexus的安装过程比较简单,从官网下载nexus压缩包后,直接解压到工作目录,执行如下命令即可:
jenkins安装和配置
jenkins是什么?
简单来说,就是一个能提高开发人员效率的工具,减少一些重复的工作,例如:编译一个软件项目,通过cron去运行一个自动化任务。主要关注点如下:
- 持续build/testing一个软件项目
- 监控外部job的执行情况
安装
java version “1.7.0_85” jenkins version : 1.624
安装相关包:
启动服务:
jenkins web端默认为8080端口,请确认防火墙是否打开。
如果上面步骤都顺利的话,打开地址:Http://localhost:8080应该可以看到jenkins的管理界面了。
配置
1. 安装git插件
默认没有集成git,需要先安装相关插件:
- git plugin
- git client plugin
2. 升级CentOS下的git客户端
因为jenkins的git插件需要使用1.7.9以上版本,而CentOS 6.5自带的git是1.7.1版本,需要先升级CentOS下的git。
- rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt
- 安装RPMForge源:rpm -i http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 注意选择不同的版本:http://pkgs.repoforge.org/rpmforge-release/
- 查看可用的git模块:yum –enablerepo=rpmforge-extras provides git
- 安装适合当前系统的版本:yum –enablerepo=rpmforge-extras install git-1.7.12.4-1.el6.rfx.x86_64
3. 配置maven
- 下载maven http://maven.apache.org/download.cgi
- 编辑环境变量:vi /etc/profile
- 环境变量生效:source /etc/profile
3.1 在jenkins管理端配置maven
在打包的时候,这个地方遇到了一个比较大的坑,主要是我的jenkins server安装在mac下的pd虚机上,如果使用默认的maven中央库的话,会一直报一个错误:
应该是虚机的网络问题,无法连接到https协议的中央库,后来修改maven使用了oschina的第三方库后解决。
在jenkins执行job时又遇到了文件权限的错误,默认情况下maven生成的包位于如下目录:/var/lib/jenkins/jobs/test/workspace/
需要修改执行jenkins用户对该目录的写入权限。
错误:Jenkins needs to know where your Maven is installed. 这个问题的主要原因是全局系统设置中的maven的几个配置不正确,主要配置Maven、Maven Installation几个配置节。
4. 配置JDK
在系统全局设置里面,进行JDK的配置:
5. 配置部署插件
到插件管理模块中安装:Deploy to container Plugin
增加自动化部署的配置:
新建一个job
- 选择构建一个maven项目
- 选择需要的jdk版本
- 设置git代码分支地址和身份验证信息
- 选择pom文件的相对路径
- 设置deploy的target
完成以上安装和配置工作后,基本上一套标准的CI工作流程就能跑起来了,enjoy!