标签 Helm Chart 下的文章

RustFS 默认通过 9001 端口登录控制台,9000 端口使用 API,为了安全合规,通常采用启用 HTTPS、反向代理(诸如 nginx、traefik、caddy 等)的方式来更加安全的使用 RustFS。本文分享一种更加安全的方式,通过 Cloudflare tunnel 来访问你的 RustFS 实例。

安装 RustFS

RustFS 支持二进制、Docker 以及 Helm Chart 的安装方式,详细方法可以查看官网安装指南。将如下内容写入 docker-compose.yml 文件:

services:
  rustfs:
    image: rustfs/rustfs:latest
    container_name: rustfs
    hostname: rustfs
    environment:
      - RUSTFS_VOLUMES=/data/rustfs{1...4}
      - RUSTFS_ADDRESS=0.0.0.0:9000
      - RUSTFS_CONSOLE_ENABLE=true
      - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
      - RUSTFS_ACCESS_KEY=rustfsadmin
      - RUSTFS_SECRET_KEY=rustfsadmin
      - RUSTFS_TLS_PATH=/opt/tls
    ports:
      - "9000:9000"  # API endpoint
      - "9001:9001"  # Console
    volumes:
      - data1:/data/rustfs1
      - data2:/data/rustfs2
      - data3:/data/rustfs3
      - data4:/data/rustfs4
      - ./certs:/opt/tls

    networks:
      - rustfs

networks:
  rustfs:
    driver: bridge
    name: rustfs

volumes:
  data1:
  data2:
  data3:
  data4:

运行如下命令

docker compose up -d

即可安装好一个 RustFS 实例:

docker compose ps
NAME      IMAGE                          COMMAND                  SERVICE   CREATED          STATUS          PORTS
rustfs    rustfs/rustfs:1.0.0-alpha.81   "/entrypoint.sh rust…"   rustfs    22 minutes ago   Up 22 minutes   0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp

配置 Cloudflare tunnel

配置 Cloudflare tunnel 大体分为 域名配置tunnel 配置 两部分。

域名配置

域名配置是为了后期能够更方便的访问 RustFS。

  • 使用 Cloudflare 账号登录 Cloudflare Domain 界面;
  • 在左侧导航栏,Account home,如果你已经有域名,则选择 Onboard a domain,否则可选择 Buy a domain
  • 如果选择 Onboard a domain,点击该选项后,在出现的界面中输入你的域名,然后继续往下走,直到在最后选择 Continue to activation
  • 如果一切顺利,可以在域名管理首页看到添加成功的域名,其 Status 会显示为 Active

image.png

tunnel 配置

  • 使用 Cloudflare 账号登录 Cloudflare Dashboard
  • 在左侧导航栏,选择 Networks -> Connectors,在右侧界面点击 Create a tunnel
  • 在 tunnel 类型中,选择 Select Clouflared
  • Install and run connectors 中,根据 RustFS 实例所在服务器的操作系统信息,选择相应的安装方式。安装完毕后,可以在服务器上查看 cloudflared 服务的状态。运行正常后点击 Next

    systemctl status cloudflared
    ● cloudflared.service - cloudflared
         Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; preset: enabled)
         Active: active (running) since Fri 2026-01-16 21:18:53 CST; 6 days ago
       Main PID: 2538004 (cloudflared)
          Tasks: 10 (limit: 4375)
         Memory: 31.3M (peak: 38.7M swap: 8.2M swap peak: 15.3M)
            CPU: 18min 16.159s
         CGroup: /system.slice/cloudflared.service
  • Route Traffic 中,配置 HostnameService 信息。

    • Hostname 中填写的域名可用于后续访问 RustFS 实例,可以在 Domain 字段中选择 域名配置 部分添加好的域名。如果想通过子域名访问,也可以在 Subdomain 字段中输入子域名名称。
    • Service 选择服务类型和 URL。对于上述安装的 RustFS 实例,Type 可以选择 HTTP/HTTPS(如果启用了 HTTPS,可选择 HTTPS,否则用 HTTP),URL 为 localhost:9001

    image.png

  • 点击 Complete setup 完成配置。

上述配置结束后,可以在 Connectors 界面看到添加好的 tunnel,如果一切顺利,则可以看到 Status 为绿色的 HEALTHY

在 Hostname 和 Service 设置页面的 Additional application settings 部分,点击 HTTP Settings,在 HTTP Host Header 部分,输入访问 RustFS 的域名,这是为了避免后续使用出现签名错误。

登录验证

恭喜你,如果你顺利完成了上述两部分的配置后,那么现在你就可以通过你配置好的域名来访问 RustFS 实例了。本文配置的域名为 rustfs.xiaomage.vip,所以在浏览器中输入 https://rustfs.xiaomage.vip 即可访问 RustFS 实例:

image.png

输入 rustfsadmin/rustfsadmin 即可登录。

接下来就可以通过多种方式来使用 RustFS 实例了,比如 mcrc 以及 rclone

通过 mc 使用 RustFS

mc 是 Minio 的专属客户端,由于 RustFS 是 S3 兼容的,而且是 Minio 的平替,所以可以用 mc 来操作 RustFS。

前提

mc --version
mc version RELEASE.2025-08-29T21-30-41Z (commit-id=f7560841be167a94b7014bf8a504e0820843247f)
Runtime: go1.24.6 darwin/arm64
Copyright (c) 2015-2025 MinIO, Inc.
MinIO Enterprise License

使用

# 添加 `alias`
mc alias set rustfs https://rustfs.xiaomage.vip rustfsadmin rustfsadmin

# 创建存储桶
mc mb rustfs/hello

# 列出存储桶
mc ls rustfs
[2026-01-23 21:39:36 CST]     0B hello/
[2026-01-23 20:12:59 CST]     0B test/

# 上传文件到存储桶
echo "123456" > 1.txt
mc cp 1.txt rustfs/hello
/tmp/1.txt:                         ██████████████████████████████████████████████████████████████████████████████████ 100.0% 7 B       1 B/s      

# 查看上传的文件
mc ls rustfs/hello
[2026-01-23 21:40:44 CST]     7B STANDARD 1.txt

更多用法可自行探索。

通过 rclone 使用 RustFS

rclone是一个命令行工具,可以对不同云提供商上的文件和目录进行同步。

前提

rclone --version
rclone v1.72.1
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.8.0-71-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.25.5
- go/linking: static
- go/tags: none

使用

  • 配置 rclone

执行 rclone config 命令,根据 RustFS 实例信息,一步步进行配置。配置完成后,会生成一个 ~/.config/rclone/rclone.conf 文件,一般内容如下:

[rustfs]
type = s3
provider = Minio
access_key_id = rustfsadmin
secret_access_key = rustfsadmin
endpoint = https://rustfs.xiaomage.vip
region = us-east-1
force_path_style = true
由于目前 RustFS 还未向 rclone 官方提 PR 以增加 RustFS provider 信息,因此使用 Minio 作为 provider。
  • 开始使用
# 列出存储桶和对象

rclone ls rustfs: --s3-sign-accept-encoding=false
        7 hello/1.txt
    11792 test/1.log
   520512 test/123.mp3
     7394 test/2.log
   147240 test/321.mp3
   

# 查看某个对象内容
rclone cat rustfs:hello/1.txt --s3-sign-accept-encoding=false
123456 

对于其他用法,可以通过 rclone --help 来自行探索。

注意:添加 --s3-sign-accept-encoding=false 参数是因为 Cloudflare 会对 Accept-Encoding 参数进行修改,在 S3 协议中,这种变更会导致 SignatureDoesNotMatch 错误,详情可以查看 RustFS issue

通过 rc 使用 RustFS

rc 是 RustFS 的 Client,用来对 RustFS 进行操作。目前,刚发布 0.1.1。可以使用 cargo 或源码编译安装。

rc --version
rc 0.1.1

目前提供 aliaslsmbrb 等多种常规命令。使用方式和 mc 类似。

# 设置 alias
rc alias set rustfs https://rustfs.xiaomage.vip rustfsadmin rustfsadmin
✓ Alias 'rustfs' configured successfully.

# 列出存储桶
rc ls rustfs
[2026-01-23 13:39:36]         0B hello/
[2026-01-23 13:56:57]         0B rclone/
[2026-01-23 12:12:59]         0B test/

# 创建存储桶
rc mb rustfs/client
✓ Bucket 'rustfs/client' created successfully.

更多用法,可以通过 rc --help 进行查看并自行探索,使用过程中有任何问题,可以在 GitHub Issue中进行反馈。

RustFS 作为新一代的分布式对象存储系统,提供了 Helm Chart 以便 Kubernetes 集群上安装 RustFS 实例。而 DirectPV 是一个符合 CSI 标准的 Kubernetes 存储项目,由 Minio 发布且开源。本文使用 DirectPV 为 Kubernetes 上的 RustFS 实例提供后端存储服务,实现两个对象存储服务的“结合”。

前提

  • 运行良好的 Kubernetes 集群。

    本文使用 K3S 作为测试环境,根据 K3S 安装指南完成安装:

    # 安装 K3S
    curl -sfL https://get.k3s.io | sh -
    
    # 安装确认
    kubectl get nodes
    NAME             STATUS   ROLES           AGE   VERSION
    vm-0-17-ubuntu   Ready    control-plane   63m   v1.34.3+k3s1
  • 一块空磁盘

    本文在安装 K3S 的服务器上(OS 为 Ubuntu 24.04)挂载了一块容量为 20GB 的新磁盘:

    df -h
    vdb    253:16   0   20G  0 disk /root/data/disk
    
    mount | grep vdb
    /dev/vdb on /root/data/disk type ext4 (rw,relatime)

安装 DirectPV

可以直接根据 minio/directpv 文档进行 DirectPV 的安装。这个过程中会使用到 krew plugin,根据不同的 OS 执行安装命令即可。

在 Ubuntu 上执行如下命令:

(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)

安装完毕,将 PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH" 写到 ~/.bashrc 或 ~/.zshrc 即可。

开始安装 DirectPV。

  • 安装 directpv krew 插件
kubectl krew install directpv
  • 在 Kubernetes 集群中安装 DirectPV
kubectl directpv install
Installing on unsupported Kubernetes v1.34

 ███████████████████████████████████████████████████████████████████████████ 100%

┌──────────────────────────────────────┬──────────────────────────┐
│ NAME                                 │ KIND                     │
├──────────────────────────────────────┼──────────────────────────┤
│ directpv                             │ Namespace                │
│ directpv-min-io                      │ ServiceAccount           │
│ directpv-min-io                      │ ClusterRole              │
│ directpv-min-io                      │ ClusterRoleBinding       │
│ directpv-min-io                      │ Role                     │
│ directpv-min-io                      │ RoleBinding              │
│ directpvdrives.directpv.min.io       │ CustomResourceDefinition │
│ directpvvolumes.directpv.min.io      │ CustomResourceDefinition │
│ directpvnodes.directpv.min.io        │ CustomResourceDefinition │
│ directpvinitrequests.directpv.min.io │ CustomResourceDefinition │
│ directpv-min-io                      │ CSIDriver                │
│ directpv-min-io                      │ StorageClass             │
│ node-server                          │ Daemonset                │
│ controller                           │ Deployment               │
└──────────────────────────────────────┴──────────────────────────┘

DirectPV installed successfully
  • 安装确认并获取安装信息

kubectl -n directpv get pods
NAME                          READY   STATUS    RESTARTS   AGE
controller-54d56fb9f8-92cz8   3/3     Running   0          90m
controller-54d56fb9f8-kfltl   3/3     Running   0          90m
controller-54d56fb9f8-ncxcn   3/3     Running   0          90m
node-server-vgpn2             4/4     Running   0          90m

kubectl directpv info
┌──────────────────┬──────────┬───────────┬─────────┬────────┐
│ NODE             │ CAPACITY │ ALLOCATED │ VOLUMES │ DRIVES │
├──────────────────┼──────────┼───────────┼─────────┼────────┤
│ • vm-0-17-ubuntu │ -        │ -         │ -       │ -      │
└──────────────────┴──────────┴───────────┴─────────┴────────┘

0 B/0 B used, 0 volumes, 0 drives
  • 添加磁盘(驱动)

首先检测磁盘信息并将其信息写到 drives.yaml 文件中:

kubectl directpv discover

 Discovered node 'vm-0-17-ubuntu' ✔

┌─────────────────────┬────────────────┬───────┬────────┬────────────┬──────┬───────────┬─────────────┐
│ ID                  │ NODE           │ DRIVE │ SIZE   │ FILESYSTEM │ MAKE │ AVAILABLE │ DESCRIPTION │
├─────────────────────┼────────────────┼───────┼────────┼────────────┼──────┼───────────┼─────────────┤
│ 253:16$PXmUgO0FF... │ vm-0-17-ubuntu │ vdb   │ 20 GiB │ ext4       │ -    │ YES       │ -           │
└─────────────────────┴────────────────┴───────┴────────┴────────────┴──────┴───────────┴─────────────┘

Generated 'drives.yaml' successfully.

drives.yaml 文件内容如下:

version: v1
nodes:
    - name: vm-0-17-ubuntu
      drives:
        - id: 253:16$PXmUgO0FF7sKtsaVihMadap1hCZil9Rksbz2SdQkMfA=
          name: vdb
          size: 21474836480
          make: ""
          fs: ext4
          select: "yes"

接着使用 drives.yaml 文件进行 DirectPV 初始化:

kubectl directpv init drives.yaml --dangerous

 ███████████████████████████████████████████████████████████████████████████ 100%

 Processed initialization request '3a70561d-3de0-4756-b256-159fc98593d1' for node 'vm-0-17-ubuntu' ✔

┌──────────────────────────────────────┬────────────────┬───────┬─────────┐
│ REQUEST_ID                           │ NODE           │ DRIVE │ MESSAGE │
├──────────────────────────────────────┼────────────────┼───────┼─────────┤
│ 3a70561d-3de0-4756-b256-159fc98593d1 │ vm-0-17-ubuntu │ vdb   │ Success │
└──────────────────────────────────────┴────────────────┴───────┴─────────┘

恭喜你,走到这一步,你已经成功安装了 DirectPV(之前的每一步出错都会导致失败,请认真查看命令以及输出结果),使用如下命令确认:

kubectl get sc
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
directpv-min-io        directpv-min-io         Delete          WaitForFirstConsumer   true                   90m
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  115m

可以看到,名为 directpv-min-io 的 StorageClass 已经存在。接下来就使用这个 SC 进行 RustFS 的安装。

在 K3S 上安装 RustFS

RustFS 提供 Helm Chart来在 Kubernetes 上安装 RustFS。目前支持两种模式:单机单盘(SNSD)和多机多盘(MNMD)

可以将 GitHub Repo 代码 clone 到本地,然后进入到 helm/rustfs 目录下进行安装,也可以直接使用 RustFS 的远端仓库(RustFS 已经将 Helm Chart 发布到了 Artifact Hub),比如:

# 添加仓库
helm repo add rustfs https://charts.rustfs.com

# 安装 RustFS
helm install rustfs -n rustfs rustfs/rustfs --create-namespace  --version 0.0.80

由于 RustFS Helm Chart 默认使用 local-path StorageClass,而且默认的 PVC 大小为 256Mi,因此需要根据自身情况设置合适的大小,最简单的方式就是在本地创建一个 values.yml 文件,然后修改如下内容:

storageclass:
  name: directpv-min-io
  dataStorageSize: 256Mi
  logStorageSize: 256Mi
当然,也可以用 --set 来实现参数的覆盖,但是由于 RustFS 多种安装模式、多种 Ingress Controller,以及 pod 资源的自定义等,--set 就需要指定多个参数,会显得繁琐。将需要变更的信息写到本地 values.yml,然后用 -f 指定,可能更加便捷的自定义安装 RustFS。

本文采用本地安装模式(也就是 Helm Chart 代码在本地),执行如下命令进行安装:

helm install rustfs ./ -n rustfs --create-namespace -f values.yaml 

查看 PVC

kubectl -n rustfs get pvc 
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
data-rustfs-0-rustfs-0   Bound    pvc-8e9b520f-3a96-4a64-afb3-70f13d3edcd3   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-0-rustfs-1   Bound    pvc-8bef3219-469c-452c-969a-89c8470d3945   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-0-rustfs-2   Bound    pvc-aee2c489-6f4c-47dc-b464-b09fc5ea112c   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-0-rustfs-3   Bound    pvc-b59ec27c-9fb0-4ad1-a204-9858c1d405da   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-1-rustfs-0   Bound    pvc-8d840468-f6be-4154-ae42-73f68f6e36e3   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-1-rustfs-1   Bound    pvc-c5adc67b-f6ea-470a-861d-9b48b610bbee   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-1-rustfs-2   Bound    pvc-8d7b98e0-ff0b-4d5f-869c-fe7c1b71ffc2   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-1-rustfs-3   Bound    pvc-9268589f-7ca7-4480-a724-36bfcdc29cff   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-2-rustfs-0   Bound    pvc-f31689f3-1aa8-42f7-8fcb-f309a6b390b5   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-2-rustfs-1   Bound    pvc-28fecb41-9dd7-436d-9317-e8a3a588a87a   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-2-rustfs-2   Bound    pvc-77d4c8e6-918a-4b28-a2bc-408195f807d3   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-2-rustfs-3   Bound    pvc-6deab996-a8a3-4e02-ae6c-845f863526c0   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-3-rustfs-0   Bound    pvc-46c7cc1a-1f25-4c3e-8168-3c288ee552d5   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-3-rustfs-1   Bound    pvc-a0403935-2471-48d8-beac-fcf28fd85a7a   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-3-rustfs-2   Bound    pvc-d0c88736-ee1a-47e5-a335-53d086e87913   256Mi      RWO            directpv-min-io   <unset>                 61s
data-rustfs-3-rustfs-3   Bound    pvc-9fbac8a8-cb59-430b-abc1-4ad5105ed4ad   256Mi      RWO            directpv-min-io   <unset>                 61s
logs-rustfs-0            Bound    pvc-bc673cea-6cf0-479f-a323-5c2102479796   256Mi      RWO            directpv-min-io   <unset>                 61s
logs-rustfs-1            Bound    pvc-c823f3a4-2e07-4331-bdd3-f0c6172bb15b   256Mi      RWO            directpv-min-io   <unset>                 61s
logs-rustfs-2            Bound    pvc-059eeaf9-b209-41ec-87f6-da87f0105c41   256Mi      RWO            directpv-min-io   <unset>                 61s
logs-rustfs-3            Bound    pvc-348e4bfb-d272-4deb-ae8e-fc6ea70d4d74   256Mi      RWO            directpv-min-io   <unset>                 61s

可以看到生成了分布式安装所需的所有 PVC,状态是 Bound。接着查看 pods 状态:

kubectl -n rustfs get pods
NAME       READY   STATUS    RESTARTS   AGE
rustfs-0   1/1     Running   0          69s
rustfs-1   1/1     Running   0          69s
rustfs-2   1/1     Running   0          69s
rustfs-3   1/1     Running   0          69s

可以看到 pod 运行正常。接着就可以使用 ingress 来访问该 RustFS 实例了。

注意事项

安装 DirectPV 的过程中,会对该磁盘上的数据进行格式化,而且该磁盘不能被其他程序占用,否则会出现如下错误:


┌──────────────────────────────────────┬────────────────┬───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ REQUEST_ID                           │ NODE           │ DRIVE │ MESSAGE                                                                                                                                                                                                                          │
├──────────────────────────────────────┼────────────────┼───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ e9adb7af-8061-46b1-8112-d86e5fb653cd │ vm-0-17-ubuntu │ vdb   │ Failed; unable to format device /dev/vdb; unable to execute command [mkfs.xfs -i maxpct=50 -m uuid=2be5b9cc-beeb-4d54-bbcb-a1cbc5f0ef97 -f -L DIRECTPV /dev/vdb]; output=mkfs.xfs: cannot open /dev/vdb: Device or resource busy │
│                                      │                │       │ ; error=exit status 1                                                                                                                                                                                                            │
└──────────────────────────────────────┴────────────────┴───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

可以通过将此磁盘 umount 来解决。

极狐GitLab 18.7 版本发布,带来了改进的 GitLab Duo 分析仪表盘与密钥有效性校验、支持为聊天和智能体选择 AI 模型,以及更多新功能!

我们非常高兴地宣布 GitLab 18.7 正式发布。本次版本包含改进的 GitLab Duo 分析仪表盘、改进的密钥有效性校验、为聊天和智能体提供模型选择能力,以及更多更新内容!

以上只是本次版本 25+ 项改进中的一部分亮点。请继续阅读,了解下面所有精彩的更新内容。

版本信息

容器镜像

  • 18.7.0 容器镜像
registry.gitlab.cn/omnibus/gitlab-jh:18.7.0-jh.0
  • 18.7.0 Helm Chart(JH)
helm search repo gitlab-jh
NAME                      CHART VERSION APP VERSION 
gitlab-jh/gitlab          9.7.0         v18.7.0    
gitlab-jh/gitlab-runner   0.84.0        18.7.0

18.7 关键功能

密钥有效性校验改进并正式发布

基础版专业版旗舰版
SaaSY
私有化部署Y

当你的某个代码仓库中泄露了一个有效密钥时,你必须迅速做出响应。
为了帮助你优先处理紧急威胁,密钥有效性校验会自动验证泄露的凭据是否仍然可以被使用。

在 GitLab 18.7 中,我们进行了以下改进:

厂商集成: 与 Google Cloud、AWS 和 Postman 集成,同时保留了对 GitLab 令牌的现有支持。

报告过滤: 可以按有效性状态(active、inactive、possibly active)过滤漏洞报告(Vulnerability Report),以便快速进行分流和优先级排序。

群组级 API: 通过一次 API 调用即可在一个群组内的所有项目上启用密钥有效性校验,从而简化在整个组织范围内的推广。

在本次发布中,密钥有效性校验已正式全面可用(generally available)。

为 Agentic Chat 和各类智能体分别选择模型

基础版专业版旗舰版
SaaSYY
私有化部署YY

现在可以为 Agentic Chat 和所有其他智能体分别选择不同的模型,适用于顶级群组或实例。

这为 GitLab Duo Agent Platform 提供了更多模型选择选项。

改进的 GitLab Duo 与 SDLC 趋势仪表盘

基础版专业版旗舰版
SaaSYY
私有化部署YY

GitLab Duo 与 SDLC 趋势仪表盘提供了增强的分析能力,用于衡量 GitLab Duo 对软件交付的影响。该仪表盘现在可以提供为期 6 个月的趋势分析,覆盖 GitLab Duo 功能采用情况、流水线性能,以及部署频率和平均合并时间等常见开发指标。

你现在可以跟踪 GitLab Duo Code Suggestions 的代码生成量以及 IDE 或语言趋势,并观察你的团队如何采用新的 GitLab Duo Agent Platform 流程。增强的用户级指标使团队能够更深入地洞察持续产生价值的关键 Duo 功能。

现在新增了一个用于实例级 AI 使用情况的端点,实例管理员可以从 Postgres(保留 3 个月数据)或 ClickHouse 中提取所有 Duo 数据。
https://docs.jihulab.com/api/graphql/reference/#aiinstanceusa...

得益于 ClickHouse 集成,该仪表盘可以在数百万数据点规模下实现亚秒级查询性能。对于自托管实例,请查看关于 ClickHouse 集成的改进建议和配置指导:
https://docs.jihulab.com/integration/clickhouse/

Planner Agent 的更多功能以 Beta 形式提供

基础版专业版旗舰版
SaaSYY
私有化部署YY

Planner Agent 现在在 Beta 阶段新增了创建和编辑功能!Planner Agent 是一个基础智能体,专为在 GitLab 中直接支持产品经理而构建。你可以使用 Planner Agent 来创建、编辑和分析 GitLab 工作项。

无需再手动追踪更新、确定工作优先级或汇总规划数据,Planner Agent 可以帮助你分析待办事项列表,应用 RICE 或 MoSCoW 等框架,并突出显示真正需要你关注的内容。它就像一位主动协作的队友,能够理解你的规划工作流,并与你一起做出更优、更高效的决策。

CI/CD 流水线中的动态输入选项

基础版专业版旗舰版
SaaSY
私有化部署Y

你可以在通过直观的 Web 界面创建新流水线时,将 CI/CD 流水线配置为使用动态输入选择。

现在,借助动态输入选项,你可以配置流水线,使输入选项能够根据之前的选择动态更新。例如,当你在一个下拉列表中选择某个输入项时,第二个下拉列表会自动填充一组相关的输入选项。

使用 CI/CD 输入,你可以:

  • 使用预配置的输入触发流水线,从而减少错误并简化部署流程。
  • 允许用户从下拉菜单中选择不同于默认值的输入项。
  • 现在可以使用级联下拉列表,其中选项会根据之前的选择动态更新。

这种动态能力使你能够创建更加智能、具备上下文感知能力的输入配置,引导你完成流水线创建过程,减少错误,并确保只选择有效的输入组合。

基于 AI 的 SAST 误报检测(Beta)

基础版专业版旗舰版
SaaSY
私有化部署Y

安全团队通常需要花费大量时间调查最终被证明是误报的 SAST 发现结果,从而分散了对真实安全风险的关注。

在 GitLab 18.7 中,我们引入了基于 AI 的 SAST 误报检测,帮助团队将精力集中在真正重要的漏洞上。当安全扫描运行时,GitLab Duo 会自动分析每一个严重级别为 Critical 和 High 的 SAST 漏洞,以判断其成为误报的可能性。

AI 评估结果会直接显示在漏洞报告中,为安全工程师提供即时上下文,从而更快、更有信心地做出分流决策。

关键能力包括:

  • 自动分析: 误报检测会在每次安全扫描完成后自动运行,无需人工触发。
  • 手动触发选项: 用户可以在漏洞详情页面针对单个漏洞手动触发误报检测,以进行按需分析。
  • 聚焦高影响发现结果: 仅覆盖 Critical 和 High 严重级别漏洞,以最大化信噪比的提升。
  • 具备上下文的 AI 推理: 每次评估都会包含关于该发现为何可能是真阳性或误报的解释,基于代码上下文和漏洞特征进行判断。
  • 无缝工作流集成: 结果会直接显示在漏洞报告中,并与现有的严重级别、状态和修复信息并列展示。

新的安全仪表盘默认启用

基础版专业版旗舰版
SaaS
私有化部署YY

新的安全仪表盘已经完成更新和现代化改造。此前这些仪表盘仅在 jihulab.com 上可用,现在已在 GitLab Dedicated 和 GitLab Self-Managed 中默认启用。

新功能包括:

  • 漏洞随时间变化图表,支持:

    • 按项目或报告类型进行过滤。
    • 按报告类型和严重级别进行分组。
    • 直接链接到漏洞报告中的具体漏洞。
  • 风险评分模块,基于 GitLab 算法为群组或项目计算估算风险评分。

用于控制向 CI/CD Catalog 发布组件的实例级设置

基础版专业版旗舰版
SaaS
私有化部署YY

GitLab Self-Managed 和 GitLab Dedicated 的管理员现在可以限制哪些项目被允许向 CI/CD Catalog 发布组件。此新设置使组织能够通过控制可发布的组件范围,维护一个经过精选和可信的 CI/CD Catalog。

管理员现在可以指定一个允许发布组件的项目白名单。当白名单中配置了项目后,只有这些项目才能发布组件。这可以防止未经授权或未批准的组件充斥已发布组件列表,并确保所有组件符合组织标准和安全要求。

这解决了企业客户在希望保持对其 CI/CD 组件生态系统控制的同时,又希望支持团队发现和复用已批准组件时所面临的一项关键治理挑战。

Web IDE 支持离线的 GitLab 私有化部署环境

基础版专业版旗舰版
SaaS
私有化部署YYY

在离线或严格受控的网络环境中,GitLab 私有化部署(Self-Managed)的管理员现在可以配置自定义的 Web IDE 扩展主机域名,使 Web IDE 在 无外网访问的情况下仍能完整使用功能

此前,Web IDE 需要访问外部域名 .cdn.web-ide.gitlab-static.net 来加载 VS Code 扩展和相关功能,这使得许多具有高安全要求的组织(如政府部门、公共机构、拥有严格网络隔离策略的企业)无法使用 Web IDE。

通过本次更新,管理员可以将 Web IDE 所需的资源直接由 GitLab 实例自身提供,彻底消除了对外部域名的依赖。这样你可以:

  • 在完全离线环境中使用完整的 Web IDE 功能集
  • 通过自定义扩展注册表服务启用扩展市场(Extension Marketplace)
  • 在隔离网络中启用 Markdown 预览、代码编辑以及 GitLab Coderider Chat

这项改进大幅提升了 Web IDE 在高安全场景下的可用性与部署灵活性。

GitLab 18.7 中的其他改进

标题锚点链接的无障碍访问改进

基础版专业版旗舰版
SaaS(jihulab.com)YYY
私有化部署YYY

标题锚点链接现在会使用与其对应标题相同的文本进行朗读,从而改善屏幕阅读器用户的使用体验。这些链接还会显示在标题文本之后,从而提供更加简洁的视觉呈现效果。

这些改进使所有用户都能够更轻松地理解并导航到文档、Issue 以及其他内容中的特定章节。

在合并请求中查看子流水线报告

基础版专业版旗舰版
SaaS(jihulab.com)YYY
私有化部署YYY

此前,使用父子 CI/CD 流水线的团队需要在多个流水线页面之间来回切换,以查看测试结果、代码质量报告和基础设施变更,从而打断了合并请求的评审工作流。

现在,你可以在一个统一视图中查看和下载所有报告,包括单元测试、代码质量检查、Terraform 计划以及自定义指标,而无需离开合并请求页面。

这消除了上下文切换,加快了合并请求的处理速度,使团队能够在不牺牲质量的前提下更快地交付功能。

合并请求审批策略中的警告模式

基础版专业版旗舰版
SaaSY
私有化部署Y

安全团队现在可以使用警告模式(warn mode)在应用强制执行之前测试和验证安全策略的影响,或者通过软门禁方式逐步推广安全策略,从而加速安全项目推进。警告模式有助于在安全策略推广过程中减少开发人员阻力,同时仍然确保检测到的漏洞能够得到处理。

当你创建或编辑一个合并请求审批策略时,现在可以在警告(warn)或强制(enforce)两种执行选项之间进行选择。
https://docs.jihulab.com/user/application\_security/policies/merge\_request\_approval\_policies/

处于警告模式的策略会生成提示性的机器人评论,但不会阻塞合并请求。可以指定可选审批人作为策略问题的联系人。这种方式使安全团队能够评估策略影响,并通过透明、渐进式的策略采用方式建立开发人员信任。

合并请求中会通过清晰的标识提示用户当前策略处于警告模式还是强制模式,审计事件会跟踪策略违规和驳回情况,用于合规报告。开发人员可以在提供策略驳回理由的情况下绕过扫描发现和许可证策略违规,从而在开发人员与安全

团队之间建立一个更有效的协作反馈闭环,以推动策略更有效地落地。

当在项目的默认分支上检测到策略违规时,策略会在项目和群组的漏洞报告中标识违反策略的漏洞。项目的依赖列表

也会显示徽标,用于指示许可证合规策略违规。

此外,你还可以使用 API 查询项目默认分支上经过过滤的策略违规列表。

对合规违规进行过滤和评论

基础版专业版旗舰版
SaaSY
私有化部署Y

合规违规报告提供了一个集中视图,用于展示整个组织各项目中的所有合规违规情况。该报告显示有关控制项违规的全面详细信息、相关审计事件,并支持团队有效跟踪违规状态。

在 GitLab 18.7 中,我们引入了强大的过滤能力,帮助你快速找到最重要的违规项。你现在可以按以下条件进行过滤:

  • 状态(Status)
  • 项目(Project)
  • 控制项(Control)

团队现在还可以通过评论直接协作解决违规问题。在违规记录本身中,团队可以:

  • 标记团队成员以开展调查
  • 讨论修复方案
  • 记录调查结论 —— 全部都在违规记录中完成

综合来看,这些功能将合规违规报告演进为一个动态协作平台,使组织能够在其群组和项目中高效地发现、分析和解决合规违规问题。

自托管版本的试用中体验增强

基础版专业版旗舰版
SaaSY
私有化部署Y

GitLab Self-Managed 的 Ultimate 试用用户现在可以从左侧边栏访问其当前试用状态、剩余天数、可使用功能以及到期通知。

这些增强功能有助于消除对试用周期的困惑,并使用户在购买前更容易评估付费功能。

AI 网关超时设置

基础版专业版旗舰版
SaaS(jihulab.com)
私有化部署YY

对于 GitLab Duo Self-Hosted,现在可以为发送到自托管模型的请求配置一个超时时间值。

该值的范围可以设置为 60 到 600 秒。

配置基础智能体可用性

基础版专业版旗舰版
SaaSYY
私有化部署YY

你现在可以控制在你的顶级群组或实例中哪些基础智能体(foundational agents)可用。

你可以默认开启或关闭所有基础智能体,或者按需切换单个智能体,以符合你组织的安全与治理策略。

向管理员报告智能体和流程

基础版专业版旗舰版
SaaSYY
私有化部署YY

当你遇到有问题的内容时,现在可以将智能体(agents)和流程(flows)报告给实例管理员。你可以提交一条包含反馈的滥用报告,管理员可以选择隐藏或删除有害内容。

使用该功能可以在整个组织范围内保持你的智能体和流程的安全性。