【问题标题】:Set build process parameters at queue time在排队时设置构建过程参数
【发布时间】:2018-01-18 16:49:17
【问题描述】:

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

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

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

有趣的是,当我将输入链接到流程参数时,它被命名为“Parameters.TheTaskInputName”。我还认为我可以在“变量”选项卡下定义它并使其在排队时可设置并尝试过。这似乎也没有任何区别。

这应该有效吗,如果可以,我做错了什么?还是我应该在 visualstudio.uservoice.com 上发布一个缺失的功能?

【问题讨论】:

标签: build azure-devops


【解决方案1】:

构建具有“流程变量”,您可以控制它们是否能够在排队时设置。

设置:

排队时间设置:

【讨论】:

  • 感谢您的回答,但我怎样才能让任务的输入参数之一出现或链接到该列表中的变量?
  • @ScottLangham,让我了解一下,您是否尝试在队列时间设置一个变量,该变量与流程参数相关联(所以它用于多个构建任务?)
  • 是的,当我编辑我的构建定义时,我可以看到一个阶段 1,我在该阶段添加了一个任务。该任务有许多参数,我可以在编辑构建定义时为其设置值。但是,我不想每次都编辑构建定义来更改某个参数,我希望能够在排队时设置它的值。
  • @ScottLangham 这完全有可能,使用我的原始答案,您设置了一个名为“MyVariable”的队列变量,然后在您的 Build 中,在 Process 下,您将 ($MyVariable) 放入当前在构建定义中定义的变量的位置
  • 如果我编辑我的构建定义,转到任务选项卡,然后选择左侧窗格中的流程部分,然后我可以看到我已链接到任务输入的变量。但是,对于布尔变量,我只看到一个复选框,无法输入任何内容。也许您的建议仅限于文本变量?
【解决方案2】:

参数和变量如何传递给任务

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

  • 变量:管道变量也作为环境变量传递给任务,与它们的定义方式完全相同。变量是在管道中定义的,还是稍后在排队构建时添加的都没有关系。

如何查找参数名称和值

您应该在其中找到任务“task.json”文件。它位于其源目录中(您也可以解压任务的 .vsix 文件)。由于 Azure DevOps(由 Microsoft 开发)的所有默认任务都是 available on Github,因此很容易做到。

示例

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

"inputs": [
    {
        "name": "command",
        "type": "pickList",
        "label": "Command",
        "defaultValue": "build",
        "required": true,
        "helpMarkDown": "The dotnet command to run. Select 'Custom' to add arguments or use a command not listed here.",
        "options": {
            "build": "build",
            "push": "nuget push",
            "pack": "pack",
            "publish": "publish",
            "restore": "restore",
            "run": "run",
            "test": "test",
            "custom": "custom"
        },
        "properties": {
            "EditableOptions": "False"
        }
    },

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

现在您可以在对构建进行排队时添加一个名为input_command(不区分大小写)的变量,并在那里填写值。这将覆盖您在管道定义中设置的任何内容。

无论参数的类型是什么,参数的值都以字符串的形式发送。例如,布尔参数的值可能是“true”或“false”,而选择列表参数对于选择列表中的每个项目都有一个对应的字符串值(如上例)。

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

    {
        "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"
        }
    },

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多