将对象数组发送到自定义Azure DevOps任务/扩展中。

3

我想为Azure DevOps创建一个自定义任务,并且我希望将对象数组作为参数,并在yaml中像这样使用:

data:
  - field1: "data1"
    field2: "data2"
  - field1: "data3"
    field2: "data4"

然而我没有找到任何针对这种情况的可用方法或示例,只有像 string 数组一样简单的数组。我该如何将一个从 yaml 中获取的对象列表传递到我的自定义 Azure DevOps 任务中?如果需要,可以随时向我询问更多细节。

编辑:

例如,我想发送一个复杂的对象列表:

data:  # Data should be an array
  - object:
    file1: "/myDestinationPath"
    file2: "/TheFilePathToSend"
    override: true
  - object:
    file1: "/myDestinationPath2"
    file2: "/TheFilePathToSend2"
    override: false
...

那么我期望加载它,类似这样:

let dataArray = task.getPathInput('data', true);

其中dataArray可以是简单的JSON数组,之后很容易进行管理。


你能否提供一个简单的样本数据,告诉我你想将它存储在哪个参数中,并且你希望如何将这个数组映射到任务参数中? - Mengdi Liang
@MerlinLiang-MSFT 我添加了一个更新 :) - fandro
1个回答

0
Fandro,我的建议是更改参数组织方式并使用taskgetDelimitedInput函数。
假设您正在使用TypeScript中的Azure管道任务库并熟悉构建任务创建
步骤1)在task.json文件中使用分隔符(例如|)定义您的变量。
    dataOrigin: "/myDestinationPath|/myDestinationPath2"
    dataDestination: "/TheFilePathToSend|/TheFilePathToSend2"
    dataOverwriteCriteria: "true|false"

步骤2)编辑您的任务文件(例如index.ts),您可以使用taskgetDelimitedInput,它返回字符串数组。

步骤3)操纵您的值:

let dataOriginArray = task.taskgetDelimitedInput('dataOrigin', "|");
let dataDestinationArray = task.taskgetDelimitedInput('dataDestination', "|");
let dataOverwriteCriteriaArray = task.taskgetDelimitedInput('dataOverwriteCriteria', "|");

1
谢谢您的回答,这可能是一个解决方案,我还想象了一个字符串数组列表直接作为参数。我很惊讶没有其他可用的选项。 - fandro
我同意你可以直接使用字符串数组,无论如何,这是当前API版本和JSON定义的可用答案。如果您认为这是一个很大的改进,您可以在GitHub上创建一个pull请求或甚至一个功能请求!干杯! - Rafael Gorski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接