You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Pipeline自定义任务:如何从API响应动态填充pickList

Azure DevOps自定义任务动态填充pickList选项解决方案

Azure DevOps Pipeline自定义任务支持动态填充pickList选项,但你之前用taskLib.setVariable的方式不对——这个方法是在任务运行阶段设置变量,而pickList的选项需要在任务配置UI渲染时就生成,得用**动态参数(dynamic parameters)**机制实现。

正确实现步骤

1. 修改task.json配置动态参数

把原来的pickList配置改成带动态选项的参数,指定用来生成选项的脚本路径:

{
  "name": "pickListTM",
  "type": "pickList",
  "label": "Select Threat Model(s)",
  "required": false,
  "defaultValue": "",
  "helpMarkDown": "List of threat models accessible to the User",
  "dynamicOptions": {
    "script": "$(task.path)/getThreatModels.js",
    "arguments": ""
  }
}

2. 编写TypeScript脚本获取API数据并生成选项

编写脚本调用你的API,将返回的名称和GUID转换成pickList需要的格式,最后输出JSON数组(Azure DevOps会自动解析这个输出作为下拉选项):

import * as taskLib from 'azure-pipelines-task-lib/task';
import * as request from 'request-promise-native';

async function getThreatModels() {
  try {
    // 调用API获取威胁模型数据
    const apiResponse = await request.get({
      uri: 'https://你的API地址/threatmodels',
      json: true
    });

    // 将API返回的name和guid映射为pickList需要的格式
    const pickListOptions = apiResponse.map(model => ({
      value: model.guid,
      displayName: model.name
    }));

    // 输出JSON格式的选项,供Azure DevOps UI加载
    console.log(JSON.stringify(pickListOptions));
  } catch (error) {
    taskLib.setResult(taskLib.TaskResult.Failed, `获取威胁模型列表失败:${error.message}`);
  }
}

getThreatModels();

关键注意事项

  • 脚本需要编译为JavaScript,放在task.json中指定的路径下(比如getThreatModels.js)。
  • 动态参数脚本在任务配置UI加载时执行,要确保脚本能正常访问目标API(如果是内部API,需配置相应权限)。
  • 脚本输出必须是严格的JSON数组,每个元素必须包含value(对应GUID)和displayName(对应显示名称)两个字段。

内容的提问来源于stack exchange,提问作者prats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:29:59