Azure DevOps YAML管道是否存在“失败时创建工作项”选项?

时间:2020-07-06 14:05:08

标签: azure-devops azure-yaml-pipelines

在Azure Devops“经典”管道中,管道的“选项”菜单中有一个部分,您可以在其中打开功能以自动创建有关管道故障的工作项。但是,在新的YAML管道中,选项菜单中没有此功能。该选项是否仍然可用,或者YAML管道不支持该选项?

1 个答案:

答案 0 :(得分:1)

尽管该选项当前无法通过YAML管道的GUI使用,但它仍然可以在后台运行-仅有一种简单的方法可以将其打开。但是,您可以通过利用Azure DevOps REST API来做到这一点。

首先,您需要知道Azure DevOps组织,项目的名称以及管道的“定义ID”,这是在查看给定管道时URL上的查询字符串参数,例如https://dev.azure.com/{organization}/{project}/_build?definitionId={definition id}。然后,您将使用以下{URL:https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definition id}?api-version=5.1这样的URL格式向该ID的Pipelines API发送GET请求。对于身份验证,您应该能够使用基本身份验证,将用户名保留为空白,并使用适当范围的个人访问令牌作为密码。

如果请求成功,您应该得到一个包含一个大JSON对象的响应,该对象描述了所讨论的管道。那里有很多不相关的东西,但我们要寻找的是顶部附近:有一个options数组,其中包含以下元素:

...
    {
        "enabled": false,
        "definition": {
            "id": "a9db38f9-9fdc-478c-b0f9-464221e58316"
        },
        "inputs": {
            "workItemType": "Task",
            "assignToRequestor": "true",
            "additionalFields": "{}"
        }
    },
...

该ID "a9db38f9-9fdc-478c-b0f9-464221e58316"在所有管道中似乎都是静态的,并且唯一地标识了在失败时创建工作项的选项。如果我们编辑JSON将"enabled": false"更改为true(并在inputs字段中设置其他所需的选项),那么我们现在可以从GET请求中获取整个JSON响应,并将其用作对同一URL的第二次API调用的主体,这次是PATCH请求。如果一切正确,则应该在PATCH的响应中看到更新的更改。

这有点笨拙,因为仍然无法验证是否通过Web UI启用了该选项,但是直到Microsoft更新UI使其包含此功能之前,它才是最好的选择。还有一个方便的技巧是,如果您已经有一个经典模式管道,在其中向UI添加了其他字段或其他自定义项,则可以对该管道执行API GET,以提取这些设置的确切JSON,并使用它们将您的PATCH告知您的YAML管道。