Jenkins 登录接进群晖 SSO Server:装一个插件填四个参数,CI/CD 账号跟着 NAS 走

痛点场景

公司里 Jenkins 跑着自动构建,账号却在 Jenkins 自己的用户库里单独维护:入职要开一次号,离职容易漏删,密码策略也和 NAS、域账号对不上。既然群晖存储系统上已经装了 SSO Server,能不能让 Jenkins 的登录也走这一套?

官方知识库给了现成答案:SSO Server 通过 SAML 协议对外提供单点登录,Jenkins 作为服务提供者(SP)接入后,团队成员用同一组凭据就能登录多个应用程序。整条链路在 Jenkins 侧的工作量很小——一个插件、一个安全页、四个参数。

先说清官方标注的前置条件:

  • SSO 服务器:运行 DSM 7.2 或 DSM Enterprise 1.0(PAS)及更高版本的群晖存储系统;
  • SSO 客户端:Jenkins。

另外官方提醒,部分说明基于 Jenkins 自身文档,实际界面随版本可能略有出入。

第 1 步:在 SSO Server 上完成常规设置

在作为 SSO 服务器的那台群晖上打开 SSO Server,进入常规设置

  1. 从下拉菜单选择帐户类型,两种口径的区别在于谁能通过 SSO 登录:
    • Domain/LDAP/local(或"目录和本地用户"):本地用户和外部目录用户都可以;
    • Domain/LDAP(或"仅目录用户"):只允许外部目录用户。
  2. 单击设置,输入一个将用作 SSO 登录页面的域名,保存。
  3. 服务器 URL 字段中再次输入该域名。

这里的核心是把"SSO 登录页挂哪个域名"定下来,后面 Jenkins 侧的跳转都认这个地址。

第 2 步:把 SSO Server 配置为身份提供者(IdP)

  1. 前往 SSO Server > 服务,勾选启用 SAML 服务器,并复制元数据(Metadata)——这是稍后要粘贴进 Jenkins 的整段信息。
  2. 切换到应用程序页面,选择 SAML 并单击下一步。
  3. 填写应用程序配置并保存,官方口径如下:
选项 怎么填
应用程序名称 为 Jenkins 命名这个配置文件
重定向 URI Jenkins 域名后附加 /securityRealm/finishLogin,官方示例:https://myjenkins.com/securityRealm/finishLogin
应用程序 ID 与重定向 URI 相同的 URL
Name ID 格式 选择 Persistent
默认 Name ID 定义在 Jenkins 中识别用户的默认值,官方建议选 Account
属性(可选) 单击 Add Field 添加:名称 email,值选"电子邮件"

重定向 URI 是本篇最容易填错的一项:它不是 Jenkins 首页地址,而是登录回调地址,/securityRealm/finishLogin 这段路径一个字符都不能差。

第 3 步:把 Jenkins 配置为服务提供者(SP)

另开一个浏览器标签页,用管理员帐户登录 Jenkins:

  1. 前往 Manage Jenkins > Manage Plugins,在搜索栏输入 SAML,选择 SAML Plugin,单击 Download now and install after restart
  2. 切换到 Security 页面,按下表配置后单击 Save:
选项 怎么填
安全域 SAML 2.0
IdP 元数据 粘贴第 2 步复制的 Metadata
用户名属性 username
电子邮件属性 email

注意用户名属性与电子邮件属性的取值,要和第 2 步里默认 Name ID 选 Account、属性里配的 email 对得上,名字对不上就会出现"登录成功但识别不出是谁"的错位。

第 4 步:验证单点登录是否生效

打开一个浏览器隐私窗口,前往 Jenkins 登录页面,选择 SSO 作为验证方式——此时应弹出群晖 SSO 登录页。输入一个有权访问 SSO 服务的用户凭据,配置正确的话会直接登进 Jenkins。

建议专门用一个普通帐户(而非管理员帐户)做这次验证,顺便确认该帐户在 SSO 帐户类型口径内——如果服务器端选的是"仅目录用户",拿纯本地帐户去试是登不进去的。

官方注意事项:默认 Name ID 慎用邮箱

官方在文末单独提醒:为确保信息安全,不建议将电子邮件地址设置为默认 Name ID。如果确实要用邮箱,须确保这些地址在目录服务中不可修改——邮箱一改,SSO 侧识别用户的锚点就变了,历史绑定关系会跟着乱。

集成化登录这件事,收益往往在三个月后才显出来:新员工开号一次、离职封号一次,各平台不再各管一摊。诚鑫致达科技给客户做 CI/CD 环境规划时,都会把 Jenkins 这类内部系统的登录先并进 NAS 的 SSO,再谈流水线本身。