在 VS Code 和 TypeScript 中调试 Azure DevOps 自定义任务时如何设置输入变量
How to set input variables when debugging Azure DevOps custom Tasks in VS Code and TypeScript
背景:
我正在为 Azure DevOps 构建自定义构建任务。
- 这个任务需要一个输入参数,param1
- 它是用 VS Code (v1.30.1) 和 TypeScript (tsc --version state: v3.2.2) 编写的
问题
当我尝试调试我的任务时,我无法为 param1 传递变量值。断点被击中,因此该部分正在工作。
一些代码:
index.ts
import tl = require('azure-pipelines-task-lib/task');
async function run() {
try {
let param1: string = tl.getInput('param1', true);
if (param1 === null || param1 === undefined) {
console.log('Should not be here...');
}
}
catch (err) {
tl.setResult(tl.TaskResult.Failed, err.message);
}
}
run();
当我使用 tsc;node index.js 从控制台 运行 时,这工作正常但是当 运行 VS 代码调试器时,我似乎从来没有能够将值传递给 param1,以便它在 'getInput' 方法中崩溃。
我的launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "TaskName",
"program": "${workspaceFolder}/Extensions\BuildTasks\TaskName\index.ts",
"outFiles": [
"${workspaceFolder}/Extensions\BuildTasks\TaskName\**\*.js"
]
}
]}
我也试过添加
"env": {
"param1": "thisBeString"
}
在输出文件下,但没有成功。
无奈之下我也尝试过使用
"args": {
"--param1": "thisBeString"
}
达到预期结果(失败...)
我也在 tasks.json 中使用了输入但没有成功(according to this 所以问答)
所以问题是在 VS Code 中调试 Azure DevOps 扩展时如何传入变量值。
作为环境变量传递的 Task
输入参数的名称必须带有前缀 INPUT_
。
在您的示例中,您将在启动环境中设置参数 param1
,如下所示:
launch.json
"env": {
"INPUT_param1": "thisBeString"
}
您无需在代码中重命名 param1
,因为前缀会自动添加到对 getInput()
的调用中。
在运行时设置任务环境时,Azure DevOps 管道也会添加该前缀。这样做有助于降低与其他环境变量发生冲突的风险。
请在此处查看 Azure Pipelines 任务 SDK 源参考:
https://github.com/microsoft/azure-pipelines-task-lib/blob/master/node/task.ts#L219
背景: 我正在为 Azure DevOps 构建自定义构建任务。
- 这个任务需要一个输入参数,param1
- 它是用 VS Code (v1.30.1) 和 TypeScript (tsc --version state: v3.2.2) 编写的
问题 当我尝试调试我的任务时,我无法为 param1 传递变量值。断点被击中,因此该部分正在工作。
一些代码: index.ts
import tl = require('azure-pipelines-task-lib/task');
async function run() {
try {
let param1: string = tl.getInput('param1', true);
if (param1 === null || param1 === undefined) {
console.log('Should not be here...');
}
}
catch (err) {
tl.setResult(tl.TaskResult.Failed, err.message);
}
}
run();
当我使用 tsc;node index.js 从控制台 运行 时,这工作正常但是当 运行 VS 代码调试器时,我似乎从来没有能够将值传递给 param1,以便它在 'getInput' 方法中崩溃。
我的launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "TaskName",
"program": "${workspaceFolder}/Extensions\BuildTasks\TaskName\index.ts",
"outFiles": [
"${workspaceFolder}/Extensions\BuildTasks\TaskName\**\*.js"
]
}
]}
我也试过添加
"env": {
"param1": "thisBeString"
}
在输出文件下,但没有成功。
无奈之下我也尝试过使用
"args": {
"--param1": "thisBeString"
}
达到预期结果(失败...)
我也在 tasks.json 中使用了输入但没有成功(according to this 所以问答)
所以问题是在 VS Code 中调试 Azure DevOps 扩展时如何传入变量值。
作为环境变量传递的 Task
输入参数的名称必须带有前缀 INPUT_
。
在您的示例中,您将在启动环境中设置参数 param1
,如下所示:
launch.json
"env": {
"INPUT_param1": "thisBeString"
}
您无需在代码中重命名 param1
,因为前缀会自动添加到对 getInput()
的调用中。
在运行时设置任务环境时,Azure DevOps 管道也会添加该前缀。这样做有助于降低与其他环境变量发生冲突的风险。
请在此处查看 Azure Pipelines 任务 SDK 源参考:
https://github.com/microsoft/azure-pipelines-task-lib/blob/master/node/task.ts#L219