介绍
之前用docker的时候想到gitlab可以直接提交代码触发docker编译部署,非常方便,于是试验了一个单体vue项目如何使用gitlab和docker的强大功能进行编译发布,此教程仅供参考,适用于公司或者个人测试。
一、安装gitlab-runner,在runner机器上安装git等
由于公司gitlab版本是8.x,比较老,只能安装1.x版本的gialab-runner,这里比较注意的是,一般runner和gitlab会分别安装到两台服务器上,具体安装步骤可以参考这篇文章。安装好之后创建两个runner:一个docker
类型runner,打上CI标签;一个shell
类型runner,打上CD标签。因为会使用到shell的runner,所以需要安装git,安装过程不再赘述,当然如果你runner不是这样用,可能还需要安装nodejs等环境。
二、编写Dockerfile
在项目根目录下新建docker目录,编写Dockerfile,注意相对路径问题:
1 | # 设置基础镜像 |
同样在docker目录下新增Nginx配置文件default.conf:
1 | server { |
三、在gitlab上添加已有runner,创建.gitlab-ci.yml文件
以上工作准备就绪之后在gitlab上添加两个runner,分别对应第一步CI和CD标签的runner,顾名思义,CI用于编译打包,CD用于部署运行。没有.gitlab-ci.yml文件的在项目根目录新建该文件,内容如下:
1 | job-build: |
这里使用到了gitlab的artifacts功能,感兴趣的可以去看官方文档,类似缓存的作用,第二步发布的时候就无需拉取代码编译直接使用上一步归档的dist和docker文件夹。提交所有更改之后所有master分支的提交就会触发一系列编译部署操作了。
遇到的问题:
1.gitlab-runner执行docker命令的时候遇到一个问题,因为使用的是gitlab-runner用户权限不够,结果按照网上教程和更改用户分组都没用。
1 | Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock |
后来找到一个解决方案:
1 | usermod -aG docker gitlab-runner |
完美解决。
2.使用gitlab-ci runner拉取git代码遇到这个问题,重新编译安装git都没用
1 | fatal: unable to find remote helper for 'http' |
后来发现是编译安装git的时候缺少了curl-devel的lib依赖,yum安装依赖再重新编译安装git就可以了。
1 | $ yum install curl-devel |