2016-12-19 5 views
1

私はビルドをキューに入れ、powershellを使ってリリースを作成しようとしています。私は正常にビルドをキューに入れることはできますが、残念ながら、Continuous Deploymentはリリースでは起動されていません。TFS API powershellを使ってリリースを作成する

私は、これらの両方をPowerShellスクリプトで実行して、アプリケーションをリリースできるようにしたいと考えています。 http://blog.nwcadence.com/vststfs-rest-api-the-basics-and-working-with-builds-and-releases/

を要約すると次のことを実行するには:私はここに掲載の記事から取り組んできたアップデート3

をTFS 2015を使用しているリリースのリストを返すためにAPIを呼び出す

  • リリースのリストのクエリを実行し、 リリース定義ID
  • を設定
  • リリース名に基づいてIDを返します
  • 組み合わせでJSONを設定するアーティファクト
  • のためのJSON文字列を構築ReleaseUri
  • を設定するアーティファクトのIDに
  • を設定するアーティファクトを
  • をエイリアスを設定する
  • 特定のリリースの定義情報を返すためにAPIを呼び出します必要な情報のJSONを渡すリリースの作成をキックオフするAPIを呼び出す

マイスクリプト:


$releaseDef = Invoke-RestMethod -Method Get -UseDefaultCredentials -Uri "$Uri/$defaultCollection/$TeamProject/_apis/release/definitions?api-version=2.2-preview.1" 
$id = $releaseDef.value | Where-Object { $_.name -eq $releaseName} | select id 
$releaseDefId = $id.id 

$release = Invoke-RestMethod -Method Get -UseDefaultCredentials -ContentType "application/json" -Uri "$Uri/$defaultCollection/$TeamProject/_apis/release/definitions/$releaseDefId`?api-version=2.2-preview.1" 

$alias = $release.artifacts.alias 
$aliasId = $release.artifacts.id 

$releaseUri = "$Uri/$defaultCollection/$TeamProject/_apis/release/releases?api-version=2.2-preview.1" 

$jsonReleaseString = "{""alias"": ""$alias"", ""instanceReference"" : ""id"" : ""$aliasId""}}" 

$jsonRelease = @" 
{ 
    "definitionId": $releaseDefId, 
    "description": $buildNbr, 
    "artifacts": [ 
    $jsonReleaseString 
    ] 
} 

$releaseResponse = Invoke-RestMethod -Method Post -UseDefaultCredentials -ContentType "application/json" -Uri $releaseUri -Body $jsonRelease 

すべては私が最後の文を打つまではOKと表示されます。私が受けてるのエラーは次のとおりです。


{"$id":"1","innerException":null,"message":"VS402903: The parameter with name releaseStartMetadata should be an ReleaseStartMetadata, but the specified value is not convertible to 
ReleaseStartMetadata","typeName":"System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","typeKey":"InvalidOperationException","errorCode":0,"eventId":0} 
At line:1 char:12 
+ $release = Invoke-RestMethod -Method Post -UseDefaultCredentials -ContentType "a ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException 
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand 

答えて

0

私はここで2つの問題を考えることができます: -

  1. ご使用のリリースの定義は、いくつかの成果物とリンクされている場合は、その後instanceReference.idがあるべきアーティファクトのバージョンID。リンクされたアーティファクトが構築されている場合は、ビルド番号でなければなりません。

  2. instanceReference.nameも渡す必要があります。ここでビルド名にする必要があります。

上記の#2はオプションです。

+0

感謝。あなたが示唆したように私は編集を行い、同じエラーを受け取ります。 –

+0

Jsonで使用されている変数は次のとおりです。 私は上記の$ releaseコールで返されたリリース定義IDを使用しています 私は上記の$ releaseコールで返されたアーティファクト別名を使用しています 私は、成功したビルドの応答 成功したビルドの応答の呼び出しから返されたbuildnumberを使用しています –

0

答えが見つかりました。 2つの問題がありました。 1つはすべての値を引用符 ""で囲む必要がありました。もう1つは名前の前には必須ですが、成果物には間違ったIDを使用していたため、buildidと名前に関連していました。ここに私のJSONは次のとおりです。

{ "definitionId":17、 は、 "説明": "ContentManagement-DEV"、 "アーティファクト":[ { "エイリアス": "ContentManagement-DEV"、 "instanceReference" :{ "ID": "12569"、 "名": "ContentManagement-Dev_1.0.0.12569"}} ] }あなたの応答のための

関連する問題