社区编辑

个人签名

199篇博客

网易云服务镜像持续集成三部曲

社区编辑2018-05-17 15:25

前言

容器化是一个目前开发模式的趋势,而开发过程中持续集成的需求不可或缺。容器化以后如何做持续集成是一个问题。容器化就是把所有代码编译、打包集成等工作都使用镜像构建的方式做。发布的过程就是镜像拉起并且运行的过程。传统的持续集成就是通过hook等方式把代码提交跟持续集成的平台关联,然后通过代码提交触发一系列自动编译打包部署的脚本来完成远程节点机器上的便已打包部署。而容器化的就可以理解为通过hook方式把代码提交跟镜像构建关联起来,通过代码提交触发相应的镜像构建。而构建过程就将一个基础镜像作为一个容器拉起来,然后将最新代码拉到容器中(或者打好的包拷贝下来),然后commit成一个镜像保存到仓库中。服务发布的时候就可以选择这个最新的镜像来完成发布的需求。

 

镜像持续集成三部曲

蜂巢原有的镜像仓库就支持手工构建的方式,现在需要将自动构建这个特性支持进来,就需要完成下面几步动作。

第一就是要将第三方代码仓库(例如github)的权限跟蜂巢仓库权限相关联,使得第三方代码提交可以通知到蜂巢的镜像仓库做构建的动作。


第二就是手动镜像构建的过程,完成一系列动作,将一个基础镜像作为一个容器拉起来,然后将最新代码拉到容器中(或者打好的包拷贝下来),然后commit成一个镜像保存到仓库中。


第三就是自动镜像构建,通过github push代码触发webhook回调,自动构建镜像,并且进行镜像tag管理,自动构建出来的镜像通过管理可以让用户识别到哪个是最新的代码构建出来的镜像(通过分支和时间戳来识别)。


下面来看下实现机制如何完成这几个步骤的。

 

第三方代码仓库关联

web登录蜂巢后,在镜像仓库页面有一个源码托管按钮,跳转以后第一次需要进行第三方代码仓库的关联。 步骤如下: 1.OAuth跳转入口:跳转至 GitHub,使用户能够继续授权相关操作 2.Github授权后回调至蜂巢web,通知页面更新为跟账号信息一致的内容。 授权并回调成功的页面展示:

 

手动触发镜像构建

在镜像仓库中选择可以支持持续集成的镜像仓库类型并且创建。这时会将仓库跟新增的nce-ci模块绑定。用户需要首先手动触发一次构建操作,以便让nce-ci模块记录仓库是跟第三方仓库的哪个具体的仓库以及分支关联,并且可以选择一些tag的管理模式(分支+时间或者纯时间)。这些记录会在数据库中记录下来,以便自动构建的时候读取使用。 手动触发镜像构建的选项参数: 

 

自动触发镜像构建

通过webhook的方式得到第三方代码提交的消息,并且自动触发镜像构建,这个过程由新增模块nce-hook完成。 主要步骤:

1.代码提交通过hook通知nce-hook模块;

2.nce-hook检查OAuth token是否有效,如果有效则触发构建,并且做一些参数检查,例如仓库是否支持持续集成,仓库中版本配额、租户权限等是否符合要求。

3.生成tag以及镜像地址,然后发消息给nce-ci模块去做构建动作。

nce-ci模块接受到hook的消息,触发真正的构建动作 主要步骤:

1. 在ci所处的机器上拉取代码到一个跟github账户同名的目录下。

2. 检查Dockerfile,并且进行docker build以及docker push。

3. 回调web-callback写表,通知成功事件。

 

镜像tag管理

tag管理有两个点需要注意,一个是配额,如果一个仓库推满100个镜像,则不能再继续推送镜像了。第二个是排序,按时间倒排展示,最近推送的1个tag显示在最上面,另外下载地址也是显示最新的tag。由于命名是毫秒时间戳命名。

 

持续集成流程图


1.web跳转至 GitHub,使用户能够继续授权相关操作;

2.Github授权后回调至蜂巢web,通知页面更新为跟账号信息一致的内容;

3.web手动触发构建第一个镜像,将具体的仓库以及分支关联到ci模块;

4.构建成功回调callback写表;

5.github提交到相应分支代码触发webhook通知;

6.nce-hook模块收到webhook通知后进行相应检查并触发nce-ci模块进行自动构建;

7.构建成功回调callback写表。

网易云原创文章,未经许可,禁止转载。