使用 Podman 啟動 GitLab 執行器有多種方法,我在本文中概述了其中兩種。
GitLab 執行器Runner 是一個與 GitLab CI/CD 配合使用的應用,可在 GitLab 基礎設施上的流水線中運行作業。它們通常用于在提交代碼后自動編譯應用或在代碼庫上運行測試。你可以將它們視為基于云的 Git 鉤子。
主要的公共 GitLab 實例提供了許多易于訪問的共享執行器,可供你在 CI 流水線中使用。你可以在 GitLab 上倉庫的 設置Settings -> CI/CD -> 執行器Runners 中找到共享執行器的列表。
你可能不想依賴共享執行器,而是選擇自己的執行器,原因有很多。例如,控制執行器運行的基礎設施以實現額外的安全性和/或隱私、靈活的執行器配置或分配給你的 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 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。配置執行器為每個作業創建一個網絡。有關更多信息,請參閱 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
配置進行任何更改,因此你可以繼續按原樣使用現有設置。
以下是幫助你運行此程序的快速設置指南。
配置步驟
容器鏡像是從 pipglr Containerfile自動構建的,因此將鏡像設置為該倉庫:
$ IMAGE="registry.gitlab.com/qontainers/pipglr:latest"
接下來,使用你的 GitLab 注冊令牌創建 Podman 密鑰:
$ echo '
創建一個空白的 config.toml
,稍后將包含你的所有執行器設置。你必須執行此步驟才能使以下podman container register runlabel $IMAGE
步驟成功:
$ touch ./config.toml # 重要:文件必須存在,即使是空的。
注冊你的執行器。你可以重復此步驟來注冊多個執行器。如果你想使用可能不同的標簽或配置選項集并行運行多個 CI 任務,這非常有用。
$ podman container runlabel register $IMAGE
使用你選擇的編輯器編輯 config.toml
。這是可選的,但通常需要更改用于實際 CI 任務的容器鏡像。默認情況下,鏡像設置為:registry.fedoraproject.org/fedora:latest
。
$ $EDITOR ./config.toml # if desired
最后,配置對卷的訪問。容器卷內使用多個用戶,因此你必須專門配置它們以允許訪問。再次使用 runlabel
來完成:
$ podman container runlabel setupstorage $IMAGE
$ podman container runlabel setupcache $IMAGE
測試執行器
是時候檢查配置了。首先啟動 GitLab 執行器容器:
$ podman container runlabel run $IMAGE
允許執行器用戶在注銷后運行服務:
$ sudo loginctl enable-linger $(id -u)
驗證你的新執行器在 GitLab 項目的 設置Settings -> CI/CD -> 執行器Runners 中可見:
最后,驗證你的 CI 流水線正在使用你的執行器:
總結
使用 Podman 啟動 GitLab 執行器有多種方法,我在此處概述了其中兩種。嘗試一下,然后讓我知道哪一個最適合你。如果 Docker 執行環境方法有任何問題,請登錄并通過 Podman 上游或GitLab 支持提交問題。如果 pipglr 方法出現問題,請在 pipglr 上游提交問題。
GitLab 與 Podman 一起運行愉快