输入数量未知的 Azure 管道自定义任务
Azure pipeline custom task with an unknown number of inputs
我正在使用 TypeScript 为 Azure 管道创建自定义任务。
我定义了一个filePath
输入:
{
"name": "myFile",
"label": "file to read",
"type": "filePath",
"required": true,
"groupName": "files",
"helpMarkDown": "file to read",
"defaultValue": "",
"visibleRule": "getFile = true"
},
用户应该能够在任务中定义未知数量的路径。
有没有办法以某种方式在任务中动态生成输入,如果用户浏览路径,gui 将显示另一个 filePath
输入?如果有这样的选项,我怎样才能遍历它们并将所有文件下载到管道?
1 的替代方案 - 我可以有一个简单的字符串输入,我可以在其中指示用户输入多个路径。在这种情况下,用户如何在没有 filePath
输入给你的浏览按钮帮助的情况下提取 repo 中文件的路径?
大多数任务提供多行文本框(可选择调整大小),您可以在 task.json
:
中设置
{
"name": "patternManifest",
"type": "multiLine",
"properties": {
"resizable": true,
"rows": "1"
},
"label": "Manifest file(s)",
"defaultValue": "vss-extension.json",
"required": false,
"helpMarkDown": "Specify the pattern for manifest files. One file per line."
},
然后在任务本身中你使用 tl.getDelimitedInput()
并传入你想要支持的分隔符,在这个任务中我要求他们使用换行符 \n
:
const globsManifest = tl.getDelimitedInput("patternManifest", "\n", false);
任务库也支持通配符匹配,这样人们就可以将 *
、**
和 ?
添加到他们的输入中,任务会将这些解析为实际文件,然后使用 tl.findMatch()
选项。
if (vsixFilePattern.indexOf("*") >= 0 || vsixFilePattern.indexOf("?") >= 0) {
tl.debug("Pattern found in vsixFile parameter.");
matchingVsixFile = tl.findMatch(process.cwd(), vsixFilePattern);
}
else {
tl.debug("No pattern found in vsixFile parameter.");
matchingVsixFile = [vsixFilePattern];
}
默认情况下路径是相对的,并使用任务的工作目录。当指定 none 时,工作目录取决于任务的上下文(构建与部署管道):
"execution": {
"PowerShell3": {
"target": "$(currentDirectory)\TfvcCheckin.v3.ps1",
"workingDirectory": "$(Build.SourcesDirectory)"
}
}
用户始终可以输入绝对路径而不是相对路径。他们总是可以添加像 $(Build.SourcesDirectory)\a\b\c
这样的变量来将路径根目录到预定义的位置。
我正在使用 TypeScript 为 Azure 管道创建自定义任务。
我定义了一个filePath
输入:
{
"name": "myFile",
"label": "file to read",
"type": "filePath",
"required": true,
"groupName": "files",
"helpMarkDown": "file to read",
"defaultValue": "",
"visibleRule": "getFile = true"
},
用户应该能够在任务中定义未知数量的路径。
有没有办法以某种方式在任务中动态生成输入,如果用户浏览路径,gui 将显示另一个
filePath
输入?如果有这样的选项,我怎样才能遍历它们并将所有文件下载到管道?1 的替代方案 - 我可以有一个简单的字符串输入,我可以在其中指示用户输入多个路径。在这种情况下,用户如何在没有
filePath
输入给你的浏览按钮帮助的情况下提取 repo 中文件的路径?
大多数任务提供多行文本框(可选择调整大小),您可以在 task.json
:
{
"name": "patternManifest",
"type": "multiLine",
"properties": {
"resizable": true,
"rows": "1"
},
"label": "Manifest file(s)",
"defaultValue": "vss-extension.json",
"required": false,
"helpMarkDown": "Specify the pattern for manifest files. One file per line."
},
然后在任务本身中你使用 tl.getDelimitedInput()
并传入你想要支持的分隔符,在这个任务中我要求他们使用换行符 \n
:
const globsManifest = tl.getDelimitedInput("patternManifest", "\n", false);
任务库也支持通配符匹配,这样人们就可以将 *
、**
和 ?
添加到他们的输入中,任务会将这些解析为实际文件,然后使用 tl.findMatch()
选项。
if (vsixFilePattern.indexOf("*") >= 0 || vsixFilePattern.indexOf("?") >= 0) {
tl.debug("Pattern found in vsixFile parameter.");
matchingVsixFile = tl.findMatch(process.cwd(), vsixFilePattern);
}
else {
tl.debug("No pattern found in vsixFile parameter.");
matchingVsixFile = [vsixFilePattern];
}
默认情况下路径是相对的,并使用任务的工作目录。当指定 none 时,工作目录取决于任务的上下文(构建与部署管道):
"execution": {
"PowerShell3": {
"target": "$(currentDirectory)\TfvcCheckin.v3.ps1",
"workingDirectory": "$(Build.SourcesDirectory)"
}
}
用户始终可以输入绝对路径而不是相对路径。他们总是可以添加像 $(Build.SourcesDirectory)\a\b\c
这样的变量来将路径根目录到预定义的位置。