Yan Sklyarenko が言ったように、TFS 2015 (およびいくつかの更新後の 2013) には優れた REST API があります。
私は、私が望むことを行う非常に大まかな基本的な PowerShell スクリプトを作成しました。このコードのリファクタリングがどれだけ必要かを強調することはできません。概念実証として機能するために必要だっただけです。さまざまなニーズに合わせて複数のスクリプトを開発しますが、コード例を求めてここに来た人のために、ここです。
- TFS のビルド システムに接続する
- ビルド定義項目の一覧表示 (自分用、Poc)
- 文字列を検索してビルド ID を取得する
- ハードコーディングされた ID 7 を使用して、ビルドを開始します(これが機能することがわかっていたため、私の作業は完了しました)
- Artifactsを取得します(VSO ビルド タスク 'Publish Artifacts Server ' を組み込みました)。
- TFS がそれらを圧縮するため、Extract は受信したArtifactsを言いました。
そこから、これらのスクリプトと出力を MS Release Management サービスに組み込み、オンプレミス TFS 2015 向けに出荷された VSO Release vNext に移行する準備を整えます。
$projectId ='{ProjectIdGuid}'
$buildNr = '3945'
$username = 'username'
$password = 'password'
$zipDestination = 'C:\temp\unzip\temp.zip'
$workingFolder = ('C:\temp\unzip\' + [System.DateTime]::Now.ToString("yyyyMMddhhmmss")) #temp because of file already exist warnings... after completion we should delete the working directory content
$tfsURL = 'http://myTFS:8080/tfs/MyCollection/'+ $projectId
$cred = New-Object System.Management.Automation.PSCredential($username, (ConvertTo-SecureString -String $password -AsPlainText -Force))
#write list of build definitions (to be used later)
$allbuildDefs = (Invoke-RestMethod -Uri ($tfsURL + '/_apis/build/definitions?api-version=2.0') -Method GET -Credential $cred).value | Where-Object {$_.name -like '*buildName*'} | Out-Default | select name
Write-Host($allbuildDefs)
$buildDefs = ConvertFrom-Json($allbuildDefs)
$buildId = ($buildDefs.value).id;
#Get build Definition for what you want to build
$buildDefinitionURI = $tfsURL + '/_apis/build/requests?api-version=1.0'
#kick off build
$body = '{ "definition": { "id": '+ 7 + '}, reason: "Manual", priority: "Normal"}'
$BuildReqBodyJson = $body | ConvertTo-Json
$buildOutput = Invoke-RestMethod -Method Post -Uri $buildDefinitionURI -Credential $cred -ContentType 'application/json' -Body $body
#get buildNr
#build URI for buildNr
$BuildURI = $tfsURL + '/_apis/build/builds/' + $buildNr + '/artifacts'
#get artifact downloadPath
$downloadURL = (Invoke-RestMethod -Uri $BuildURI -Credential $cred).Value.Resource.downloadUrl
#download ZIP
Invoke-WebRequest -uri $downloadURL -Credential $cred -OutFile $zipDestination
#unzip
Add-Type -assembly 'system.io.compression.filesystem'
[io.compression.zipfile]::ExtractToDirectory($zipDestination, $workingFolder)