2015-12-02 2 views
2

Можно ли каким-либо образом создать резервную копию/экспортировать/загрузить все рабочие элементы? Я посмотрел на REST API, но, похоже, вы не можете выполнить f.e. запрос через этот API ...Резервные работы на VS Team Services

ответ

3

Хорошо, нашел способ получить работу. Я снова посмотрел документацию по API. Мне помогла страница https://www.visualstudio.com/en-us/docs/integrate/api/wit/overview. Сначала нужно сделать

GET https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/queries/{folderpath}?api-version={version}&$expand=wiql 

Из полученного JSON вам нужно, чтобы получить wiql часть, которая является фактическим запросом. После этого вам нужно сделать

POST https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/wiql?api-version={version} 

Где тело является JSON с { «запрос» = «YOURQUERY»}

В результате вы получите JSON, содержащий все WorkItem URLs/идентификаторами. Вы должны пройти через них, и запросы каждого отдельного WorkItem через

GET URL?$expand=all 

Примечание: добавить $ расширение = все, только если вам нужны отношения и вложения тоже?. Я положил что-то вместе для PowerShell. Примечание. Я решил жестко запросить запрос и удалить обработку ошибок, чтобы сделать его немного короче.

function loadJsonFile($fileName) 
{ 
    return ConvertFrom-Json "$(Get-Content $fileName)" 
} 
function getLastItemFromURL($url) 
{ 
    $absPath = ([System.Uri]$url).AbsolutePath 
    $lastSlash = $absPath.LastIndexOf("/") 
    $absPath.Substring($lastSlash+1) 
} 
function getWorkItemId($url) 
{ 
    getLastItemFromURL($url) 
} 

# make sure you enabled alternative credentials and access for them 
# you can get the value for YOURCODE i.e. via Fiddler 
$headers = @{Authorization="Basic YOURCODE"} 

# before this you would need to find the WIQL of the query; left to you 
$body = @{ 
    "query" = "THEQUERYFROMTHEJSON" 
} 
$bodyJson = $body | ConvertTo-Json 

Invoke-RestMethod -method Post -ContentType application/json -Uri "https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/wiql?api-version=1.0" -Headers $headers -Body $bodyJson -OutFile workitems.json 

$workItemsJson = $(loadJsonFile workitems.json) 
$workItems = $(foreach ($relation in $workItemsJson.workItemRelations) 
{ 
    $relation.target.url 
    $relation.source.url 
}) | select -Unique | sort 

echo "Going to download the following ids from $(getWorkItemId $workItems[0])-$(getWorkItemId $workItems[-1])" 

# download the workitems 
foreach($workItemUrl in $workItems) 
{ 
    $workItemId = getWorkItemId $workItemUrl 
    echo "Download ID: $workItemId" 

    $workItemUrl = "$workItemUrl`?`$expand=all" 
    $fileName = "workitem_$workItemId.json" 
    Invoke-RestMethod -ContentType application/json -Uri "$workItemUrl" -Headers $headers -OutFile "$fileName" 

    # download attachments 
    $workItemJson = $(loadJsonFile "$fileName") 
    foreach($relation in $workItemJson.relations) 
    { 
     if($relation.rel -eq "AttachedFile") 
     { 
      $fileUrl = $relation.url 
      Invoke-WebRequest $fileUrl -Headers $headers -OutFile $(getLastItemFromURL $fileUrl) 
     } 
    } 
} 
1

Вы можете экспортировать рабочие элементы запросов в Excel с использованием Team Foundation надстройки для Excel, как описано here

+0

Мне нужно что-то, что вы могли бы выполнить в сценарии powershell. в идеале без установки Excel. – SACO

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