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

Azure devops 任务A如何在同一任务组(TG)中创建新的构建变量供任务B使用,而不将其暴露在TG之外?,azure-devops,Azure Devops,我有一个任务组,有两项任务: 设置BinLogFlag 编译解决方案 第一个任务实际上是另一个TG,如果请求二进制日志,它将设置BinLogFlag=“/bl:…”。它基本上运行以下Powershell代码: "##vso[task.setvariable variable=BinLogFlag]..." 现在,编译解决方案只是带有以下命令行的MSBuild任务: /m /v:m $(BinLogFlag) 因此,为了概括-设置BinLogFlag创建构建变量BinLogFlag,并编译解决

我有一个任务组,有两项任务:

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

    "##vso[task.setvariable variable=BinLogFlag]..."
    
    现在,编译解决方案只是带有以下命令行的MSBuild任务:

    /m /v:m $(BinLogFlag)
    
    因此,为了概括-设置BinLogFlag创建构建变量BinLogFlag,并编译解决方案使用它。当然,如果BinLogFlag为空,则不会生成二进制日志

    问题在于,当我将
    $(BinLogFlag)
    添加到命令行时,Azure DevOps将其添加到我开发的TG的参数中:

    但这是一个内部实现细节。我不想让它暴露出来。我当前的解决方法很脆弱-我在编译之前更新了/generate Directory.Build.rsp文件,然后删除/还原它

    我一点也不喜欢它。Compile Solution是否可以使用由Set BinLogFlag创建的
    BinLogFlag
    构建变量,而不将其作为父任务组的另一个参数公开

    编译解决方案是否可以使用Set BinLogFlag创建的BinLogFlag构建变量,而不将其作为父任务组的另一个参数公开

    答案是肯定的

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

    导出它,您将获得
    .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
    对其进行重命名

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

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


    希望这有帮助。

    肯定有帮助。但是,当我通过对任务组进行一些无关的修改来修改任务组时,会发生什么呢?BinLogFlag参数是否会重新出现,我将被迫重复导出/导入技巧?@mark,的确,如果您修改任务组
    BinLogFlag
    ,它会再次出现,但它不会显示值,它只显示
    此设置是必需的。
    ,您可以忽略它,因为在生成管道中添加它时,它不会出现。总的来说,上述答案应该是一种变通方法,而不是最佳解决方案。您可以向MS团队提交此请求。我想提交此请求。你有链接吗?实际上,当任务已经被许多构建使用时,解决方法并不合适,因为执行导出/导入操作会删除此任务,这将需要我更新所有受影响的构建。