在 azure DevOps 发布管道中执行 "git pull" 导致错误 -> 致命:无法读取用户名

executing "git pull" in azure DevOps release pipelines results in error -> fatal: could not read Username for

问题

我正在尝试通过 Azure Devops 发布管道部署我的代码,方法是执行一个 powershell 脚本,该脚本检查主分支并拉取我们的生产服务器:

cd "C:\..."
git checkout master
git pull 

这会在我尝试执行 git pull:

时产生错误
fatal: could not read Username for 'https://acino.visualstudio.com': terminal prompts disabled

当我从服务器本身执行脚本时,脚本没有问题。只有当我使用发布管道时它才会失败。

疑难解答

• 错误消息让我相信执行git pull 时没有设置用户名,但是如果我在代码中添加以下两行

git config user.name 
git config user.email

我看到正在打印正确的用户名和电子邮件地址。

• 另一个猜测是它试图从错误的来源提取,因为 'https://acino.visualstudio.com' 不是我存储库的 URL。所以我也尝试将存储库名称附加到 git pull

git pull https://URL to my repository
with no luck.

因此我不太明白问题到底是什么。欢迎任何输入、评论和建议。

仅供参考:我知道在发布管道中执行 git 拉入可能不是部署代码的标准方式。我还构建了其他更传统的有效部署管道。但是,由于我们的 directory/project 结构使用 git pull 将是我认为的最佳解决方案。

亲切的问候, Rok Bohinc

请尝试在 git 配置中使用 System.AccessToken,因为它写 here

$mods = (git submodule status) | % { ($_.Trim() -split " ")[1] }
$baserepo = ($env:BUILD_REPOSITORY_URI).TrimEnd($env:BUILD_REPOSITORY_NAME)
foreach($mod in $mods)
{
cd $mod
$cmd = 'git config http.' + $baserepo + $mod + '.extraheader "AUTHORIZATION: bearer ' + $env:System_AccessToken + '"'
write $cmd
iex $cmd
cd ..
}

你也可以考虑有用。

您可以使用具有以下格式的 git 拉取命令:

git pull {URL} {remote branch}:{local branch}

并插入PAT into the URL would provide credentials to resolve login issues. You can create a new PAT manually or use the System.AccessToken(更推荐),我这边的最终格式是:

git pull https://$env:SYSTEM_ACCESSTOKEN@dev.azure.com/{OrgName}/{ProjectName}/_git/{RepoName} master:master

git pull https://{PAT}@dev.azure.com/{OrgName}/{ProjectName}/_git/{RepoName} master:master

看起来您的项目仍然是旧格式 xxx.visualstudio.com/...,因此您的最终格式将类似于:

git pull https://PAT:{PAT}@xxx.visualstudio.com/{ProjectName}/_git/{RepoName} master:master

git pull https://$env:SYSTEM_ACCESSTOKEN@xxx.visualstudio.com/{ProjectName}/_git/{RepoName} master:master

使用 PAT 或 System.AccessToken in URL,您不需要配置用户名和密码。请记住我们应该启用 以便我们可以访问 System.AccessToken.