如何在 GitLab 执行器中使用 Podman
使用 Podman 启动 GitLab 执行器有多种方法,我在本文中概述了其中两种。
GitLab 执行器 是一个与 GitLab CI/CD 配合使用的应用,可在 GitLab 基础设施上的流水线中运行作业。它们通常用于在提交代码后自动编译应用或在代码库上运行测试。你可以将它们视为基于云的 Git 钩子。
主要的公共 GitLab 实例 提供了许多易于访问的共享执行器,可供你在 CI 流水线中使用。你可以在 GitLab 上仓库的 设置 -> CI/CD -> 执行器 中找到共享执行器的列表。
你可能不想依赖共享执行器,而是选择自己的执行器,原因有很多。例如,控制执行器运行的基础设施以实现额外的安全性和/或隐私、灵活的执行器配置或分配给你的 GitLab 用户帐户的有限 CI 分钟数。
GitLab 执行器依赖于 执行环境 工具来运行 CI 作业。执行环境有许多选项可用:Docker、Kubernetes、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:
1 |
|
接下来安装 gitlab-runner 包:
1 |
|
最后,允许用户在注销后执行任务:
1 |
|
配置并注册执行器
使用以下步骤配置 Docker 运行环境。
安装 gitlab-runner 包会创建一个 gitlab-runner 用户帐户,但你需要 root 访问权限才能操作该用户帐户。gitlab-runner 可以在用户模式下运行,但需要一些手动干预来进行构建处理。在此示例中,我使用 sudo
在系统模式下运行它。它看起来是这样的:
1 |
|
你将需要一些额外的配置才能使用 Podman。配置执行器为每个作业创建一个网络。有关更多信息,请参阅 GitLab 文档。
首先,启用 Podman 系统服务并修改 /etc/gitlab-runner/config.toml
中的环境:
1 |
|
重启执行器以实施更改:
1 |
|
验证新的执行器在 GitLab 项目的 设置 -> CI/CD -> 执行器 中可见:
接下来,验证你的 CI 流水线正在使用执行器。你的 CI 任务日志将提及正在使用的执行器的名称以及任何其他配置信息,例如 执行器的执行环境的功能标志和容器镜像。
Podman-in-Podman(pipglr)
Chris Evich 创建了 pipglr,这是一个 Podman-in-Podman 设置,用于使用免 root 的 Podman 来支持你自己的免 root 的 GitLab 执行器。此方法不需要对 .gitlab-ci.yaml
配置进行任何更改,因此你可以继续按原样使用现有设置。
以下是帮助你运行此程序的快速设置指南。
配置步骤
容器镜像是从 pipglr Containerfile 自动构建的,因此将镜像设置为该仓库:
1 |
|
接下来,使用你的 GitLab 注册令牌创建 Podman 密钥:
1 |
|
创建一个空白的 config.toml
,稍后将包含你的所有执行器设置。你必须执行此步骤才能使以下 podman container register runlabel $IMAGE
步骤成功:
1 |
|
注册你的执行器。你可以重复此步骤来注册多个执行器。如果你想使用可能不同的标签或配置选项集并行运行多个 CI 任务,这非常有用。
1 |
|
使用你选择的编辑器编辑 config.toml
。这是可选的,但通常需要更改用于实际 CI 任务的容器镜像。默认情况下,镜像设置为:registry.fedoraproject.org/fedora:latest
。
1 |
|
最后,配置对卷的访问。容器卷内使用多个用户,因此你必须专门配置它们以允许访问。再次使用 runlabel
来完成:
1 |
|
测试执行器
是时候检查配置了。首先启动 GitLab 执行器容器:
1 |
|
允许执行器用户在注销后运行服务:
1 |
|
验证你的新执行器在 GitLab 项目的 设置 -> CI/CD -> 执行器 中可见:
最后,验证你的 CI 流水线正在使用你的执行器:
总结
使用 Podman 启动 GitLab 执行器有多种方法,我在此处概述了其中两种。尝试一下,然后让我知道哪一个最适合你。如果 Docker 执行环境方法有任何问题,请登录并通过 Podman 上游 或 GitLab 支持 提交问题。如果 pipglr 方法出现问题,请在 pipglr 上游 提交问题。
GitLab 与 Podman 一起运行愉快 ?
(题图:MJ/97e0ff4d-b769-4e20-990f-8c1e89e48434)
via: https://opensource.com/article/23/3/podman-gitlab-runners
作者:Lokesh Mandvekar 选题:lkxed 译者:geekpi 校对:wxy