簡體   English   中英

使用PowerShell的TFS API創建版本

[英]TFS API Create Release with powershell

我正在嘗試使用PowerShell對構建進行排隊並創建一個版本。 我能夠成功地對構建進行排隊,但不幸的是,沒有為該版本觸發持續部署。

我希望我可以在PowerShell腳本中執行這兩個操作,這將允許我發布應用程序。 我正在使用TFS 2015 Update 3

我一直在這里發表一篇文章: http//blog.nwcadence.com/vststfs-rest-api-the-basics-and-working-with-builds-and-releases/

總之,在執行以下操作時:

  • 調用api返回發布列表
  • 執行發布列表的查詢並根據發布名稱返回id
  • 設置發布定義ID
  • 調用api以返回特定的發布定義信息
  • 設置工件的別名
  • 設置工件id
  • 設置ReleaseUri
  • 構造工件的Json字符串
  • 使用所需信息的組合設置json
  • 調用api開始在json中傳遞一個版本

我的劇本:


$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

在我敲完最后一句話之前,一切似乎都沒問題。 我收到的錯誤是:


{"$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

我在這里可以想到兩個問題: -

  1. 如果您的發布定義與某個工件鏈接,則instanceReference.id應該是工件的版本ID。 我的意思是它應該是構建號,如果鏈接的工件是構建的。

  2. 您還需要傳遞instanceReference.name。 這里應該是構建名稱。

使用TFS17,上面的#2應該是可選的。

我找到了答案。 有兩個問題。 一個需要將所有值放在引號“”中。 另一個與buildid和name相關,因為名稱是on prem必需的,但是對於工件使用了錯誤的id。 這是我的json:

{“definitionId”:17,“description”:“ContentManagement-Dev”,“artifacts”:[{“alias”:“ContentManagement-Dev”,“instanceReference”:{“id”:“12569”,“name”: “ContentManagement-Dev_1.0.0.12569”}}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM