【问题标题】:How to find a TFS release in progress?如何找到正在进行的 TFS 版本?
【发布时间】:2018-12-08 03:39:10
【问题描述】:

如果 TFS 2018 的管道未完全完成,我需要使构建失败。仅批处理构建是不够的;链接的发布也必须在另一个构建开始之前完成。我的想法是通过 REST API 在 PowerShell 脚本中执行此操作。

我在官方文档here 中看到有一个名为TaskStatus 的属性。它提供了inProgress 的值,大概用于正在进行的发布。这可能会奏效,但没有说明如何实际使用它。

使用 REST API,我如何获取给定版本的 TaskStatus

【问题讨论】:

  • 我不明白你为什么要这样做。你能给出一些背景吗?发布失败并不一定意味着构建本身是错误的。

标签: powershell tfs build queue release


【解决方案1】:

in process 和其他一些值,如succeededcanceled 仅代表发布管道中任务的状态。

您可以简单地使用Rest API 来获得发布

GET https://fabrikam.vsrm.visualstudio.com/MyFirstProject/_apis/release/releases/{releaseId}?api-version=4.1-preview.6

应该有一个叫status的值:

"id": 18,
  "name": "Release-18",
  "status": "abandoned",
  "createdOn": "2017-06-16T01:36:20.397Z",
  "modifiedOn": "2017-06-16T01:36:21.07Z",
  "modifiedBy": {
    "id": "4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
    "displayName": "Chuck Reinhart",
    "uniqueName": "fabfiber@outlook.com",
    "url": "https://app.vssps.visualstudio.com/A168224e4-29ff-4081-9954-c8780ce81117/_apis/Identities/4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
    "imageUrl": "https://fabfiber-inc.visualstudio.com/_api/_common/identityImage?id=4adb1680-0eac-6149-b5ee-fc8b4f6ca227"
  },
  "createdBy": {
    "id": "4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
    "displayName": "Chuck Reinhart",
    "uniqueName": "fabfiber@outlook.com",
    "url": "https://app.vssps.visualstudio.com/A168224e4-29ff-4081-9954-c8780ce81117/_apis/Identities/4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
    "imageUrl": "https://fabfiber-inc.visualstudio.com/_api/_common/identityImage?id=4adb1680-0eac-6149-b5ee-fc8b4f6ca227"
  },
  "environments": [
    {
      "id": 69,
      "releaseId": 18,
      "name": "Dev",
      "status": "notStarted",
      "variables": {},
      "preDeployApprovals": [],
      "postDeployApprovals": [],
      "preApprovalsSnapshot": {
        "approvals": [
          {
            "rank": 1,
            "isAutomated": false,
            "isNotificationOn": false,
            "approver": {
              "id": "4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
              "displayName": "Chuck Reinhart",
              "uniqueName": "fabfiber@outlook.com",
              "url": "https://app.vssps.visualstudio.com/A168224e4-29ff-4081-9954-c8780ce81117/_apis/Identities/4adb1680-0eac-6149-b5ee-fc8b4f6ca227",
              "imageUrl": "https://fabfiber-inc.visualstudio.com/_api/_common/identityImage?id=4adb1680-0eac-6149-b5ee-fc8b4f6ca227"
            },
            "id": 0
          }

您可以在返回的json文件中获取值状态,并判断释放成功还是失败。最后根据这个状态触发另一个构建与否。


更新

带有任务状态信息的返回 json 示例:

  "deploymentJobs": [
                                {
                                    "job": {
                                        "id": 5,
                                        "timelineRecordId": "855ea6d6-9ed0-442d-b921-0c4add8bb068",
                                        "name": "Release",
                                        "dateStarted": "2018-07-04T08:53:05.9133333Z",
                                        "dateEnded": "2018-07-04T08:53:21.34Z",
                                        "startTime": "2018-07-04T08:53:05.9133333Z",
                                        "finishTime": "2018-07-04T08:53:21.34Z",
                                        "status": "succeeded",
                                        "rank": 1,
                                        "issues": [],
                                        "agentName": "DFA00"
                                    },
                                    "tasks": [
                                        {
                                            "id": 1,
                                            "timelineRecordId": "fa3bb635-eab4-4c1b-9cc0-fdccd7ced33f",
                                            "name": "Initialize Job",
                                            "dateStarted": "2018-07-04T08:53:06.5833333Z",
                                            "dateEnded": "2018-07-04T08:53:06.8033333Z",
                                            "startTime": "2018-07-04T08:53:06.5833333Z",
                                            "finishTime": "2018-07-04T08:53:06.8033333Z",
                                            "status": "succeeded",
                                            "rank": 1,
                                            "issues": [],
                                            "agentName": "DFA00",
                                            "logUrl": "http://xxxx:8080/tfs/DefaultCollection/7658559e-6e61-422a-952b-a5fce0b6ca1d/_apis/Release/releases/49/environments/49/tasks/1/logs?releaseDeployPhaseId=54"
                                        }, 

单个发布中的任务部署结果应该有timelinerecordstarttimefinishtimestatus .

【讨论】:

  • 这至少存在三个问题:1) 变量名称 TaskStatus,如文档所述,从未出现在任何结果中 2) 指定 releases/98(例如)总是返回所有版本,而不是单个指定 3)发送参数 ?api-version=4.1-preview.6 在 TFS 2018 上导致 404(这不是 VSTS,正如原始问题中仔细指出的那样)。文档似乎不正确,在任何情况下都是不充分的。使用这种方法的前进进度仍然受阻。
  • @InteXX 值名称只是任务 ID 下的 status。如果您有多个版本,请确保您已输入项目选项。我使用的 API 类似于 GET https://tfsurl/project/_apis/release/16&api-version=4.0 我在更新的回复中添加了一个示例供您参考。在代码中使用 API 之前,您可以先在 PostMan 中对其进行测试。
  • "值名就是任务ID下的状态" 这个值不代表在审版本的进度。对于很久以前完成的版本,我返回了一个 active 值。
  • 为了测试您的 deploymentJobs 更新,我触​​发了一个版本,其中仅包含一个 PowerShell 任务,其内联脚本运行 Start-Sleep -s 60。在这 60 秒内,我在浏览器中运行了一对 REST API 命令,首先检索正在进行的定义,然后从中检索正在进行的发布。我在job 节点下收到了值对:"status":"inProgress"。所以看起来它有效。谢谢你。但是......我仍然认为文档严重不足(甚至不准确)。如果不是这样,我们就不必进行这种对话了。
猜你喜欢
  • 2010-11-26
  • 2011-04-15
  • 2013-02-02
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2019-05-19
相关资源
最近更新 更多