powershell - 使用 powershell 创建 TFS API 发布

标签 powershell alm ms-release-management azure-devops-rest-api

我正在尝试使用 powershell 对构建进行排队并创建发布。我能够成功地对构建进行排队,但不幸的是,该版本没有触发持续部署。

我希望我可以在允许我发布应用程序的 powershell 脚本中完成这两项工作。我正在使用 TFS 2015 更新 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
    

    最佳答案

    我可以在这里想到两个问题:-

  • 如果您的发布定义与某个工件相关联,则 instanceReference.id 应该是工件的版本 ID。我的意思是它应该是内部版本号,如果链接的工件是内部版本。
  • 您还需要传递 instanceReference.name 。这里应该是构建名称。

  • 对于 TFS17,上面的 #2 应该是可选的。

    关于powershell - 使用 powershell 创建 TFS API 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41216277/

    相关文章:

    json - 使用 Azure powershell Runbook 中的 Invoke-RestMethod 时,底层连接已关闭 : An unexpected error occurred on a receive.

    powershell - 扩展PSObject的内容

    powershell - 如何控制 Hyper-V VM 控制台中的进程?

    azure - SonarQube SQL Azure 数据库支持在 5.5 中中断?

    git - 在发布期间标记 TFS Git 存储库

    ms-release-management - 从 VSTS 发布管理将网站版本部署到 Azure

    visual-studio - 发布管理导致构建失败

    powershell - 将 param block 后的语句注入(inject) PowerShell Here-String

    java - HP ALM Rest API QCSession 411 身份验证

    .net - 使用 TFS API 获取最新信息