You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:25:16