我正在使用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];
}
默认情况下,路径是相对的,并使用任务的工作目录。如果未指定任何内容,则工作目录取决于任务的上下文(构建与部署管道(:
"execution": {
"PowerShell3": {
"target": "$(currentDirectory)\TfvcCheckin.v3.ps1",
"workingDirectory": "$(Build.SourcesDirectory)"
}
}
用户始终可以输入绝对路径,而不是相对路径。他们总是可以添加像$(Build.SourcesDirectory)abc
这样的变量,以根路径到预定义的位置。