GitLab Runner 是一个应用程序,它与 GitLab CI/CD 协同工作,以在 GitLab 的基础设施上运行管道中的作业。它们通常用于在代码提交后自动编译应用程序,或在代码库上运行测试。您可以将它们视为基于云的 Git 钩子。
主要的公共 GitLab 实例 提供了许多易于访问的共享 runner,可用于您的 CI 管道。您可以在存储库的设置 -> CI/CD -> GitLab 上的 Runners 中找到共享 runner 列表。

(Lokesh Mandvekar,CC BY-SA 4.0)
您可能不希望依赖共享 runner,而是希望建立自己的 runner,原因有很多。例如,为了提高安全性和/或隐私性,灵活的 runner 配置,或分配给您的 GitLab 用户帐户的有限 CI 分钟数,需要控制 runner 运行的基础设施。
GitLab runner 依赖于 executor 工具来运行 CI 作业。executor 有许多选项可用:Docker、Kubernetes、VirtualBox 等。
那么,将 Podman 作为 executor 怎么样呢?
自 v4.2.0 起,Podman 已原生支持 GitLab runner。以下是使用 Podman 作为 GitLab runner 的 executor 的两种方法的快速介绍。
Docker executor
您可以在 GitLab Runner 中使用 Podman 作为 Docker 的替代品。方法如下
此示例于 2023 年 2 月在 CentOS Stream 9 环境中使用 Podman v4.4.0。它在任何具有足够新 Podman 的 RHEL/CentOS Stream/Fedora 环境中也应该同样有效。查看 GitLab 文档 了解先决条件。
首先,安装 Podman
$ sudo dnf -y install podman
接下来安装 gitlab-runner 包
# Add the GitLab runner repository
$ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
# Install the gitlab-runner package
$ sudo dnf -y install gitlab-runner
最后,允许用户在注销后执行任务
$ sudo loginctl enable-linger gitlab-runner
配置和注册 runner
使用以下步骤配置 Docker executor。
安装 gitlab-runner 包会创建一个 gitlab-runner 用户帐户,但您需要 root 访问权限才能操作用户帐户。gitlab-runner 可以在用户模式下运行,但需要一些手动干预才能进行构建处理。在本示例中,我使用 sudo
在系统模式下运行它。它看起来像这样
$ sudo gitlab-runner register
Runtime platform arch=amd64 os=linux pid=7978 revision=d540b510 version=15.9.1
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com
Enter the registration token:
xxxxxxxxxxxxxxxxx
Enter a description for the runner:
[lmandvek-c9s-gitlab-runner]:
Enter tags for the runner (comma-separated):
Enter optional maintenance note for the runner:
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Registering runner... succeeded runner=GR13489419oEPYcJ8
Enter an executor: custom, docker, ssh, docker-ssh+machine, docker-ssh, parallels, shell, virtualbox, docker+machine, instance, kubernetes:
docker
Enter the default Docker image (for example, ruby:2.7):
registry.gitlab.com/rhcontainerbot/pkg-builder
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
您将需要一些额外的配置才能使用 Podman。配置 runner 为每个作业创建一个网络。有关更多信息,请参阅 GitLab 文档。
首先,在 /etc/gitlab-runner/config.toml
中启用 Podman 系统服务以及 Env 更改
[[runners]]
environment = ["FF_NETWORK_PER_BUILD=1"]
[runners.docker]
host = "unix:///run/user/1001/podman/podman.sock"
重启 runner 以实施更改
$ sudo gitlab-runner restart
验证新的 runner 在您的 GitLab 项目的设置 -> CI/CD -> Runners 中是否可见

(Lokesh Mandvekar,CC BY-SA 4.0)
接下来,验证您的 CI 管道是否正在使用 runner。您的 CI 任务日志将提及正在使用的 runner 的名称以及任何其他配置信息,例如功能标志和 runner executor 使用的容器镜像。

(Lokesh Mandvekar,CC BY-SA 4.0)
Podman-in-Podman (pipglr)
Chris Evich 创建了 pipglr,一种 Podman-in-Podman 设置,用于使用 rootless Podman 启动您自己的 rootless GitLab Runner。此方法不需要对您的 .gitlab-ci.yaml
配置进行任何更改,因此您可以继续按原样使用您现有的设置。
以下是帮助您运行此程序的快速设置指南。
配置步骤
容器镜像从 pipglr Containerfile 自动构建,因此将镜像设置为该仓库
$ IMAGE="registry.gitlab.com/qontainers/pipglr:latest"
接下来,使用您的 GitLab 注册令牌创建一个 Podman 密钥
$ echo '<actual registration token>' | podman secret create REGISTRATION_TOKEN -
创建一个空白的 config.toml
,稍后将包含您的所有 runner 设置。您必须执行此步骤才能使以下 podman container register runlabel $IMAGE
步骤成功
$ touch ./config.toml # important: file must exist, even if empty.
注册您的 runner。您可以重复此步骤来注册多个 runner。如果您想并行运行多个 CI 任务,并且可能具有不同的标签或配置选项集,这将非常有用。
$ podman container runlabel register $IMAGE
使用您选择的编辑器编辑 config.toml
。编辑是可选的,但通常是必要的,以更改用于实际 CI 任务的容器镜像。默认情况下,镜像设置为:registry.fedoraproject.org/fedora:latest
$ $EDITOR ./config.toml # if desired
最后,配置对卷的访问。容器卷内部使用了多个用户,因此您必须专门配置它们以允许访问。再次使用 Runlabels 来救援
$ podman container runlabel setupstorage $IMAGE
$ podman container runlabel setupcache $IMAGE
测试 Runner
现在是检查配置的时候了。首先启动 GitLab Runner 容器
$ podman container runlabel run $IMAGE
允许 runner 用户在注销后运行服务
$ sudo loginctl enable-linger $(id -u)
验证您的新 runner 在您的 GitLab 项目的设置 -> CI/CD -> Runners 中是否可见

(Lokesh Mandvekar,CC BY-SA 4.0)
最后,验证您的 CI 管道正在使用您的 runner

(Lokesh Mandvekar,CC BY-SA 4.0)
总结
使用 Podman 启动 GitLab runner 有多种方法,我在此处概述了其中两种方法。试用它们,让我知道哪种方法最适合您。如果 docker executor 方法有任何问题,请登录以在 Podman 上游 或 GitLab 支持 处提交问题。如果 pipglr 方法有问题,请在 pipglr 上游 提交问题。
祝您使用 Podman 的 GitLab Running 愉快 🙂
1 条评论