任务A如何在同一任务组(TG)中创建新的构建变量以供任务B使用,而又不将其暴露在TG之外?

时间:2019-07-25 18:04:27

标签: azure-devops

我有一个任务组,其中有两个任务:

  1. 设置BinLogFlag
  2. 编译解决方案

第一个任务实际上是另一个TG,如果请求二进制日志,它将设置BinLogFlag =“ / bl:...”。它基本上运行以下Powershell代码:

"##vso[task.setvariable variable=BinLogFlag]..."

现在编译解决方案只是带有以下命令行的MSBuild任务:

/m /v:m $(BinLogFlag)

因此,回顾一下-设置BinLogFlag 创建了构建变量BinLogFlag,编译解决方案使用了它。当然,如果BinLogFlag为空,则不会生成二进制日志。

问题在于,我将$(BinLogFlag)添加到命令行的那一刻,Azure DevOps将其添加到我开发的TG的参数中: enter image description here

但这是内部实现细节。我不想暴露它。我当前的解决方法是脆弱的-我在编译之前先更新/生成Directory.Build.rsp文件,然后再对其进行删除/恢复。

我一点都不喜欢。 编译解决方案是否可以使用由 Set BinLogFlag 创建的BinLogFlag构建变量,而不将其暴露为父任务组的另一个参数?

1 个答案:

答案 0 :(得分:0)

  

Compile Solution是否可以使用Set BinLogFlag创建的BinLogFlag构建变量,而不会将其暴露为父任务组的另一个参数?

答案是肯定的。

创建任务组后,任务组有一个功能:导出

enter image description here

导出它,您将获得.json文件,并使用记事本或Visual Studio打开它,您将获得有关参数的以下代码段:

  "iconUrl": "https://cdn.vsassets.io/v/M154_20190723.10/_content/icon-meta-task.png",
  "friendlyName": "TestTG",
  "description": "",
  "category": "Build",
  "definitionType": "metaTask",
  "author": "YourCount",
  "demands": [],
  "groups": [],
  "inputs": [
    {
      "aliases": [],
      "options": {},
      "properties": {},
      "name": "",
      "label": "",
      "defaultValue": "",
      "required": true,
      "type": "string",
      "helpMarkDown": "",
      "groupName": ""
    }
  ],
  "satisfies": [],

然后,我们将[]的输入内容删除,看起来像这样:

  "groups": [],
  "inputs": [],
  "satisfies": [],

最后,我们将此.json导入到任务组,并使用新名称Set BinLogFlag V2重命名。

当我们将此任务组添加到管道中以创建另一个任务组编译解决方案时,由设置 BinLogFlag 创建的BinLogFlag构建变量将不暴露

enter image description here

在您的演示中,我使用命令行任务而不是MSBuild来测试变量BinLogFlag的值是否可以正确传递。它可以很好地测试。

希望这会有所帮助。