Azure DevOps Pipeline 中的 Git 存储库权限问题

迈克科尔

在 Azure Pipelines 任务中,我尝试创建并推送一个新分支。我可以使用$(System.AccessToken)变量克隆 repo ,当我尝试推送新分支时,出现以下错误:

remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\(GUID)', scope 'repository'.

如果我检查我的存储库安全性,我会看到 Build Service 用户和 Project Collection Build Service Accounts 组都将 Contribute、Create Branch、Contribute to pull request 和 Create Tag 权限设置为“允许”,这来自我所有的研究我所做的就是我应该做的。

如何解决此问题?我认为要么我错过了一些愚蠢的东西,要么存在权限继承问题。但是,如果我在存储库本身上设置安全性,我的假设是应该覆盖任何继承的权限。

管道:

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'

权限: 在此处输入图片说明

刘维托

应该是你的构建服务账号没有这个仓库的贡献权限造成的。

转到项目设置--> 存储库--> 单击要操作的存储库--> 相应地设置存储库权限。

注意:服务帐户是项目集合构建服务(组织名称)

在此处输入图片说明

更新1

我遇到了问题,添加此服务帐户{project name} Build Service ({Org name})并配置帐户权限,它将起作用。

在此处输入图片说明

根据错误信息:Details: identity 'Build\(GUID)', scope 'repository'.,我们可以得到服务帐号的GUID

检查这个REST API,它可以列出服务帐户,我们可以通过GUID搜索服务帐户名称,然后配置权限。

更新2

由于您使用的是AccessToken,它通过服务帐户更新存储库,作为另一种解决方法,我们可以使用个人访问令牌做同样的事情,并且不需要配置服务帐户权限。

更新2

通过 PAT 令牌克隆 repo 的示例 power shell 脚本:

$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 天。您可以参考此文档了解更多详情。

在 PAT 到期前 7 天,您会收到类似于以下示例的通知。

在此处输入图片说明

然后我们可以更改过期时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当脚本保存在 git 存储库中时,如何将 JMeter 与 Azure DevOps Pipeline 集成?

Azure Devops Pipeline YAML中的Git标记名称

如何在Azure DevOps中删除Git存储库?

Azure DevOps 是否支持 API 来查询 Azure DevOps 中托管的 git 存储库?

如何在 Azure DevOps 中覆盖“拒绝”存储库权限?

git存储库的Azure DevOps语言?

Azure DevOps - Git 存储库设置

在 Azure DevOps Pipeline 中找不到 Pytest

在 Azure DevOps Yaml Pipeline 中调试

将输出从terraform传递到Azure后端存储中具有状态文件的Azure Devops Pipeline

如何解决Azure Data Factory 2中对Azure DevOps存储库的无访问权限

如何使用Azure DevOps REST Api从Git存储库下载分支中的文件?

Azure DevOps Git 存储库 - 不包括更改中的所有文件

如何在 Azure DevOps Git 存储库的 README.MD 中创建内联链接?

在 azure devops 中创建的每个 git 存储库的大小限制是多少

Git在Azure DevOps中的2个存储库之间保持文件同步任务

使用git clone命令从azure devops中检出多个存储库时出错

Azure DevOps YML Pipeline将git checkout更改为Classic

多个 Azure DevOps 项目 GIT 与单个 Azure Databricks 存储库

Azure DevOps:如何使用REST API存储库在GIT存储库中创建文件夹

创建独立部署时如何解决 Azure Devops Pipeline 中的目标问题

Azure DevOps导入需要通过API授权的Git存储库

将Github Git存储库迁移到Azure DevOps TFVC

Azure 管道构建公共 github 项目,管道 yaml 存储在 Azure Devops Git 中

Azure DevOps Pipeline - 在管道中读取构建标记?

在 Azure DevOps Pipeline 中成功运行失败的测试

Azure Devops Pipeline在管道生成中获得“默认文字”错误

我推送到某个存储库的Git分支未出现在Azure DevOps的“矿井”列表中

在两个不同的存储库中管理Azure DEVOPS Git DEV和发布分支是个好主意吗?