如何在 GitLab Runners 中使用 Podman

使用 Podman 启动 GitLab runner 有多种方法,我在本文中概述了其中两种方法。
1 位读者喜欢这篇文章。
Automated provisioning in Kubernetes

Opensource.com

GitLab Runner 是一个应用程序,它与 GitLab CI/CD 协同工作,以在 GitLab 的基础设施上运行管道中的作业。它们通常用于在代码提交后自动编译应用程序,或在代码库上运行测试。您可以将它们视为基于云的 Git 钩子

主要的公共 GitLab 实例 提供了许多易于访问的共享 runner,可用于您的 CI 管道。您可以在存储库的设置 -> CI/CD -> GitLab 上的 Runners 中找到共享 runner 列表。

Display available GitLab runners in your repository's settings

(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 中是否可见

Restart the GitLab runner

(Lokesh Mandvekar,CC BY-SA 4.0)

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

View CI tasklogs to display the runner

(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 中是否可见

Verify the new runner is visible

(Lokesh Mandvekar,CC BY-SA 4.0)

最后,验证您的 CI 管道正在使用您的 runner

Verify the CI pipeline

(Lokesh Mandvekar,CC BY-SA 4.0)

总结

使用 Podman 启动 GitLab runner 有多种方法,我在此处概述了其中两种方法。试用它们,让我知道哪种方法最适合您。如果 docker executor 方法有任何问题,请登录以在 Podman 上游GitLab 支持 处提交问题。如果 pipglr 方法有问题,请在 pipglr 上游 提交问题

祝您使用 Podman 的 GitLab Running 愉快 🙂

Avatar
Lokesh Mandvekar 是红帽容器团队的高级软件工程师。

1 条评论

在我的 almalinux 8 机器上,我只安装了 podman,我想将其与 gitlab-runner 一起使用来启动我的作业。
我创建的镜像是一个 podma-in-podman 镜像,我创建并放在我的私有注册表中。该镜像在我的本地主机上也可用,但是当我通过在运行作业时指定我的镜像来执行此 mime 配置时,我收到此错误

© . All rights reserved.