2017-05-04 58 views
0

我已經創造了團隊服務構建定義,需要在一個私人劑(即內部部署構建服務器)上運行403(禁止)錯誤。此代理正在域帳戶下運行。然後我在Team Services中創建了一個NuGet feed,我嘗試發佈NuGet Packager任務創建的包。VSTS的NuGet出版商 -

我正在一個身份驗證錯誤(403禁止)試圖將包推到使用的NuGet發佈任務(的NuGet v4.0.0.2283)的內部進料時:

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集合範圍)。因此,向Feed的貢獻者添加Project Collection Build服務帳戶的默認權限可能不正確。 我認爲需要被添加到提供者(或業主)與此特定團隊項目相關的項目生成服務帳戶。

由於在這個團隊服務業佔15分以上的項目和項目構建服務帳戶都具有相同的名稱,找到正確的帳戶需要一些工作。我設法找到addding以下的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 

現在,我似乎無法添加項目構建服務帳戶通過鍵入其guid或鍵入「項目構建服務」以從帳戶列表中找到具有正確guid的項目。

這是bug還是我忘記配置些什麼呢?

+0

如果您將帳戶添加爲供稿權限中的所有者,那麼構建結果如何? –

+0

我的(用戶)帳戶已經是供稿的所有者。這可能是我能夠使用VSTS憑證提供程序手動發佈到Feed的原因。儘管代理服務在不同的(服務)帳戶下運行。 我需要在VSTS中爲此服務帳戶創建一個用戶嗎?我沒有看到在MSDN文檔中這樣做的要求... –

回答

1

我設法找到解決方案。爲了可能會遇到同樣問題的其他人的利益,請在此處解決問題。

我開始尋找在REST API飼料權限嘗試添加該項目的具體生成服務帳戶(使用上述PowerShell腳本收集的ID),進料的貢獻者。在API documentation

看,我意識到,你需要指定它具有以下格式的完整標識描述:

Microsoft.TeamFoundation.ServiceIdentity;00000000-0000-0000-0000-000000000000:Build:10000000-0000-0000-0000-00000000000 

然後我修改了內聯PowerShell腳本來顯示所有關於項目構建服務信息身份:

$headers = @{Authorization="Bearer ${env:SYSTEM_ACCESSTOKEN}"} 
$response = Invoke-RestMethod "${env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}/_apis/connectionData" -Headers $headers 
$response.authenticatedUser | Format-List | Out-Host 

然後我意識到描述符中返回包含「建:」後顯示的第二部分的GUID,比身份ID不同。此guid也出現在返回的authenticatedUser對象的providerDisplayName屬性中。

使用飼料權限界面,我嘗試使用providerDisplayName GUID做搜索,終於一個結果!將這個Project Build服務帳戶添加到貢獻者並運行新版本之後,我能夠發佈該提要。

爲了方便配置飼料的權限,我相信documentation specific to build identities可以改進,因爲它只提到項目集合範圍的構建定義而不是項目範圍的定義。

歸根結底,問題的事實,如果一支球隊服務業佔countains多個項目,給予正確的權限項目的構建服務帳戶梗是不容易的,因爲它們都具有相同的名稱,即項目建設服務(帳戶)。