如何在 GitLab 执行器中使用 Podman

使用 Podman 启动 GitLab 执行器有多种方法,我在本文中概述了其中两种 。
GitLab 执行器Runner 是一个与 GitLab CI/CD 配合使用的应用,可在 GitLab 基础设施上的流水线中运行作业 。它们通常用于在提交代码后自动编译应用或在代码库上运行测试 。你可以将它们视为基于云的 Git 钩子 。
主要的公共 GitLab 实例提供了许多易于访问的共享执行器,可供你在 CI 流水线中使用 。你可以在 GitLab 上仓库的 设置Settings -> CI/CD -> 执行器Runners 中找到共享执行器的列表 。
如何在 GitLab 执行器中使用 Podman

文章插图
你可能不想依赖共享执行器,而是选择自己的执行器,原因有很多 。例如,控制执行器运行的基础设施以实现额外的安全性和/或隐私、灵活的执行器配置或分配给你的 GitLab 用户帐户的有限 CI 分钟数 。
GitLab 执行器依赖于 执行环境executor 工具来运行 CI 作业 。执行环境有许多选项可用:Docker、Kube.NETes、VirtualBox 等 。
那么,Podman 作为执行环境呢?
自 v4.2.0起,Podman 对 GitLab 执行器提供了原生支持 。以下是使用 Podman 作为 GitLab 执行器的执行环境的两种方法的快速浏览 。
 
Docker 执行环境你可以在 GitLab 执行器中使用 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包:
# 添加 GitLab 执行器仓库$ curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash# 安装 gitlab-runner 包$ sudo dnf -y install gitlab-runner最后,允许用户在注销后执行任务:
$ sudo loginctl enable-linger gitlab-runner 
配置并注册执行器使用以下步骤配置 Docker 运行环境 。
安装 gitlab-runner包会创建一个gitlab-runner用户帐户,但你需要 root 访问权限才能操作该用户帐户 。gitlab-runner可以在用户模式下运行,但需要一些手动干预来进行构建处理 。在此示例中,我使用sudo在系统模式下运行它 。它看起来是这样的:
$ sudo gitlab-runner registerRuntime platformarch=amd64 os=linux pid=7978 revision=d540b510 version=15.9.1Running in system-mode.Enter the GitLab instance URL (for example, https://gitlab.com/):https://gitlab.comEnter the registration token:xxxxxxxxxxxxxxxxxEnter 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/380872Registering runner... succeededrunner=GR13489419oEPYcJ8Enter an executor: custom, docker, ssh, docker-ssh+machine, docker-ssh, parallels, shell, virtualbox, docker+machine, instance, kubernetes:dockerEnter the default Docker image (for example, ruby:2.7):registry.gitlab.com/rhcontainerbot/pkg-builderRunner 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 。配置执行器为每个作业创建一个网络 。有关更多信息,请参阅 GitLab 文档 。
首先,启用 Podman 系统服务并修改
/etc/gitlab-runner/config.toml中的环境:
[[runners]]environment = ["FF_NETWORK_PER_BUILD=1"][runners.docker]host = "unix:///run/user/1001/podman/podman.sock"重启执行器以实施更改:
$ sudo gitlab-runner restart验证新的执行器在 GitLab 项目的 设置Settings -> CI/CD -> 执行器Runners 中可见:
接下来,验证你的 CI 流水线正在使用执行器 。你的 CI 任务日志将提及正在使用的执行器的名称以及任何其他配置信息,例如 执行器的执行环境的功能标志和容器镜像 。
 
Podman-in-Podman(pipglr)Chris Evich创建了pipglr,这是一个 Podman-in-Podman 设置,用于使用免 root 的 Podman 来支持你自己的免 root 的 GitLab 执行器 。此方法不需要对.gitlab-ci.yaml配置进行任何更改,因此你可以继续按原样使用现有设置 。


推荐阅读