在 VS Code 和 TypeScript 中调试 Azure DevOps 自定义任务时如何设置输入变量

How to set input variables when debugging Azure DevOps custom Tasks in VS Code and TypeScript

背景: 我正在为 Azure DevOps 构建自定义构建任务。

问题 当我尝试调试我的任务时,我无法为 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