在 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
.
问题
我正在尝试通过 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
.