Gitlab自留地

GitLab + Jenkins 搭建 CI

2016-04-08  本文已影响1328人  大爽兔

基本概念

一般把云计算分成三种: IaaS(Infrastructure as a Service), PaaS(Platform as a service) 还有 SaaS(Software as a Service)。
IaaS: 最典型的是 AWS(Amazon Web Service) 还有国内的阿里云。公司在大规模地使用 AWS,我自己也开了两个 AWS 的 EC2(弹性计算云,虚机)。这种云的特点是弹性计算、丰富的API(AWS更是做到了 full features,国外的 scalar 用 AWS 的 API 构建了基于 Farm, Role等概念的抽象管理)。它们通常也会提供一些 PaaS 服务,比如 AWS 提供的 关系型数据库服务 RDS,还有存储、cdn等等。 leader 说,公有云是未来,然也。
PaaS: IaaS 比较像 VPS,用户面对的是 OS,登录进去可以随便搞,灵活。PaaS 就比较专业了,针对不同功能的资源需求,定向提供服务,比如上面提到的数据库啊、存储啊。国内的 PaaS 还有 Bae, Sae, Jae(京东) 等。它们的主服务是提供 App 的运行环境,它给你一些限制条件,你的代码符合条件就可以上传,然后就可以在上面运行。它们也会提供类似上面说的PaaS,比如数据库。 据说 Sae 上入驻的主要是微博中的小游戏之类的应用。
SaaS: 这个就更专业、粒度更小了,网上举例都用邮箱来说,我也不是很了解。
IaaS 由于面对的主要是 OS,很容易与 VPS(如 Digital Ocean) 混淆。其实只要没啥需求变动,他们用起来确实差不多,都是计算资源。不同的是,IaaS 的弹性计算可以按使用量收费、可以动态地、方便地 scale 各种计算资源(CPU, NetWork, Ram…),并且提供丰富的 API 让用户更自由地操作自己的计算资源。
这两年 docker 热,又催生了另外一种云 CaaS(Container as a Service)。很多时候我们并不需要一个完整的 OS,而是需要一个运行环境,比如一个网站只需要服务器、数据库之类的环境能跑起来就行了。此外,镜像能够方便地保证运行环境的可定制、可复制、可分发,用到 CI/CD(持续集成 持续交付)很有益处。

CI

很多公司都在实践用 docker 做持续集成,我的一个任务就是先 Setup 这样一个环境。在此之前,我先把传统的 CI 学习和搭建一遍。
CI 是敏捷开发的必备,简单说就是有这样一套工具,使得开发人员做好开发和单元测试再 push 代码后就不用管了,这套工具能自动地 check 代码的变化,自动 build, 自动做集成测试和场景测试等,自动部署到生产环境,当然,某一个环节出了问题要反馈给开发人员。这套工具大大地解脱了开发人员的工作,让他们专注开发和迭代。
这里面主要涉及三类工具:代码管理工具(SCM),build 工具,管理整套工具的一个server工具。我使用的工具及CI流程是:
用 git 提交代码到 gitlab,Jenkins 检测到 代码有变化,则进行build,对于java可以用maven,c 可以用 make,这些都可以用 Jenkins 提供的 shell 服务来做。
git 和 gitlab 就不用说了。Jenkins 自动检测代码变化,之前我是不知道怎么做的。其实就是在Jenkins中设置好 Task 对应的 git repo 地址,并通过 ssh key 赋予它对 git repo 的访问权限,然后就可以设置 poll 日程来周期性地检测 repo 中代码的变动了。对了,记得 Jenkins 中安装 git client plugin. 还有一种我认为比较牛掰的方式,也是真正的CI所倡导的方式:每次push代码后就能自动build。它是怎么做到的呢?Webhooks。 Github 和 Gitlab 都提供了 Webhooks 功能,在repo 对应的 webhooks 中填上 Jenkins 的一个地址就ok了。这样每次 push 代码,github 或 gitlab 就会发送消息到 Jenkins,后者就会检测代码变动并build。具体的过程可以参考 《利用Jenkins+Gitlab搭建持续集成(CI)环境》. 我做一些补充:

上一篇 下一篇

猜你喜欢

热点阅读