如何使用azure devops授权承载令牌并克隆存储库?

问题描述 投票:0回答:1

我正在尝试使用我使用 Azure 中的服务连接创建的授权承载令牌来克隆存储库。服务主体具有对我尝试克隆的存储库的读者访问权限。

设置默认组织和项目:

az devops configure --defaults organization="$org" project="$project"

$org
是 azure devops 组织,
$project
是 git 存储库所在的项目。

使用以下命令获取访问令牌:

$token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv

上述步骤是在 powershell 脚本中完成的,该脚本使用管道中的 AzureCLI@2 任务运行。使用以下命令将获得的令牌保存在 git config 中:

git config --local http.<repo base URL>.extraheader "AUTHORIZATION bearer: $token"

运行 git clone 命令时,出现以下错误:

error: failed to execute prompt script (exit code 1)
fatal: could not read Username for '<repo URL>': No such file or directory

知道为什么我会收到此错误吗?我是否缺少任何步骤?

azure-devops git-clone azure-service-principal
1个回答
0
投票

您可以在doc之后获取devops repo url,并简单地复制token,如下所示:

git clone https://<your-organization>@dev.azure.com/<your-organization>/<your-project>/_git/<your-repo> --config http.extraheader="Authorization: Bearer $(token)"

步骤如下:

  1. 像您一样创建服务连接,找到服务主体并将其添加为目标 devops 存储库的

    contributor role +Basic access level
    。以便不记名令牌有权访问存储库。

  2. DevOps 管道 yaml 示例如下。我将令牌输出为变量,并在下一个 powershell 任务中使用它来克隆存储库。

pool:
  vmImage: Windows-latest

steps:
- task: AzureCLI@2
  inputs:
    azureSubscription: '<your service connection>'
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: |
      $token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv
      Write-Host "##vso[task.setvariable variable=bearertoken;]$token"

- powershell: |
    git clone https://<orgname>@dev.azure.com/<orgname>/<projectname>/_git/<reponame> --config http.extraheader="Authorization: Bearer $(bearertoken)"
    cd testssis               # <--- Go to my repo folder check the repo content
    Get-ChildItem .

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.