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

Sam*_*ley 5 azure-devops azure-yaml-pipelines

在 Azure Devops“经典”管道中,管道选项菜单中有一个部分,您可以在其中打开一项功能,以在管道失败时自动创建工作项。但是,在新的 YAML 管道中,选项菜单中不存在此功能。此选项是否仍然以某种方式可用,或者 YAML 管道不支持它?

Sam*_*ley 5

尽管此选项当前无法通过 YAML 管道的 GUI 获得,但它仍然可以在后台运行 - 只是没有一种简单的方法来打开它。不过,您可以利用 Azure DevOps REST API 来实现此目的。

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

如果您的请求成功,您应该会收到一个响应,其中包含一个大型 JSON 对象,该对象描述了相关管道。那里有很多不相关的内容,但我们正在寻找的是靠近顶部的内容:有一个options数组,其中包含以下元素:

...
    {
        "enabled": false,
        "definition": {
            "id": "a9db38f9-9fdc-478c-b0f9-464221e58316"
        },
        "inputs": {
            "workItemType": "Task",
            "assignToRequestor": "true",
            "additionalFields": "{}"
        }
    },
...
Run Code Online (Sandbox Code Playgroud)

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

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