GitLab 如何与 RustFS 集成?

GitLab 是全球占比最高的 DevOps 私有化部署平台,RustFS 是全球开源领域增长最快的对象存储系统,完全私有化部署。两者能够在 OIDC 集成和对象存储配置上完美结合。

本文分享 GitLab OIDC 和 RustFS 的集成以及将 RustFS 配置为 GitLab 的对象存储后端。

GitLab OIDC 与 RustFS 的集成

将 GitLab OIDC 与 RustFS 集成后,可以通过GitLab 账号来登录 RustFS,实现企业内部 SSO 系统的统一管理。

RustFS 安装

RustFS 支持多种安装方式,二进制、Docker 以及 Kubernetes。例如,在 ubuntu 22.04 上快速安装一个 RustFS 实例:

复制代码
curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh

安装完毕,需要立即修改默认的 Access Key 和 Secret Key。编辑 /etc/default/rustfs 文件,修改 RUSTFS_ACCESS_KEYRUSTFS_SECRET_KEY 的值。需要注意,值最好不要是 rustfsadmin。然后通过 systemctl restart rustfs 重启服务。

最后登录 http://rustfs.example.com:9001 访问控制台。

一旦实例运行成功,OIDC 过程中所需的重定向 URL 也就确定了:

复制代码
http://rustfs.example.com:9001/rustfs/admin/v3/oidc/callback/default

GitLab 安装和配置

国内用户可以安装 GitLab 中国版------极狐GitLab。例如,在 ubuntu 22.04 上快速安装一个极狐GitLab 实例:

复制代码
# 更新依赖
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

# 添加repo
curl -L get.gitlab.cn | bash

# 安装 GitLab-JH
sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install -y gitlab-jh

安装完毕,登录 http://gitlab.example.com,默认用户名为 root,初始化密码在 /etc/gitlab/initial_password 文件中。

在 GitLab 管理中心(最新版右上角的 Admin )中,选择 Application ,点击 Add new application ,输入 NameRedirect URI ,scope 中勾选 openid、profile、email ,最后点击 Save application ,可以看到生成的 Application IDSecret

点击 Continue 即可。上面生成的 Application ID 和 Secret 要在 RustFS 配置中使用。

RustFS 配置

编辑 RustFS 配置文件(/etc/default/rustfs),写入如下环境变量:

复制代码
RUSTFS_BROWSER_REDIRECT_URL="http://rustfs.example.com"
RUSTFS_IDENTITY_OPENID_ENABLE=on
RUSTFS_IDENTITY_OPENID_CONFIG_URL="http://gitlab.example.com"
RUSTFS_IDENTITY_OPENID_CLIENT_ID="<gitlab-application-id>"
RUSTFS_IDENTITY_OPENID_CLIENT_SECRET="<gitlab-application-secret>"
RUSTFS_IDENTITY_OPENID_SCOPES="openid,profile,email"
RUSTFS_IDENTITY_OPENID_REDIRECT_URI="http://rustfs.example.com/rustfs/admin/v3/oidc/callback/default"
RUSTFS_IDENTITY_OPENID_REDIRECT_URI_DYNAMIC=off
RUSTFS_IDENTITY_OPENID_DISPLAY_NAME="GitLab"
RUSTFS_IDENTITY_OPENID_EMAIL_CLAIM="email"
RUSTFS_IDENTITY_OPENID_USERNAME_CLAIM="preferred_username"
RUSTFS_IDENTITY_OPENID_ROLE_POLICY="consoleAdmin"

RUSTFS_IDENTITY_OPENID_CLIENT_IDRUSTFS_IDENTITY_OPENID_CLIENT_SECRET 为上一步生成的 Application ID 和 Secret。

重启 RustFS 服务

复制代码
systemctl restart rustfs

在 RustFS 控制台上,点击 Login with GitLab 即可。

配置 RustFS 为 GitLab 的对象存储后端

GitLab 支持通过配置对象存储服务来管理自身管理的海量数据,比如将 artifactslfsuploadspackagesterraform_statepagesci_secure_filesexternal_diffsdependency_proxy 种的数据存储到 S3 兼容的远端对象存储服务服务中。

RustFS 是完全 S3 兼容的对象存储系统,因此可以和 GitLab 进行集成。整体分两步:

  • 在 RustFS 上创建存储桶
  • 在 GitLab 中配置 RustFS 信息

创建存储桶

可以通过 RustFS 控制台或 Client CLI 来创建存储桶,详细步骤可以参考 RustFS 存储桶管理文档

配置 GitLab

GitLab 中不同种类数据的对象存储服务配置都类似,主要包括启用对象存储服务配置对象存储服务的具体信息。以 Artifacts 的配置为例来说明。

Artifacts 在 GitLab 主要用作 CI/CD 中,是 Job 的产物。首先在 GitLab 配置文件中开启如下配置,以让 artifacts 使用 RustFS 作为对象存储:

复制代码
gitlab_rails['artifacts_enabled'] = true
gitlab_rails['artifacts_object_store_enabled'] = true
gitlab_rails['artifacts_object_store_proxy_download'] = false
gitlab_rails['artifacts_object_store_remote_directory'] = "artifacts"
gitlab_rails['artifacts_object_store_connection'] = {
  'provider' => 'AWS',
  'region' => 'us-east-1',
  'aws_access_key_id' => 'RUSTFS_ACCESS_KEY',
  'aws_secret_access_key' => 'RUSTFS_SECRET_KEy',
  'endpoint' => 'http://rustfs.example.com:9000',
  'path_style' => true,
  'aws_signature_version' => 4
}

通过执行 gitlab-ctl reconfigure 让配置生效。接着在 GitLab 上构造一个可以生成 artifacts 的 Job。找一个项目,添加一个 .gitlab-ci.yml 文件并写入如下内容:

复制代码
stages:
  - build

build:
  stage: build
  script:
    - pwd
    - mkdir -p output
    - echo "RustFS Object Storage Testing on GitLab" > output/rustfs.txt
    - ls -ltr output
  tags:
    - rustfs
  artifacts:
    paths:
      - ./output/*.txt
    expire_in: 1 week

触发流水线并运行成功以后,可以在 RustFS 控制台上查看 artifacts bucket 中是否有数据:

可以看到有数据产生,说明配置生效,Job 生成的 artifacts 存储了对象存储 RustFS 中而不是本地磁盘。

其他配置类似,可以自行尝试。

相关推荐
Francek Chen1 小时前
【大数据处理与分析】数据仓库Hive:02 数据湖
大数据·数据仓库·hive·hadoop·分布式·数据分析
龙智DevSecOps解决方案2 小时前
Perforce QAC + Klocwork 视频教程:Rust 与 C/C++ 混合项目静态分析演示
rust·静态分析·perforce·klocwork·qac·代码合规
starzy19902 小时前
Spark 核心之二次排序、分组取 TopN 优化分析
大数据·分布式·spark
悦数图数据库2 小时前
千亿点边图谱建设,原生分布式图数据库如何避免单点瓶颈
数据库·分布式
程序员爱钓鱼3 小时前
Rust 生命周期常见错误详解:看懂编译器报错并正确修复
前端·后端·rust
特立独行的猫a5 小时前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
祈禾12 小时前
Redis三大缓存问题与分布式锁
运维·数据库·redis·笔记·分布式·缓存
叠层归一研究院13 小时前
AGI 系统(五):多主体 AGI 网络 — 分布式符号边界上的时序差同构传播
分布式·php·agi
李白客18 小时前
分布式集群与数据库产业:从单机到集群的架构跃迁与市场重构
数据库·分布式·架构