在Yaml管道中访问$(System.AccessToken)

时间:2020-10-15 19:09:57

标签: azure-devops

我有一个管道和一个azure-pipelines.yml来驱动我的构建,需要使用PAT,以便构建脚本通过使用“ nuget源添加”来使用nuget推送工件。 这可行! 但是我的PAT在脚本中,这很糟糕,并且PAT最终会过期,所以我宁愿使用$(System.AccessToken),但我无法使其正常工作,似乎有很多相关问题,但我根本不明白自己在做什么。

这是有效的Yaml(带有伪造的PAT)

name: $(Rev:r)

trigger:
- master

jobs:
- job: Windows
  pool:
    vmImage: 'windows-2019'
  steps:
  - task: NuGetToolInstaller@1
  - task: UseDotNet@2
    inputs:
      packageType: 'sdk'
      version: '3.1.201'        
  - script: dotnet tool restore
    displayName: Install FAKE
  - script: nuget sources add -name "Kookerella2" -source https://pkgs.dev.azure.com/..../index.json -username anything -password thisismypat
    displayName: nuget add source
  - script: dotnet fake build
    displayName: Run Build

并使用$(System.AccessToken)

我这样做吗?用环境变量%SYSTEM_ACCESSTOKEN%替换硬编码的拍子 (您必须滚动到最右边才能看到) 但这失败了!

name: $(Rev:r)

trigger:
- master

jobs:
- job: Windows
  pool:
    vmImage: 'windows-2019'
  steps:
  - task: NuGetToolInstaller@1
  - task: UseDotNet@2
    inputs:
      packageType: 'sdk'
      version: '3.1.201'        
  - script: dotnet tool restore
    displayName: Install FAKE
  - script: nuget sources add -name "Kookerella2" -source https://pkgs.dev.azure.com/Kookerella2/_packaging/Kookerella2/nuget/v3/index.json -username anything -password %SYSTEM_ACCESSTOKEN%
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    displayName: nuget add source
  - script: dotnet fake build
    displayName: Run Build

我在做蠢事吗?


基于我尝试使用的反馈

$env:SYSTEM_ACCESSTOKEN

此操作失败,(我很确定脚本默认为命令提示符)。

然后我尝试

  - powershell: nuget sources add -name "Kookerella2" -source https://pkgs.dev.azure.com/Kookerella2/_packaging/Kookerella2/nuget/v3/index.json -username anything -password $env:SYSTEM_ACCESSTOKEN
    env:
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)

在构建中使用nuget推送失败

Response status code does not indicate success: 403 (Forbidden - User '123a17e0-1d16-4a98-a124-435fda808ac6' lacks permission to complete this action. You need to have 'AddPackage'. (DevOps Activity ID: 4CCE5D91-5279-4782-BF9F-00279A087C6E)).

我有

“项目集合构建服务(Kookerella2)->贡献者”

在我的工件权限下设置


解决方案在下面标记。 总结是...原始的YAML没什么问题,%SYSTEM_ACCESSTOKEN%对于命令提示符有效,并且可以...一旦您在工件的权限中“允许项目范围内的构建”(请参见下文)。 为什么?我不知道...。但是那是奢侈。

2 个答案:

答案 0 :(得分:0)

使用此文档: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#access-variables-through-the-environment

我假设您有一个Windows机器上默认运行的PowerShell脚本。因此,您应该按以下方式访问变量:

 - script: nuget sources add -name "Kookerella2" -source https://pkgs.dev.azure.com/Kookerella2/_packaging/Kookerella2/nuget/v3/index.json -username anything -password $env:SYSTEM_ACCESSTOKEN

答案 1 :(得分:0)

在使用响应状态代码进行构建的nuget推送中失败的情况并不表示成功:403(禁止访问

要解决此问题,您可以尝试检查您是否拥有Your project Build Services的权限。默认情况下,当您在AzureDevOps项目上创建工件之上的Feed时,它仅具有Project collection Build Service的权限,而没有your project Build Services的权限:

enter image description here

您可以查看this thread了解更多详细信息。