【问题标题】:Azure DevOps - get custom Task Reference IDAzure DevOps - 获取自定义任务参考 ID
【发布时间】:2019-10-30 22:01:06
【问题描述】:

我想使用Definitions - Update REST API 调用更新管道。

这很好,但是当我想添加一个自定义任务(自制构建管道任务扩展)时,我努力寻找正确的任务参考ID

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"The pipeline is not valid. A task is missing. The pipeline references a task called '7f1fe94f-b811-4ba1-9d6a-b6c27de758d7'. This 
usually indicates the task isn't installed, and you may be able to install it from the Marketplace: https://marketplace.visualstudio.com. (Task version 1.*, job 'Job_1', step ''.),Job Job_1: Step  
has an invalid task definition reference. A valid task definition reference must specify either an ID or a name and a version specification with a major version 
specified.","typeName":"Microsoft.TeamFoundation.DistributedTask.Pipelines.PipelineValidationException, 
Microsoft.TeamFoundation.DistributedTask.WebApi","typeKey":"PipelineValidationException","errorCode":0,"eventId":3000}

我使用Installed Extensions - List REST API 调用检查了我的自定义任务的registrationId。但这不是正确的。 (7f1fe94f-b811-4ba1-9d6a-b6c27de758d7)

我还将自定义任务手动添加到管道中,并使用Definitions - Get REST API 调用读出正确的任务引用ID。我可以在以下位置找到 ID:

$pipeline.process.phases.steps.task.id -> 2c7efb3e-3267-4ac6-addc-86e88a6dab34


但是如何在不手动添加自定义任务的情况下读出这个 id?

这个id显然是动态的,每次安装自定义任务时都会发生变化,所以一定有办法得到这个引用。

【问题讨论】:

  • 是来自 Marketplace 的任务还是您自己的任务?
  • 这是一个自定义任务,由我自己创建。
  • @ShaykiAbramczyk 感谢 Shayki 的提示。 ID 写在task.json 中。非常感谢你。但是我有办法直接从 Azure DevOps 服务器获取这个 ID 吗?它必须有这些信息,但在哪里?

标签: azure-devops azure-devops-rest-api


【解决方案1】:

每次安装自定义任务时任务id都没有变化,但他存在于任务的task.json中:

{
    "id": "2f159376-f4dk-4311-a49c-392f9d534113",
    "name": "TaskName",
    "friendlyName": "Task Name",

另一种选择是使用这个 api:

https://dev.azure.com/{organiztion}/_apis/distributedtask/tasks

您将获得所有任务的长列表,搜索您的任务,您将看到 id。

【讨论】:

  • 如果没有文档很难找到,非常感谢您的回答!
  • 另外: API 调用可能会返回一个很长的 json 响应。我在使用 PowerShell Invoke-RestMethodConvertFrom-Json 生成对象时遇到问题。我在这里找到了处理非常长的 json 的答案:ConvertFrom-Json max length错误消息是: Cannot process argument because the value of argument "name" is not valid. Change the value of the "name" argument and run the operation again.
  • 很高兴我找到了这个。这个 rest api 非常糟糕/没有记录,有时很难找到你需要的东西。我想补充一点,如果您已经知道任务的 id 并且不想遇到长列表的问题,您可以使用这个 api:https://dev.azure.com/{organiztion}/_apis/distributedtask/tasks/{taskid} 它将返回具有所有已安装版本的特定任务。对我来说,它用于从发布定义中获取扩展详细信息(制造商 + 名称),其中我有可用的 taskid。 taskid 在扩展 api 中不可用(原因不明)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2020-05-16
  • 1970-01-01
  • 2019-04-03
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多