Qiuliang's Site

做一个独立思考和具备创新能力的人,打造谦逊和强大的内心

基于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. 安装必须的依赖组件

sudo yum install curl openssh-server postfix cronie
sudo service postfix start
sudo chkconfig postfix on
sudo lokkit -s http -s ssh

2. 安装gitlab rpm包

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce
rpm -i gitlab-ce-XXX.rpm

3. 启动gitlab

sudo gitlab-ctl reconfigure

4. 访问host地址,使用默认的如下管理员账号可进行配置修改

Username: root
Password: 5iveL!fe

maven私服(nexus)安装和配置

nexus的安装过程比较简单,从官网下载nexus压缩包后,直接解压到工作目录,执行如下命令即可:

./bin/nexus console

jenkins安装和配置

jenkins是什么?

简单来说,就是一个能提高开发人员效率的工具,减少一些重复的工作,例如:编译一个软件项目,通过cron去运行一个自动化任务。主要关注点如下:

  • 持续build/testing一个软件项目
  • 监控外部job的执行情况

安装

java version “1.7.0_85” jenkins version : 1.624

安装相关包:

- sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
- sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
- sudo yum install jenkins

启动服务:

- sudo service jenkins start/stop/restart
- sudo chkconfig jenkins on

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
export M2_HOME=/usr/local/apache-maven-3.3.3
PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
  • 环境变量生效: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!