Build 在队列时设置生成过程参数

Build 在队列时设置生成过程参数,build,azure-devops,Build,Azure Devops,我已经定义了一个构建定义,并向其中添加了一些任务。当我手动将新构建排队时,我希望能够为其中一个任务的输入提供值 我想我可以通过将任务输入链接到流程参数来实现这一点,但这只是一个小小的改进。流程参数显示在“流程”部分,当我编辑构建定义时,该部分位于顶部,因此更容易找到 当我将任务输入链接到“变量”选项卡下的变量时,我真的很期待。可以勾选这些变量,以便在排队时配置它们 有趣的是,当我将输入链接到一个流程参数时,它被命名为“Parameters.TheTaskInputName”。我还认为我可以在Va

我已经定义了一个构建定义,并向其中添加了一些任务。当我手动将新构建排队时,我希望能够为其中一个任务的输入提供值

我想我可以通过将任务输入链接到流程参数来实现这一点,但这只是一个小小的改进。流程参数显示在“流程”部分,当我编辑构建定义时,该部分位于顶部,因此更容易找到

当我将任务输入链接到“变量”选项卡下的变量时,我真的很期待。可以勾选这些变量,以便在排队时配置它们

有趣的是,当我将输入链接到一个流程参数时,它被命名为“Parameters.TheTaskInputName”。我还认为我可以在Variables选项卡下定义它,并使它在队列时间可设置,然后尝试这样做。这似乎也没什么区别

如果这样,我做错了什么?或者这是我应该发布在visualstudio.uservoice.com上的缺失功能吗?

构建有“流程变量”,您可以控制它们是否可以在队列时间设置

设置:

排队时的设置:

参数和变量如何传递给任务
  • 参数:所有输入参数都作为环境变量传递给任务,并以“input_u2;”作为前缀。您需要在任务中找到参数的名称(您在管道编辑页面中看到的是参数的标题,而不是名称)。我将在后面的回答中讨论如何查找输入参数的名称

  • 变量:管道变量也作为环境变量传递给任务,与它们的定义方式完全相同。变量是在管道中定义的,还是稍后在排队生成时添加的,这无关紧要

如何查找参数名称和值 您应该在中找到task“task.json”文件。它位于其源目录中(您也可以解压缩任务的.vsix文件)。因为Azure DevOps(由Microsoft开发)的所有默认任务都是,所以这很容易做到

例子 让我们更改“.NET核心”任务的参数“Command”的值。它的“task.json”文件是。在“输入”部分查找“命令”文本:

您可以看到,参数名称与其标签相同(情况并非总是如此),其值为“build”、“push”、“pack”

现在,您可以在排队生成时添加一个名为
input\u command
(不区分大小写)的变量,并在其中填充值。这将覆盖在管道定义中设置的任何内容

无论参数的类型是什么,参数的值都将作为字符串发送。例如,布尔参数的值可能为“真”或“假”,而picklist参数对于picklist中的每个项都有相应的字符串值(如上面的示例)

再举一个例子,让我们看看“NuGet restore”任务。它在“高级”部分有一个“详细”参数。打开文件。以下是相关部分:

    {
        "name": "verbosityRestore",
        "type": "pickList",
        "label": "Verbosity",
        "defaultValue": "Detailed",
        "helpMarkDown": "Specifies the amount of detail displayed in the output.",
        "required": "false",
        "groupName": "restoreAdvanced",
        "options": {
            "Quiet": "Quiet",
            "Normal": "Normal",
            "Detailed": "Detailed"
        }
    },

任务的每个“命令”的参数名称都不同。对于restore命令,它是“verbosityRestore”。

我刚刚找到了关于流程参数的文档。感谢您的回答,但是我如何才能获得任务的一个输入参数以显示或链接到该列表中的变量?@ScottLangham,让我了解一下,您是否试图在队列时间设置一个变量,即链接到流程参数的变量(因此它用于多个构建任务?)是的,当我编辑构建定义时,我可以看到一个阶段1,在该阶段我添加了一个任务。该任务有许多参数,我可以在编辑生成定义时设置这些参数的值。但是,我不想每次都要编辑生成定义来更改某个参数,我希望能够在队列时间设置其值。@ScottLangham这是完全可能的,使用我的原始答案,您可以设置一个名为say“MyVariable”的队列变量,然后在您的生成过程中,在进程下放置($MyVariable)代替当前在生成定义中定义的变量如果我编辑生成定义,请转到“任务”选项卡,并在左窗格中选择“流程”部分,然后我可以看到链接到任务输入的变量。但是,对于布尔变量,我只看到一个复选框,无法键入任何内容。也许您的建议仅限于文本变量?
    {
        "name": "verbosityRestore",
        "type": "pickList",
        "label": "Verbosity",
        "defaultValue": "Detailed",
        "helpMarkDown": "Specifies the amount of detail displayed in the output.",
        "required": "false",
        "groupName": "restoreAdvanced",
        "options": {
            "Quiet": "Quiet",
            "Normal": "Normal",
            "Detailed": "Detailed"
        }
    },