引言

笔者曾通过2种方式部署过 gitlab-runner,在 gitlab 中使用这个 runner 拉起 ci job 的过程中或多或少遇到些问题,主要都是 job 中无法访问宿主机的docker 等组件。本篇文档主要记录 gitlab-runner 安装及相关配置。

二进制部署 gitlab-runner

部署

以 arm64 架构的为例

arch="arm64"
curl -LJO "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/rpm/gitlab-runner-helper-images.rpm"
curl -LJO "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/rpm/gitlab-runner_${arch}.rpm"

rpm -i gitlab-runner-helper-images.rpm gitlab-runner_arm64.rpm

配置 gitlab-runner

这里就是主要出现问题原因所在,要把 gitlab-runner 的执行用户更新为 root

vi /etc/systemd/system/gitlab-runner.service

# 修改 "--user" "gitlab-runner" 中的 gitlab-runner 为root,结果如下
ExecStart=/usr/bin/gitlab-runner "run" "--config" "/etc/gitlab-runner/config.toml" "--working-directory" "/home/gitlab-runner" "--service" "gitlab-runner" "--user" "root"

systemctl daemon-reload
systemctl restart gitlab-runner
ps aux | grep gitlab-runner

docker 容器部署 gitlab-runner

部署

sudo docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

配置一

在正常 gitlab-runner register 后,得到一个新的 runner 会生成配置到配置文件/etc/gitlab-runner/config.toml 中。此时,需要去更新这个文件中的 runner 的 volumes 信息。

[[runners]]
  executor = "docker"
  [runners.docker]
    volumes = ["/var/run/docker.sock:/var/run/docker.sock"] # 必须,主要就是配置这个

配置完成后,执行 gitlab-runner restart 即可。

配置二

我们会使用到一个场景,就是 runner 上拉起的 job 中会启动 kind 集群。但是,默认情况下,在 job 容器中 是访问不了 kind 容器网络的。所以需要配置,将 runner 拉起的 job 固定走 host 模式,而不是默认的 桥接 模式。配置方法如下:

[[runners]]
  [runners.docker]
    network_mode = "host" # 主要是这个配置,使用宿主机网络
    pull_policy = ["if-not-present"]

配置完成后,执行 gitlab-runner restart

快速部署

docker run -d \
  --name gitlab-docker-runner \
  --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

docker exec -it gitlab-docker-runner bash

gitlab-runner register \
  --non-interactive \
  --url "xxxxxxxxxx" \
  --registration-token "xxxxxxxxxx" \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "docker-runner" \
  --tag-list docker \
  --docker-network-mode host \
  --docker-privileged=true \
  --docker-disable-entrypoint-overwrite=false \
  --docker-volumes '/var/run/docker.sock:/var/run/docker.sock'   \
  --docker-oom-kill-disable=false \
  --docker-disable-cache=true \
  --docker-pull-policy if-not-present \
  --output-limit 4000 \
  --run-untagged=true \
  --locked=false
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐