Git Azure DevOps Pipeline 中的存储库权限问题
Git repository permissions issue in Azure DevOps Pipeline
在 Azure Pipelines 任务中,我正在尝试创建并推送一个新分支。我可以使用 $(System.AccessToken)
变量克隆回购协议,当我尝试推送新分支时出现以下错误:
remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\(GUID)', scope 'repository'.
如果我检查我的存储库安全性,我看到构建服务用户和项目集合构建服务帐户组都有参与、创建分支、参与拉取请求和创建标签权限设置为“允许”,来自我所做的所有研究都是我应该做的。
如何解决此问题?我假设要么我遗漏了一些愚蠢的东西,要么存在权限继承问题。但是,如果我在存储库本身上设置安全性,我的假设是应该覆盖任何继承的权限。
管道:
steps:
- powershell: |
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone "https://repoaddress/_git/common"
cd common
git checkout develop
git checkout -b release/$(build.buildNumber) $(build.buildNumber)
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push -u origin HEAD
displayName: 'Create Branch From Tag'
权限:
应该是你的构建服务账号没有这个仓库的贡献权限造成的。
进入项目设置--> Repositories --> 点击你要操作的Repos -->相应地设置repository权限。
注意:服务帐户是项目集合构建服务(组织名称)
更新1
我收到问题了,添加此服务帐户 {project name} Build Service ({Org name})
并配置帐户权限,它将起作用。
根据报错信息:Details: identity 'Build\(GUID)', scope 'repository'.
,我们可以得到服务账号的GUID
检查这个REST API,它可以列出服务帐户,我们可以通过GUID搜索服务帐户名称,然后配置权限。
更新2
由于您使用的是 AccessToken
,它通过服务帐户更新存储库,作为另一种解决方法,我们可以使用个人访问令牌做同样的事情,它不需要配置服务帐户权限。
更新2
一个示例 power shell 脚本,用于通过 PAT 令牌克隆 repo:
$MyPat = 'yourPAT'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
git -c http.extraHeader="Authorization: Basic $B64Pat" clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName
我们将在 PAT 的生命周期内收到两个通知 - 一个在创建时,另一个在到期前 7 天。您可以参考这个 doc 了解更多详情。
在您的 PAT 到期前 7 天,您会收到类似于以下示例的通知。
然后我们可以更改过期时间。
在 Azure Pipelines 任务中,我正在尝试创建并推送一个新分支。我可以使用 $(System.AccessToken)
变量克隆回购协议,当我尝试推送新分支时出现以下错误:
remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\(GUID)', scope 'repository'.
如果我检查我的存储库安全性,我看到构建服务用户和项目集合构建服务帐户组都有参与、创建分支、参与拉取请求和创建标签权限设置为“允许”,来自我所做的所有研究都是我应该做的。
如何解决此问题?我假设要么我遗漏了一些愚蠢的东西,要么存在权限继承问题。但是,如果我在存储库本身上设置安全性,我的假设是应该覆盖任何继承的权限。
管道:
steps:
- powershell: |
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone "https://repoaddress/_git/common"
cd common
git checkout develop
git checkout -b release/$(build.buildNumber) $(build.buildNumber)
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push -u origin HEAD
displayName: 'Create Branch From Tag'
权限:
应该是你的构建服务账号没有这个仓库的贡献权限造成的。
进入项目设置--> Repositories --> 点击你要操作的Repos -->相应地设置repository权限。
注意:服务帐户是项目集合构建服务(组织名称)
更新1
我收到问题了,添加此服务帐户 {project name} Build Service ({Org name})
并配置帐户权限,它将起作用。
根据报错信息:Details: identity 'Build\(GUID)', scope 'repository'.
,我们可以得到服务账号的GUID
检查这个REST API,它可以列出服务帐户,我们可以通过GUID搜索服务帐户名称,然后配置权限。
更新2
由于您使用的是 AccessToken
,它通过服务帐户更新存储库,作为另一种解决方法,我们可以使用个人访问令牌做同样的事情,它不需要配置服务帐户权限。
更新2
一个示例 power shell 脚本,用于通过 PAT 令牌克隆 repo:
$MyPat = 'yourPAT'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$MyPat"))
git -c http.extraHeader="Authorization: Basic $B64Pat" clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName
我们将在 PAT 的生命周期内收到两个通知 - 一个在创建时,另一个在到期前 7 天。您可以参考这个 doc 了解更多详情。
在您的 PAT 到期前 7 天,您会收到类似于以下示例的通知。
然后我们可以更改过期时间。