CI 系统搭建:一. 基础环境设置、规划
去年写的这五篇 CI 文章时候方便邮件测试,自己搞了一个 thstack.com 域名玩。当时也没在意,所有的文章里邮箱地址都是引用 @thstack.com 域名。让我没想到是,2014 年这个神奇的一年,thstack.com 会成为我们的公司名字和域名。
- 我想说的是,我们内部的邮件系统也在用 @thstack.com,和这几个文章里的邮箱会冲突,导致一些朋友完全照着我的文档测试。结果最近收到了很多垃圾邮件。
- 我还想说的是,不要让别人怀疑你的智商。
- 我最想说的一句是,搞 CI 是一个高尚的工作。
随着计算机的高速发展、各种时代变革的到来。百度、360、腾讯这些赚钱机器之间为了利益掐个没完没了。开源项目、社区的活跃进而引来持续集成(CI)系统的诞生。也越发的听到更多的人在说协同开发、敏捷开发、迭代开发、持续集成和单元测试这些拉风的术语。但是也仅仅只是听到在说而已,也没有见到国内有几家公司能有完整的 CI 体系流程。反之一些开源项目都有完整的 CI 体系。我觉得就这一点国内的公司还是要去学习的。
由于对上面那些生涩的词感冒,专门研究了下 CI 相关的系统,才有了这几篇文章
我用到的系统有:
- Gitlab:代码托管
- Gerrit:Code Review
-
Jenkins:代码测试
一开始测试使用了 Gitorious 来做代码的托管,发现界面的功能不全,比较蛋疼。虽然 Gerrit 本身有代码托管功能,Gerrit 的界面不敢恭维、也没有 Gitlab 的功能强大。so …
决定使用 Gitlab 还有一点重要原因就是它本身提供保护分支的功能,可以达到 Review 效果。这样和 Gerrit 结合的话,可以针对不同的用户群来分配 Review 方式。
-
强制 Review:在 Gitlab 上创建的项目,指定相关用户只有 Reporter 权限,这样用户没有权限使用 git push 功能,只能 git review 到 Gerrit 系统上,Jenkins 在监听 Gerrit 上的项目事件会触发构建任务来测试代码,Jenkins 把测试结果通过 ssh gerrit 个这个项目打上 Verified 成功或失败标记,成功通知其它人员 Review。
-
Gitlab 保护 Master 分支:在 Gitlab 上创建的项目可以把 Master 分支保护起来,普通用户可以自己创建分支并提交代码到自己的分支上,没有权限直接提交到 Master 分支,用户最后提交申请把自己的分支 Merge 到 Master,管理员收到 Merge 请求后,Review 后选择是否合并。
由于没有闲置服务器、公网 IP、域名让我去浪费。想到 qingcloud 上还有 2k 没花,所以需要把三套系统整合塞到一个 vps 中。在整合三套系统中遇到一些需要规划的小问题
- 每个系统都有发送邮件的功能,最好弄三个邮箱账号
- 三个系统都默认监听了 8080 端口,需要规划端口
- 规划了端口的同时随便规划下三个域名,后端做个端口转发方便用户访问
知道什么需要规划后,就来设置吧:
使用系统
ubuntu-12.04.2-server
修改 ssh 时候不需要输入 yes,如果不设置后面 Jenkins 连接 Gerrit 时候会报错
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
/etc/init.d/ssh restart
Gitlab、Gerrit、Jenkins 版本和下载地址
设置主机名
hostname www.thstack.com
sysctl -w kernel.hostname=www.thstack.com
echo www.thstack.com > /etc/hostname
echo '192.168.8.224 www.thstack.com www' >> /etc/hosts
注册四个邮箱账号,其中 admin@thstack.com 用来管理三套系统
admin@thstack.com
gitlab@thstack.com
gerrit@thstack.com
jenkins@thstack.com
规划三个域名和端口
gitlab.thstack.com:8081
review.thstack.com:8082
jenkins.thstack.com:8083
设置解析
vim /etc/hosts
192.168.8.224 gitlab.thstack.com gitlab
192.168.8.224 review.thstack.com review
192.168.8.224 jenkins.thstack.com jenkins
简单规划完后就可以动手去搭建了,后面几篇文章会记录安装的过程