使用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配置