centos7下docker gitlab(五)安装 Gitlab Runner(上)(Building Docker images with GitLab)

1,463 阅读2分钟

升级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的质量。