建设目标

构建一个 统一、规范、安全、可扩展 的发布平台,满足以下目标:

  • 支持多项目并行使用,项目之间权限严格隔离
  • 通过 GitLab 单点登录,避免用户双重维护
  • 权限最小化,授权清晰
  • 项目自治,减少平台管理员日常介入成本
  • 支持项目规模扩展(用户 200+、项目数持续增长)

总体架构

核心组件

组件作用
GitLab用户身份源、组管理、代码仓库
Jenkins统一发布平台
Jenkins插件:GitLab Authentication plugin实现 GitLab SSO 登录
Jenkins插件:Matrix Authorization Strategy Plugin实现细粒度授权(全局 / 文件夹 / Job)
Jenkins插件:Folder Plugin按项目文件夹隔离,方便权限管理

认证与用户管理设计

GitLab 单点登录(SSO)

  • Jenkins 不本地维护任何用户
  • 所有用户通过 GitLab OAuth 登录 Jenkins
  • Jenkins 用户名 = GitLab username(保持唯一性)

收益:

  • 用户账号由 GitLab 统一管理
  • 避免 Jenkins 账号残留
  • GitLab 的群组方便在 Jenkins 上分配权限

    ScreenShot_2026-01-15_171512_950.png

    ScreenShot_2026-01-15_171705_093.png


GitLab 组作为权限载体

  • 不直接给个人授权,优先授权 GitLab 组
  • Jenkins 权限配置中仅引用:

    • GitLab Group
    • 少量特权用户(如项目管理员)

项目与 Job 组织结构

项目级文件夹模型

设计原则:一个项目 = 一个 Jenkins Folder

Jenkins
├── project-a/
│   ├── app1
│   ├── app2
│   └── app3
├── project-b/
│   ├── app1
│   └── app2

文件夹的职责

  • 项目 Job 的唯一容器
  • 项目权限边界
  • 项目管理员的管理单元

禁止:

  • 禁止在 Jenkins 根目录直接创建 Job
  • 禁止跨 Folder 复用 Job(避免权限穿透)

权限模型设计

授权策略配置

  • Jenkins 全局授权策略:

    授权策略:项目矩阵授权策略

对象权限
匿名用户
Authenticated UsersOverall → Read
平台管理员Overall → Administer
⚠️ 普通用户 不允许 看到非授权项目

image-20260115105208065.png

  • 项目级(文件夹)授权策略:

    启用:Enable project-based security

    image-20260115161441346.png

项目基础用户组(GitLab Group)

示例:crm

适用对象:

  • 项目开发
  • 测试

项目管理员

示例:陈日志

职责:

  • 维护项目 Job
  • 管理项目成员权限

权限最小化原则落实方式

  • 默认:给项目组授予 Job 的 Read + Build + Cancel 等基础权限

    • 基础权限尽量授权给「组」
  • 升权:

    • 仅对明确职责人员授予更高的权限
  • 不允许:

    • 不允许直接授予 Overall → Administer
    • 不允许在 Global 级别开放 Job 管理权限

项目管理员机制

项目管理员来源

  • 通常为该项目的运维或项目开发负责人
  • 由平台管理员在项目初始化时指定

项目管理员的权限边界

  • 仅限该项目 Folder
  • 无法影响其他项目
  • 无法修改 Jenkins 全局配置

凭证与敏感信息管理

Credentials 使用原则

  • 使用 Folder Scoped Credentials
  • 禁止使用 Global Credentials(除非全局凭证)

权限控制

  • 项目管理员:授予凭证的创建、删除、更新、查看等权限
  • 普通项目成员:无凭证管理权限

风险与注意事项

常见风险

风险对策
项目管理员误删 Job开启 Job 配置备份
权限配置混乱统一模板 + 规范初始化流程 + 平台管理员/安全员定期核查
人员离职权限残留依赖 GitLab SSO

初始化流程

新项目接入流程:

  1. GitLab 创建项目组
  2. Jenkins 创建 Folder
  3. 绑定 GitLab 组权限
  4. 指定项目管理员

标签: none

添加新评论