白开水 2020-07-19
这里讲到的gitlab仓库指的是https://gitlab.com/,自建gitlab仓库也基本相同。
项目的构建打包过程相对比较消耗系统性能,所以gitlab将这部分任务都交给了gitlab-runner来做,因为gitlab-runner可以部署到不同的机器上。这样在构建的时候就不会影响gitlab服务器的性能。而gitlab ci仅用来管理项目的构建状态等轻量工作。
gitlab仓库提供了两种Runner自动构建的方案:一种是Specific Runners,另一种是Shared Runners。 在项目的settings/ci_cd页面中展开Runners可以看到两个功能区,分别用来设置不同类型的Runners。
Specific Runners——使用指定的构建服务器进行自动构建任务,通常用于自建Runner服务器。
Shared Runners——使用gitlab官方提供的共享服务器进行自动构建任务。
这里以自建gitlab-runner服务器为例;
这里使用的系统是Ubuntu 14.04.5 LTS 。
首先登录服务器,确定服务器已经安装docker及docker compose。
执行以下命令查看docker与docker-compose版本信息:
docker -v Docker version 18.06.3-ce, build d7080c1 docker-compose -v docker-compose version 1.26.2, build eefe0d31
创建目录/usr/local/docker/runner,切换当前目录到runner;在当前目录中创建config文件夹和docker-compose.yml文件;config文件夹将会被配置为存储gitlab-runner配置的文件夹。
使用vim创建docker-compose.yml文件:
version: "3.3" services: gitlab-runner: build: environment container_name: gitlab-runner-compose restart: always volumes: - ./config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock
environment指定了构建镜像的dockerfile文件地址,系统会到指定的文件夹中找到Dockerfile(默认名)文件。
volumes配置了gitlab-runner容器配置文件在宿主机上的存储位置。绑定容器的docker.sock目录到宿主机的对应目录,这样容器在运行时就可以使用宿主机的docker service执行docker命令。
官方提供的gitlab-runner镜像只是一个纯净的基础环境,我们需要将项目的依赖环境集成到基础镜像中,下面我们就通过Dockerfile将项目依赖集成到gitlab-runner镜像。
在当前目录创建environment文件夹用于存放依赖文件,切换到/usr/local/docker/runner/environment目录下;
执行vim Dockerfile创建文件:
FROM gitlab/gitlab-runner MAINTAINER Andy #安装docker-ce=================== RUN apt-get update -y && apt-get clean RUN apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && apt-get update -y && apt-get install -y docker-ce #================================ #切换镜像目录,安装项目依赖node====== WORKDIR /usr/local/node RUN wget https://nodejs.org/dist/v12.18.2/node-v12.18.2-linux-x64.tar.xz && tar xf node-v12.18.2-linux-x64.tar.xz && rm -rf node-v12.18.2-linux-x64.tar.xz && mv node-v12.18.2-linux-x64 node-v12.18.2 && ln -s /usr/local/node/node-v12.18.2/bin/node /usr/bin/node && ln -s /usr/local/node/node-v12.18.2/bin/npm /usr/bin/npm #================================= WORKDIR /
在Dockerfile文件中做了三件事:
1)引用gitlab/gitlab-runner作为基础镜像;
2)使用RUN命令安装docker,安装命令参考docker官方Install on Ubuntu;
3)下载node并解压,使用ln -s命令配置软连接,方便全局访问node和npm。
注意:这里安装的docker只是存在于镜像中的一个docker客户端,用于和宿主机docker service通信。
切换到上级目录/usr/local/docker/runner,执行docker-compose up -d命令,系统会按照docker-compose.yml文件的配置执行镜像构建和运行任务,执行docker-compose ps命令可以查看刚刚启动的容器。
到此我们的自定义gitlab-runner镜像就构建完成了,这个镜像构建成功后可以复用给其他的nodejs项目。下一章我们将项目仓库注册到我们的gitlab-runner服务中,编写.gitlab-ci.yml文件来管理自动构建任务,实现项目的本地推送自动触发构建任务功能。