Jenkins使用PAT对接Azure Devops Server时出现HTTP 401认证问题
解决Jenkins克隆Azure DevOps Server仓库时的HTTP 401(NTLM认证问题)
根据你描述的情况,核心问题在于Jenkins的Git插件自动尝试使用NTLM认证,而你的Azure DevOps Server仓库需要的是基于PAT的Basic认证。下面是几种无需修改TFS/IIS配置的Jenkins端解决方案:
1. 强制Git客户端使用Basic认证
全局Git配置(服务器层面)
在Jenkins容器内部执行以下命令,为目标仓库添加全局Git配置,强制所有针对该仓库的操作携带Basic认证头:
git config --global http.https://mytfsserver/my/project/_git/myrepo.extraHeader "Authorization: Basic <你的PAT base64编码值>"
注意:如果需要持久化配置,可以将Git配置目录挂载到容器外部。
作业级配置(更灵活)
在你的Jenkins作业配置中:
- 进入「源代码管理」→「Git」
- 点击「Additional behaviors」→ 选择「Advanced clone behaviors」
- 在「Clone options」输入框中添加:
-c http.extraHeader="Authorization: Basic ${PAT_BASE64}" - 提前将你的PAT base64值存储为Jenkins的「Secret text」类型凭证,然后在作业中引用该凭证的环境变量(
${PAT_BASE64}),避免硬编码敏感信息。
2. 调整Git插件的凭证与行为
- 确保你使用**「Username with password」类型**的Jenkins凭证:用户名可以填写任意字符串(比如
dummy),密码直接填写你的PAT(不需要base64编码,Git会自动处理)。 - 在作业的Git配置中,添加「Additional behaviors」→ 选择「Wipe out repository & force clone」,清除本地可能缓存的旧认证信息。
- 进入Jenkins的「全局工具配置」→ 找到Git安装项,检查是否有「Use credentials helper」选项,尝试禁用它——凭证助手可能会自动切换到NTLM认证模式。
3. 直接使用Git CLI步骤替代内置Git插件
如果上述方法都无效,你可以绕过Jenkins内置的Git步骤,直接在「Execute shell」(Linux容器)或「Execute Windows batch command」(Windows容器)中执行你手动测试成功的命令:
git -c http.extraHeader="Authorization: Basic ${PAT_BASE64}" clone https://mytfsserver/my/project/_git/myrepo
同样,通过Jenkins凭证管理存储${PAT_BASE64}的秘密值,保证安全性。
问题根源说明
Azure DevOps Server在收到未认证请求时,会返回包含多种认证方式(NTLM、Basic等)的401响应。Jenkins的Git插件默认会优先尝试NTLM认证(尤其是在Windows环境下),但你的PAT仅支持Basic认证,因此导致认证失败。通过强制指定Basic认证头,就能让请求符合Azure DevOps Server的要求。
内容的提问来源于stack exchange,提问作者rdmrtn
相关产品推荐
相关产品推荐

