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

Mr *_*r D 6 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
Run Code Online (Sandbox Code Playgroud)

并使用 $(System.AccessToken)

我做这个?将硬编码的 pat 替换为环境变量 %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
Run Code Online (Sandbox Code Playgroud)

我是不是在做蠢事?


根据我尝试使用的反馈

$env:SYSTEM_ACCESSTOKEN
Run Code Online (Sandbox Code Playgroud)

这失败了(我很确定脚本默认为命令提示符)。

然后我尝试了

  - 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)
Run Code Online (Sandbox Code Playgroud)

在构建中的 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)).
Run Code Online (Sandbox Code Playgroud)

我有

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

在我的工件权限下设置


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

Leo*_*SFT 6

在构建中的 nuget 推送中失败,响应状态代码并不表示成功:403(禁止

要解决此问题,您可以尝试检查您是否有Your project Build Services. 默认情况下,当您在 AzureDevOps 项目上创建基于 Artifacts 的 Feed 时,它仅具有以下权限,Project collection Build Service但不具有以下权限your project Build Services

在此输入图像描述

您可以查看此线程以获取更多详细信息。

  • 现在这似乎有效了!您能否添加一些有关其实际含义的细节?(我很多年前就使用过 TFS,并放弃了它,转而使用 Jenkins,因为它迷宫般的安全模型使得做任何事情几乎不可能,我故意采用了“构建服务器只运行构建脚本”的心态......但这意味着我必须了解如何控制其他任何东西,但控制构建代理的权限) (2认同)