我在 Team Services 中创建了一个构建定义,它需要在私有代理(即内部构建服务器)上运行。此代理在域帐户下运行。然后,我在 Team Services 中创建了一个 NuGet 源,我试图将由 NuGet Packager 任务创建的包发布到该源。
尝试使用 NuGet 发布者任务 (NuGet v4.0.0.2283) 将包推送到内部提要时,出现身份验证错误(403 Forbidden):
2017-05-04T21:05:06.3076014Z CredentialProvider.TeamBuild: Failed to authenticate to https://mycompany.pkgs.visualstudio.com/_packaging/MyProject/nuget/v3/index.json from your project collection, prefix = https://mycompany.pkgs.visualstudio.com/
2017-05-04T21:05:07.8546075Z System.AggregateException: One or more errors occurred. ---> NuGet.Protocol.Core.Types.FatalProtocolException: Unable to load the service index for source https://mycompany.pkgs.visualstudio.com/_packaging/MyProject/nuget/v3/index.json. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 403 (Forbidden).
请注意,我可以使用我的凭据在构建服务器上手动发布相同的包,如下所述:https ://www.visualstudio.com/en-us/docs/package/nuget/nuget-exe
现在,构建定义是项目范围的(不是项目集合范围的)。因此,将项目集合构建服务帐户添加到提要的贡献者的默认权限可能不正确。我认为需要将与此特定团队项目关联的Project Build Service 帐户添加到贡献者(或所有者)中。
由于此 Team Services 帐户中有 15 个以上的项目,并且 Project Build Service 帐户都具有相同的名称,因此要找到正确的帐户需要一些工作。通过将以下 PowerShell 内联脚本添加到构建中(我从这里获得:https ://github.com/Microsoft/vsts-tasks/issues/3287 ),我设法找到了特定的项目构建服务帐户 guid:
$headers = @{Authorization="Bearer ${env:SYSTEM_ACCESSTOKEN}"}
$response = Invoke-RestMethod "${env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}/_apis/connectionData" -Headers $headers
$response.authenticatedUser | Format-List id, customDisplayName | Out-Host
现在,我似乎无法将 Project Build Service 帐户添加到提要的贡献者中,方法是键入其 guid 或键入“Project Build Service”以从帐户列表中找到具有正确 guid 的帐户。
这是一个错误还是我忘记配置某些东西?