在企业研发场景中,Jenkins 作为核心 CI/CD 工具,与 Synology DSM(存储代码包、构建产物)常需协同使用,但 “分别登录” 模式存在明显痛点:开发人员需记忆 “Jenkins 账号密码” 与 “Synology SSO 账号密码” 两套凭证,登录操作繁琐且易遗忘;IT 管理员需在 Jenkins 与 Synology 中分别维护研发团队权限(如员工离职时需两处禁用账号),管理成本高且易出现权限残留。通过 Synology SSO Server(单点登录服务器)为 Jenkins 配置 SAML(安全断言标记语言)单点登录,可实现 “一次验证,无缝访问 Synology DSM 与 Jenkins”—— 开发人员只需在 Synology SSO 完成身份验证,即可自动登录 Jenkins,无需重复输入密码。但多数 IT 管理员不清楚 “如何将 Synology SSO 作为 IdP 对接 Jenkins”“Jenkins 需安装哪些插件”“用户映射如何配置”,甚至因插件版本不兼容、元数据格式错误导致配置失败。本文基于 Synology 官方技术文档,从 “场景价值→基础认知→前置准备→分步实操→问题排查”5 个维度,提供企业级 Jenkins SAML 单点登录落地指南,确保配置一次成功。
一、先明确:为什么要为 Jenkins 配置 Synology SSO SAML?3 大核心价值
在动手配置前,需先明确 “Jenkins 与 Synology SSO 集成” 的企业级需求,这是后续规范操作的核心依据:
1. 简化研发登录流程,提升效率
开发人员日常需频繁访问 Jenkins(触发构建、查看日志)与 Synology DSM(获取代码包、存储构建产物),SAML 单点登录可将登录流程从 “两次验证” 简化为 “一次验证”:
- 传统流程:打开 Jenkins→输入 Jenkins 账号密码→登录;打开 DSM→输入 Synology 账号密码→登录(需记忆两套凭证);
- SAML 流程:打开 Jenkins→自动跳转至 Synology SSO→输入 SSO 账号密码→登录 Jenkins(后续访问 DSM 无需重复验证),步骤减少 50%,尤其适合高频使用 Jenkins 的研发团队。
2. 统一权限管理,降低 IT 成本
IT 管理员无需在 Jenkins 与 Synology 中分别创建、维护研发账号,只需在 Synology SSO Server 中管理一套账号体系:
- 员工入职:在 Synology SSO 创建账号并加入 “研发组”,自动同步至 Jenkins(无需手动在 Jenkins 添加用户);
- 员工离职:在 Synology SSO 禁用账号,Jenkins 权限同步失效(避免 “Jenkins 账号残留导致未授权构建” 风险),IT 管理工作量降低 80%。
3. 强化安全防护,符合研发合规
Synology SSO Server 支持 “多因素认证(2FA)”(如安全密钥、Synology Authenticator 验证码),为 Jenkins 登录增加 “第二道防线”,同时满足研发安全合规要求:
- 禁止非信任 IP 登录:在 Synology SSO 中设置 “仅企业内网 / 研发 VPN IP 可登录”,防止开发人员在外网非安全环境访问 Jenkins;
- 登录日志审计:通过 Synology SSO 记录 Jenkins 登录行为(时间、IP、设备),便于追溯 “未授权构建” 等安全事件。
二、基础认知:SAML 协议的 “IdP 与 SP” 分工(核心逻辑不踩坑)
配置前需明确 SAML 协议中两个核心角色的分工,避免因概念混淆导致配置偏差 ——Synology SSO Server 与 Jenkins 的角色定位的准确性,是单点登录成功的前提:
角色 | 承担者 | 核心职责 | 关键输出 / 输入 |
IdP(身份提供商) | Synology SSO Server | 负责 “身份验证”:验证开发人员的 SSO 账号密码(含 2FA),生成合法的 “SAML 断言”(含用户身份、所属组信息) | 输出:IdP 元数据(含 SAML 端点、签名证书)、SAML 断言 |
SP(服务提供商) | Jenkins | 负责 “资源访问控制”:不直接验证密码,接收 IdP 发送的 SAML 断言,验证合法性后允许开发人员访问 Jenkins 构建资源 | 输入:IdP 元数据;输出:SP 元数据(含 ACS URL) |
SAML 单点登录核心流程:
- 开发人员访问 Jenkins(SP)→Jenkins 检测到未登录,自动跳转至 Synology SSO Server(IdP);
- 开发人员在 IdP 输入 SSO 账号密码 + 完成 2FA 验证;
- IdP 生成 SAML 断言(加密用户信息),发送至 Jenkins 的 ACS URL(断言消费者服务地址);
- Jenkins 验证 SAML 断言的合法性(通过 IdP 证书),确认无误后自动登录,跳转至 Jenkins 控制台。
三、前置准备:配置前必做的 4 件事(条件不满足必失败)
Jenkins SAML 单点登录对 “软件版本、插件、权限、网络” 有严格要求,未满足以下条件会直接导致配置中断,需逐一核对(Jenkins 需为 2.300 及以上版本,旧版本不支持 SAML 插件最新功能):
准备项目 | 具体要求 | 检查 / 操作方法 |
1. 软件与插件准备 | ① Synology SSO Server:需安装 “Synology SSO Server” 套件(DSM 7.0 及以上,推荐 7.2 最新版,如 Build 69057);② Jenkins:版本≥2.300(旧版本插件兼容性差),需安装 “SAML 2.0” 插件(官方名称:SSO for Jenkins - SAML 2.0);③ IdP 设备:1 台 Synology NAS(如 DS224+、DS923+,内存≥4GB,确保 SAML 服务稳定运行) | 1. 检查 Jenkins 版本:登录 Jenkins→点击左下角 “Manage Jenkins→About Jenkins”,确认版本≥2.300;2. 安装 SAML 插件:Jenkins→Manage Jenkins→Plugins→Available Plugins,搜索 “SSO for Jenkins - SAML 2.0”,勾选后点击 “Install without restart”;3. 确认 SSO Server 版本:Synology NAS→套件中心→已安装→Synology SSO Server,确认版本≥2.0 |
2. 账号权限准备 | ① Synology SSO:需 “administrators 组” 账号(如 admin),用于配置 IdP 服务、添加 SP 信任;② Jenkins:需管理员账号(如 admin),用于安装插件、配置 SAML SP 参数;③ 测试账号:在 Synology SSO 创建 1 个 “研发组” 测试账号(如 “dev1”),用于后续登录验证 | 1. 确认 Jenkins 管理员权限:登录 Jenkins 后,若能看到 “Manage Jenkins” 菜单,说明具备管理员权限;2. 创建测试账号:Synology NAS→控制面板→用户与群组→用户→创建 “dev1”,加入 “研发组”(提前创建 “研发组”) |
3. 网络与 URL 准备 | ① 网络连通性:Jenkins 服务器与 Synology SSO Server 需在同一局域网(或通过 VPN 跨网段连通),互相能 ping 通;② Jenkins URL 配置:需在 Jenkins 中设置 “Jenkins URL”(固定访问地址,如 http://192.168.1.200:8080),SAML ACS URL 依赖此地址生成 | 1. 测试网络:在 Jenkins 服务器终端输入ping Synology SSO Server IP(如 ping 192.168.1.100),确保通网;2. 配置 Jenkins URL:Jenkins→Manage Jenkins→Configure System→Jenkins Location,在 “Jenkins URL” 输入固定地址(如 http://192.168.1.200:8080),点击 “Save” |
4. 元数据认知准备 | 需理解 “IdP 元数据” 与 “SP 元数据” 的作用:① IdP 元数据:由 Synology SSO 生成,含 SAML 登录端点、签名证书,需导入 Jenkins;② SP 元数据:由 Jenkins 生成,含 ACS URL,可导入 Synology SSO(简化 IdP 配置) | 1. 提前创建元数据存储路径:在 Synology NAS 创建 “SSO_Metadata” 共享文件夹,用于存放导出的 IdP 元数据;2. 确认 Jenkins ACS URL 格式:ACS URL 为 “Jenkins URL + /saml/acs”(如 http://192.168.1.200:8080/saml/acs),后续配置需用到 |
四、核心步骤 1:配置 Synology SSO Server 作为 SAML IdP(身份提供商)
首先需在 Synology SSO Server 中启用 SAML 服务、添加 Jenkins 的 SP 信任条目、导出 IdP 元数据,步骤如下(以 DSM 7.2 为例,DSM 7.0/7.1 操作逻辑一致):
步骤 1:启用 Synology SSO 的 SAML 服务
- 登录 Synology NAS(IdP 设备,IP 如 192.168.1.100),打开「Synology SSO Server」套件;
- 点击左侧菜单栏「SAML→身份提供商(IdP)」,进入 IdP 配置页面;
- 点击「启用 SAML 身份提供商」,系统自动生成关键配置(无需手动修改,确保安全性):
- 签名证书:用于加密 SAML 断言(防止传输中被篡改),系统默认生成,企业也可点击「导入证书」上传自定义 CA 证书(需.pem 格式);
- 点击「保存」,页面顶部显示 “IdP 服务已启用”,说明 SAML 服务启动成功。
步骤 2:添加 Jenkins 的 SP(服务提供商)信任条目
需在 IdP 中添加 Jenkins 的 SP 信息,确保 IdP 仅向授权的 Jenkins 发送 SAML 断言:
- 在「SAML→身份提供商(IdP)」页面,点击「添加服务提供者(SP)」;
- 进入 “基本信息” 配置页,输入 Jenkins 的 SP 关键参数(ACS URL 与 SP 实体 ID 需与 Jenkins 配置一致):
- SP 名称:自定义名称(如 “Jenkins_研发 CI”,便于 IT 识别);
- 单点登录服务 URL:默认与 ACS URL 一致,无需修改;
- 点击「下一步」,进入 “属性映射” 页面(核心:将 Synology SSO 的用户属性传递给 Jenkins,用于用户匹配):
- 点击「添加属性」,设置 “IdP 属性” 为 “email”(Synology SSO 中用户的电子邮件字段),“SP 属性” 为 “NameID”;
- 勾选 “作为 NameID 发送”(关键必选:Jenkins 仅通过 NameID 识别用户,不勾选会导致登录时 “用户不匹配”);
- (可选)添加 “组属性映射”:若需同步用户组(如 “研发组”),点击「添加属性」,设置 “IdP 属性” 为 “group”,“SP 属性” 为 “JenkinsGroup”,便于 Jenkins 基于组分配权限;
- 点击「下一步」,进入 “权限设置” 页面,限制可登录 Jenkins 的用户范围(企业推荐精细化控制):
- 勾选 “指定用户组”,在下拉框中选择 “研发组”(仅该组用户可通过 SSO 登录 Jenkins);
- 取消勾选 “允许所有用户”(避免非研发人员登录 Jenkins,保障构建安全);
- 点击「完成」,Jenkins 的 SP 信任条目添加成功,IdP 已认可 Jenkins 为授权服务提供商。
步骤 3:导出 IdP 元数据(用于 Jenkins 配置)
IdP 元数据含 Jenkins 所需的 SAML 端点与证书,需导出并保存至可访问路径:
- 在「SAML→身份提供商(IdP)」页面,点击「导出元数据」;
- 选择保存路径(如之前创建的 “SSO_Metadata” 共享文件夹),文件命名为 “Synology_SSO_IdP_Metadata.xml”,点击「确定」;
- 验证元数据完整性:用记事本打开文件,确认包含 标签(无乱码、无标签缺失),若缺失需重新导出(可能是导出时网络中断导致)。
五、核心步骤 2:配置 Jenkins 作为 SAML SP(服务提供商)
Jenkins 需导入 IdP 元数据、配置 SAML 登录规则,确保能接收并验证 IdP 发送的 SAML 断言,步骤如下(以 Jenkins 2.401 为例):
步骤 1:进入 Jenkins SAML 配置页面
- 登录 Jenkins 管理员账号,点击左侧菜单栏「Manage Jenkins→Configure Global Security」;
- 在 “Security Realm”(安全域)下拉框中,选择 “SAML 2.0”(安装 SAML 插件后才会显示,若未显示需重启 Jenkins);
- 点击 “SAML 2.0” 下方的「Configure」按钮,进入 SAML 详细配置页面。
步骤 2:导入 Synology SSO 的 IdP 元数据
- 在 “IdP Metadata”(IdP 元数据)配置区,选择 “Upload metadata file”(推荐,避免手动输入错误);
- 点击「Choose File」,选择从 Synology SSO 导出的 “Synology_SSO_IdP_Metadata.xml” 文件,点击「Upload」;
- 系统自动解析元数据,填充以下关键参数(无需手动输入,若解析失败需检查元数据文件完整性):
- IdP Entity ID:自动填充为 Synology SSO 的 IdP 实体 ID;
- IdP Certificate:自动导入 Synology SSO 的签名证书(用于验证 SAML 断言);
- 若解析失败(如提示 “Invalid metadata”):选择 “Enter metadata URL”,输入 Synology SSO 的 IdP 元数据 URL(如 “https://192.168.1.100:5001/sso/saml/idp/metadata”),点击「Validate」完成导入。
步骤 3:配置 Jenkins SAML 关键参数
- 在 “SP Configuration”(SP 配置)区,确认 “Service Provider Entity ID” 与 “Assertion Consumer Service URL”:
- 在 “User ID Mapping”(用户 ID 映射)区,设置 Jenkins 如何通过 SAML 断言识别用户:
- 选择 “NameID”(与 Synology SSO 的属性映射一致,因之前设置 NameID 为 email,此处 Jenkins 会用 SAML 断言中的 email 作为用户 ID);
- (可选)若需用用户名映射:在 Synology SSO 属性映射中设置 NameID 为 “username”,此处同步选择 “NameID”;
- 在 “Authorization”(授权)区,设置 Jenkins 权限(企业推荐基于用户组授权):
- 选择 “Matrix-based security”(矩阵式安全);
- 点击「Add user or group」,输入 “研发组”(Synology SSO 中同步的用户组名称),勾选 “Overall→Read”“Job→Build” 等研发必需权限;
- 点击页面底部「Save」,Jenkins SAML 配置完成,自动跳转至登录页面(此时默认登录方式已变为 SAML)。
六、关键验证:测试 Jenkins SAML 单点登录是否生效
配置完成后,用 “研发组” 测试账号(如 “dev1”)验证登录流程,确保单点登录正常:
步骤 1:发起 Jenkins 登录
- 打开浏览器,访问 Jenkins URL(如http://192.168.1.200:8080);
- 页面自动跳转至 Synology SSO Server 登录页面(显示 “通过 Synology SSO 登录 Jenkins” 提示),无手动选择登录方式,说明 SAML 跳转正常。
步骤 2:Synology SSO 身份验证
- 在 Synology SSO 登录页,输入测试账号 “dev1” 的 SSO 密码;
- (若启用 2FA)完成多因素认证(如输入 Synology Authenticator 生成的 6 位验证码,或插入安全密钥);
- 验证通过后,页面无需手动操作,自动跳转回 Jenkins。
步骤 3:确认 Jenkins 登录成功
- 跳转回 Jenkins 后,直接进入 “Jenkins 控制台”,右上角显示当前登录用户为 “dev1”(与 SSO 账号一致);
- 验证权限:尝试创建测试任务(Job)并触发构建,确认能正常操作(无 “权限不足” 提示);
- 退出测试:点击 Jenkins 右上角 “dev1→Sign Out”,再次访问 Jenkins,仍自动跳转至 SSO 登录,说明单点登录流程完整。
七、常见问题解答:Jenkins SAML 配置的 4 大高频问题(官方解决方案)
Q1:Jenkins 中找不到 “SAML 2.0” 安全域选项,怎么办?
- 原因:1. 未安装 “SAML 2.0” 插件,或插件安装失败;2. Jenkins 版本过低(<2.300),不支持最新插件;3. 插件安装后未重启 Jenkins,未加载插件功能;
- 检查插件安装:Jenkins→Manage Jenkins→Plugins→Installed Plugins,搜索 “SSO for Jenkins - SAML 2.0”,确认状态为 “Installed”;若未安装,重新在 “Available Plugins” 中搜索(确保插件来源为 “Jenkins Update Center”,避免第三方来源插件不兼容);
- 升级 Jenkins 版本:若版本 <2.300,点击 Manage Jenkins→Manage Plugins→Available Plugins,安装 “Jenkins LTS Upgrade Assistant” 插件,按指引升级至 2.300 + 版本;
- 重启 Jenkins:点击 Manage Jenkins→Restart Jenkins→“Yes”,重启后重新进入 “Configure Global Security”,即可看到 “SAML 2.0” 选项。
Q2:导入 Synology SSO 元数据时,Jenkins 提示 “Invalid certificate in metadata”,如何处理?
- 原因:1. 元数据文件中的证书格式错误(如导出时文件损坏,缺失-----BEGIN CERTIFICATE-----标签);2. 导入的是自定义证书,但证书未通过 Jenkins 信任验证;
- 重新导出 IdP 元数据:在 Synology SSO Server 中删除 Jenkins 的 SP 信任条目,重新添加后导出元数据,用记事本打开确认证书标签完整;
- 使用系统默认证书:若之前导入了自定义证书,在 Synology SSO 的「SAML→IdP」页面点击「重新生成证书」,生成系统默认证书,重新导出元数据并导入 Jenkins;
- 手动导入证书:若仍失败,在 Jenkins SAML 配置中选择 “Enter IdP certificate manually”,从元数据文件中复制标签内的证书内容(去除换行符),粘贴后点击「Validate」。
Q3:SSO 验证成功后,Jenkins 提示 “User ‘dev1@company.com’ is missing the Overall/Read permission”,怎么解决?
- 原因:Jenkins 未给 SAML 登录的用户(或用户组)分配 “Overall/Read” 基础权限,导致登录后无访问权限;
- 用 Jenkins 本地管理员账号登录(若无法登录,在 Jenkins 服务器修改config.xml文件,临时将安全域改回 “Jenkins’ own user database”);
- 进入 Manage Jenkins→Configure Global Security→Authorization→Matrix-based security;
- 点击「Add user or group」,输入 SAML 登录的用户名(如 “dev1@company.com”,即 SAML 断言中的 NameID)或用户组(如 “研发组”);
- 为该用户 / 组勾选 “Overall→Read” 权限,若需构建权限,额外勾选 “Job→Build”“Job→Workspace”,点击「Save」;
- 退出管理员账号,用 SSO 重新登录,权限生效。
Q4:开发人员登录 Jenkins 时,跳转至 Synology SSO 后提示 “无 SSO 登录权限”,但用户已在 “研发组”,怎么办?
- 原因:1. Synology SSO 的 Jenkins SP 信任条目权限设置错误,未勾选 “研发组”;2. 用户虽在 “研发组”,但组未同步至 SAML 断言;
- 检查 Synology SSO 权限设置:进入 Synology SSO→SAML→IdP→SP 列表→Jenkins→编辑→权限设置,确认 “研发组” 已勾选,且未勾选 “禁止该组登录”;
- 确认组属性映射:在 Jenkins SAML 配置的 “Attribute Mapping” 中,添加 “Group Attribute”,设置 “Attribute Name” 为 “JenkinsGroup”(与 Synology SSO 中配置的 SP 属性一致),点击「Save」;
- 重新登录:开发人员退出 Synology SSO,清除浏览器缓存后重新登录,组权限同步生效。
八、总结:Jenkins SAML 配置的 3 个关键注意事项
- 插件与版本匹配是前提:Jenkins 版本需≥2.300,SAML 插件需为 “SSO for Jenkins - SAML 2.0”(官方插件),避免使用第三方非兼容插件;
- 元数据完整性与一致性是核心:Synology SSO 与 Jenkins 的 SP 实体 ID、ACS URL 必须完全一致(含协议 http/https、端口、路径),元数据导出后需验证标签完整性,避免因格式错误导致配置失败;
- 权限管控精细化是保障:企业需在 Synology SSO 中按 “研发组”“测试组” 细分权限,在 Jenkins 中基于 SAML 同步的用户组分配构建权限,避免未授权人员访问核心 CI/CD 资源。
若配置中遇到未覆盖的问题(如跨域 SAML 登录、Jenkins 集群 SAML 配置),可登录 Synology 支持中心(
https://www.synology.com/zh-cn/support)或 Jenkins 官方社区,提交 “Synology SSO Jenkins SAML 配置” 工单,提供元数据文件、错误截图、软件版本信息,官方技术人员会在 1-2 个工作日内提供针对性解决方案,确保研发团队的 Jenkins 单点登录稳定运行。