使用gitlab和jenkins来对node.js项目持续集成

luoyjx · 2016-11-19 21:51 · 2508次阅读

首发于搞起博客

gitlab 8.12.7 + jenkins 2.23

gitlab服务器

安装gitlab,可从镜像将安装文件下载。 下载安装后,在配置文件中修改host值,否则项目host为机器的名称,无法访问。 默认路径:

/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

将HOST改为ip或者配置的域名。 然后重启gitlab服务

gitlab-clt restart

jenkins服务器

1.jenkins 机器秘钥

而首先需要在jenkins本地生成秘钥对,使用命令 ssh-keygen -t rsa -C "yanjixiong@mye.hk" 会生成三个文件:

id_rsa 私钥 id_rsa.pub 公钥 known_hosts

接下来按三下回车,生成无密码秘钥,默认是生成在/home/<username>/.ssh/目录下,其中id_rsa为私钥,id_rsa.pub为公钥,本地有私钥,将公钥设置在项目中后,即可通过ssh方式将项目clone下来,而无需输入密码。

需要将代码从gitlab拉取下来,通过ssh方式,需要将jenkins的公钥(id_rsa.pub中的内容)添加到gitlab项目设置(项目页面右上角的)中的Deploy Keys

untitled1.png

untitled2.png

2.jenkins插件

在jenkins的 系统管理 -> 插件管理 -> 可选插件 中可选择安装的插件。

  • git plugin 使用git拉取代码等操作
  • gitlab plugin 可以在gitlab push和merge代码时调用jenkins的webhook,从而触发jenkins任务执行。
  • ssh plugin ssh方式远程连接到机器执行脚本
  • publish HTML plugin 用户发布我们覆盖率测试之后生成的html覆盖率信息
  • AnsiColor 使控制台输出带颜色

3.gitlab connection

连接到gitlab拉取代码使用,配置证书,使用gitlab api token,token可以从gitlab中获取,在个人设置中有Access Token一栏,创建以个token,填入jenkins的设置即可。

untitled3.png

4.创建构建任务

a. 主页点击 新建 b. 输入任务名称(建议与项目名一致或者和项目相关,易于辨识)并选择 构建一个自由风格的软件。 c. General 配置,需要选择 gitlab connection,这个连接在 系统管理 -> 系统设置 -> gitlab配置中添加。 d. 源码管理,需要安装git插件,选择git方式,填写 项目地址以及证书信息。 e. 构建触发器配置,由于我们使任务由webhook 事件来通知,所以在安装gitlab插件后会有选择gitlab 的事件来触发,选项中会有webhook调用的地址,将此地址在gitlab 对应项目webhook配置中添加即可。 f. 构建环境配置,如果需要每次构建前先删除工作空间的项目,勾选选项。安装ssh插件后,可以选择在构建前和构建后的脚本,我们在这里配置,单元测试后,远程连接到应用服务器部署的脚本。 g. 构建配置,这一步执行单元测试,选择Excute Shell,填写我们需要执行的测试脚本。 h. 构建后配置,选择构建后向gitlab推送状态,并选择publish HTML,这个是将node.js进行覆盖率测试后的结果html文件发布出来。

应用服务器

jenkins生成的公钥(默认命名为id_rsa.pub)放在目标机器B的/home/<username>/.ssh/下,命名为authorized_keys,这样在jenkins机器ssh远程连接到目标机器执行脚本时就不需要密码了。

安装node.js运行时环境。

自动化部署流程

流程示意图如下: untitled4.png

1.push代码到gitlab

push代码、创建合并请求、merge代码

2.gitlab通过webhook推送事件到jenkins,触发构建任务

webhook需要在jenkins创建的任务中触发构建的配置中获取webhook的地址,然后设置到gitlab项目中的webhook中,jenkins需要安装gitlab插件。

3.jenkins从gitlab将最新代码拉取下来

这个步骤需要在gitlab的项目设置Deploy Keys,中将执行jenkins程序的用户生成的公钥(id_rsa.pub)中的内容添加到gitlab作为一个Deploy Key。 由于jenkins服务是由root用户启动,而拉取代码默认是jenkins用户执行,所以,我们需要在证书中粘贴jenkins用户的私钥。

4.对代码进行单元测试

这个步骤目前通过shell执行,因此需要安装运行时环境、数据库(如果使用本地连接)等。

5.测试通过后对代码进行build(如需要)

对测试后的代码进一步的构建成生产环境需要使用的形式,或者跳过。

6.jenkins通过ssh登录到应用服务器上,将最新的代码部署到应用服务器

此步骤需要在应用服务器上放jenkins的公钥并命名为authorized_keys,在.ssh目录中。 远程连接到应用服务器上执行脚本,进行代码更新和重新部署。

7.推送构建状态到gitlab

此步骤也使用到了gitlab plugin的功能。

收藏

暂无评论

登录后可以进行评论。没有账号?马上注册