2016-12-21 2 views
0

Я создал задачу построения на основе PowerShell для Visual Studio Team Services (ранее Visual Studio Online). Я реализовал большинство необходимых функций, но для последней части функциональности мне нужно иметь возможность сохранять небольшой объем данных между сборками.Может ли ExtensionDataService использоваться из задачи сборки VSTS на основе PowerShell?

ExtensionDataService кажется, именно то, что я хочу (в частности, SetValue и методы ПолучитьЗначение), но the documentation and examples I have found предназначены для Node.js на основе строительных задач:

VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { 
    // Set a user-scoped preference 
    dataService.setValue("pref1", 12345, {scopeType: "User"}).then(function(value) { 
     console.log("User preference value is " + value); 
    }); 

предыдущая страница также имеет частичный пример от вызова API REST, но я получил 404 ошибки при попытке использовать его, чтобы сохранить или восстановить значение:

GET _apis/ExtensionManagement/InstalledExtensions/{publisherName}/{extensionName}/Data/Scopes/User/Me/Collections/%24settings/Documents 
{ 
    "id": "myKey", 
    "__etag": -1, 
    "value": "myValue" 
} 

Может PowerShell можно использовать для доступа к ExtensionDataService, либо с помощью библиотеки или позвонив по телефону REST API напрямую?

+0

Как вы отправляете запрос REST? Через инструмент или код? Не могли бы вы установить значение методом call dataService.setValue в своем расширении? Если это так, вы можете захватить URL-адрес запроса через инструмент разработчика (https://msdn.microsoft.com/en-us/library/dn255004(v=vs.85).aspx) –

+0

Я не могу назвать 'dataService.setValue 'из моего расширения, потому что я использую PowerShell, и инструмент разработчика не будет полезен прямо сейчас, потому что мое расширение - это просто задача сборки, которая не имеет каких-либо компонентов на основе браузера. Я дал URL-адрес запроса в ответ на один из ваших других комментариев. – Chris

ответ

1

Вы можете вызвать API REST через PowerShell.

значение Set (Помещенный запрос):

https://[vsts name].extmgmt.visualstudio.com/_apis/ExtensionManagement/InstalledExtensions/{publisherName}/{extension id}/Data/Scopes/User/Me/Collections/%24settings/Documents?api-version=3.1-preview.1 

Body (Content-Type: приложения/JSON)

{ 
    "id": "myKey", 
    "__etag": -1, 
    "value": "myValue" 
} 

Получить значение (Получить запрос):

https://[vsts name].extmgmt.visualstudio.com/_apis/ExtensionManagement/InstalledExtensions/{publisherName}/{extension id}/Data/Scopes/User/Me/Collections/%24settings/Documents/mykey?api-version=3.1-preview.1 

Идентификатор издателя и идентификатор расширения можно получить в пакете json-файла (например, ВСС-extension.json)

Что касается вызова REST API с помощью PowerShell, вы можете обратиться к этой статье: Calling VSTS APIs with PowerShell

Простой образец для вызова REST API: сценарий

Param(
    [string]$vstsAccount = "<VSTS-ACCOUNT-NAME>", 
    [string]$projectName = "<PROJECT-NAME>", 
    [string]$buildNumber = "<BUILD-NUMBER>", 
    [string]$keepForever = "true", 
    [string]$user = "", 
    [string]$token = "<PERSONAL-ACCESS-TOKEN>" 
) 

# Base64-encodes the Personal Access Token (PAT) appropriately 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token))) 

$uri = "https://$($vstsAccount).visualstudio.com/DefaultCollection/$($projectName)/_apis/build/builds?api-version=2.0&buildNumber=$($buildNumber)" 

$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} 

PowerShell, чтобы получить базовый URL :

Function GetURL{ 
param([string]$url) 
$regex=New-Object System.Text.RegularExpressions.Regex("https:\/\/(.*).visualstudio.com") 
$match=$regex.Match($url) 
if($match.Success) 
    { 
     $vstsAccount=$match.Groups[1] 
     $resultURL="https://$vstsAccount.extmgmt.visualstudio.com" 
    } 
} 
GetURL "https://codetiger.visualstudio.com/" 
+0

Для {publisherName} я использовал значение «publisher» в vss-extension.json, а для {extension id} я использовал значение «id» в vss-extension.json. Я получаю сообщение об ошибке «TF400898: Внутренняя ошибка.» Для запросов PUT и GET для URL-адресов, которые вы указали. – Chris

+0

@Chris Какой URL-адрес вы использовали? Как вы отправляете запрос? Не могли бы вы загрузить и установить расширение для VSTS? –

+0

Я отправлял запросы с помощью Postman, а пример URL для PUT - «https://codetiger.extmgmt.visualstudio.com/_apis/ExtensionManagement/InstalledExtensions/csdahlberg/CodeTigerVersionStamper/Data/Scopes/User/Me/Collections /% 24settings/Документы? апи-версия = 3,1-preview.1'. Я могу загрузить его в VSTS с помощью команды 'tfx build tasks upload 'и использовать код, который у меня есть.Я не понял, как упаковать расширение PowerShell в файл VSIX для загрузки на рынок, но я создам для этого новый вопрос. – Chris

Смежные вопросы