我有一个管道和一个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%对于命令提示符有效,并且可以...一旦您在工件的权限中“允许项目范围内的构建”(请参见下文)。 为什么?我不知道...。但是那是奢侈。
答案 0 :(得分:0)
我假设您有一个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
的权限:
您可以查看this thread了解更多详细信息。