使用Gitlab-Runner Docker 构建 node 项目
在我们编写好了源代码之后,我们需要编译,打包,发布到服务器,我们的软件才可以使用。持续集成就是指的这一系列的操作,本文将介绍gitlab-ci它基于gitlab
Gitlab-CI介绍
Gitlab-CI是Gitlab官方提供的持续集成服务,在仓库的根目录下新建.gitlab-ci.yml文件,并且在gitlab中配置runner,在之后的每次提交合并中将会触发构建
安装Gitlab Runner
这是官方安装文档,由于墙的原因,yum apt-get等可切换到国内镜像,或使用vpn shaodowsocks
安装完之后会有两个命令gitlab-ci-multi-runner和gitlab-runner,本文只构建一个runner作为例子,使用gitlab-runner为例
配置Gitlab Runner
要在gitlab中添加一个runner,只需要执行
runner可以设置多个executor
- shell
- docker
- docker-ssh
- ssh
本文以node项目为例(其他项目同理),要构建一个node项目需要一台装有node并且需要npm使用国内镜像,甚至需要全局安装一些包(如:gulp,webpack),这时候如果有一个已经安装好环境的docker镜像将可以快速的在一台机器上部署,本文使用docker形式注册runner
|
|
执行成功之后你可以通过gitlab-runner list查看到你注册的runner,可以看到每一个runner的配置信息都可以在ConfigFile中看到(/mypath/.gitlab-runner/config.toml)
注册成功之后就可以在gitlab的页面上看到你的Runner了

type有两种
- shared 所有仓库都可以使用
- specific 只有指定的仓库可以使用
type的类型由执行 gitlab-runner register命令填入的token决定
有时候runner会连接不上,或者在仓库->设置->runner里呈灰色,这有可能是runner机器上没有启动
gitlab-runner run引起的,可以执行ps -ef | grep gitlab看看是否存在gitlab-runner run的进程,如果没有则执行gitlab-runner run &该命令会启动runner服务,从gitlab拉去的代码将被放在执行目录下
配置.gitlab-ci.yml
|
|
上述命令在runner执行的时候会去仓库拉去镜像,如果镜像找不到则使用本地的,所以确保runner的机器有相关镜像
命令我们看到了scp,但是命令实际是运行在docker中的,所以scp会失败,这时候我们需要添加ssh验证,可以参考gitlab-runner ssh配置
只需要在仓库的设置中添加参数SSH_PRIVATE_KEY值为ssh的密钥即可

上述脚本应该变为如下
至此我们构建好了一个runner,它会在每次仓库有新的提交时执行 gulp构建,并把构建好的/dist目录拷贝到192.168.1.1的/publick/path中
.gitlab-ci.yml还有很多配置,可以指定有哪些分支变动或者标签时才会去构建,可以参考.gitlab-ci.yma配置