升级git
centos7默认的git版本1.8.3.1,该版本不兼容gitlab-runner,需要先在跑gitlab-runner的主机上通过yum升级git
yum install -y epel-release
rpm -ivh https://centos7.iuscommunity.org/ius-release.rpm
yum list git2u
yum install -y git2u
git --version
git version 2.16.5
安装gitlab-runner
1、流程

2、下载bin->usr/bin
curl -L --output /usr/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
3、权限
chmod +x /usr/bin/gitlab-runner
授予可执行权限
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
生成一个gitlab-runner用户,gitlab-runner可以以当前用户执行命令。
通过cat /etc/passwd可以查看权限:
gitlab-runner:x:997:993:GitLab Runner:/home/gitlab-runner:/bin/bash
可以看到 gitlab-runner 对 /home/gitlab-runner 有操作权限,对 /bin/bash 有执行命令。
如果以gitlab-runner用户启动服务,可以设置对docker有操作权限,执行
usermod -aG docker gitlab-runner
4、install
gitlab-runner install --user=root --working-directory=/home/gitlab-runner
这里的 --user 一般为gitlab-runner,可以收敛gitlab-runner权限。但我设置为root,代表gitlab-runner执行script和操作文件目录有和root一样的权限。
5、start
gitlab-runner start
start命令代表启动服务,执行systemctl status gitlab-runner看到已经gittlab-runner启动,并已设置开机自动启动。
6、register
gitlab-runner register -n \
--url https://gitlab.com/ \
--registration-token REGISTRATION_TOKEN \
--executor shell \
--description "My Runner"
浏览器打开已安装好的gitlab,root账户登进去,配置下新的runner,位置Admin Area -> Runners
在Set up a shared Runner manually栏目下找到对应的url和token,然后执行以上命令。结果如下:
Runtime platform arch=amd64 os=linux pid=32474 revision=a987417a version=12.2.0
Running in system-mode.
Registering runner... succeeded runner=Ei8yKszm
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
浏览器查看gitlab,已看到新的runner已经开始对接。

locked标志为锁定指定某个项目可以执行,可以取消。
在.gitlab-ci.yml测试
项目目录下.gitlab-ci.yml文件
before_script:
- docker info
build_image:
script:
- docker build -t my-docker-image .
- docker run my-docker-image /script/to/run/tests
项目目录下Dockerfile文件
FROM php:7.2-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]
COPY . /usr/src/myapp是当前目录下所有文件全部COPY到容器中的/usr/src/myapp。“.” 代表docker build后边的那个“.”,通过runner docker build就是指项目某个分支的代码根目录所在文件夹。
运行容器
docker run -it my-docker-image /bin/bash
默认进入/usr/src/myapp文件夹,执行ls
root@5d056fcfee59:/usr/src/myapp# ls
Dockerfile README.md application build.php composer.json config extend public route runtime start.sh think thinkphp vendor
发现项目文件被部署上去了,.gitlab-ci.yml没有打包进去。
如果希望某些文件不被打包进去,可以执行编辑.dockerignore文件。
集成测试时:
如果runner在目标(测试)主机上,可以不用push到container register。
如果runner在其他主机上,需要push到container register,然后登录ssh登录到测试主机进行pull。
尽量使runner和container register为内网环境,设置域名本地解析,保证push/pull的质量。