VSTS发布多行变量

Pra*_*der 3 tfs tfsbuild azure-devops azure-pipelines azure-pipelines-release-pipeline

我在VSTS版本管理中有删除文件的任务。我想让内容来自一个变量。我已经创建了一个变量,但是我不知道如何创建多行变量。因此,例如,一个删除三种文件类型的变量:

变量名称= ExcludeFiles
变量值=“库”“ bin \ *。pdb”“ bin \ *。dll.config”

在此处输入图片说明

sta*_*SFT 8

不支持多行变量,我在这里提交了一个用户声音:多行变量在 Build 和 Release

根据删除文件任务的源代码,它通过'\n'分割内容值,但根据我的测试,将'\n'添加到变量不起作用(例如t1.txt \n t2.txt 或t1.txt)。 txt\nt2.txt)。

您可以根据删除文件任务的源代码自定义构建/发布任务,或者使用您的逻辑来完成它并通过 PowerShell/命令行任务执行它。


Soc*_*j07 8

重击解决方案:

emailbody=$(echo "$output" | sed ':a;N;$!ba;s/\n/%0D%0A/g')
Run Code Online (Sandbox Code Playgroud)


Tho*_*ham 6

可以将具有多行逻辑行的变量用作多行任务参数的输入,但是它可能不适用于每个任务。使用VS Test 2.x任务在VSTS上对该方法进行了测试,下面将以该示例为例。我希望它可以用于大多数Microsoft提供的任务。

背景

任务通过JSON文件定义一组参数。除了UI中显示的显示名称外,每个参数都有一个内部名称。可以使用任务上的“链接设置”按钮(或通过查找任务的源代码)来查看内部参数名称。

在“链接设置”对话框中,VS Test 2.x任务具有一个名为“测试程序集”的“链接设置”,它是多行字符串。查看“过程参数以链接到此设置”,我们看到值“ Parameters.testAssemblyVer2”。testAssemblyVer2是内部参数的名称。

执行任务时,它需要获取其参数的值。大多数任务通过在当前环境变量中搜索以“ INPUT_”开头的任何内容来实现。对于testAssemblyVer2,该任务将查找名为INPUT_TESTASSEMBLYVER2的环境变量。

在任务执行之前,我们可以将定界变量值转换为编码的多行值,然后将其写入环境变量中,以供任务选择。

首先,使用分号分隔的值定义变量“ Custom.TestAssemblies” **\$(BuildConfiguration)\*.tests.dll;!**\obj\**。分号将成为分行。

接下来,在VS Test任务之前,将PowerShell任务添加到构建过程中。将其配置为带有一个Argument的嵌入式脚本"$(Custom.TestAssemblies)"。在这里,双引号很关键。

内联脚本如下所示:

Param([String]$toMultiLine)

$newlineDelimited = $toMultiLine -replace ';', "%0D%0A"

Write-Host "##vso[task.setvariable variable=INPUT_TESTASSEMBLYVER2]$newlineDelimited"
Run Code Online (Sandbox Code Playgroud)

而已!变量值中的定界符将转换为URL编码的CR / LF,并指示代理使用该值更新INPUT_TESTASSEMBLYVER2。任务将拾取值并将其解析为'\ n',该值与嵌入式%0D%0A匹配。

摘要

  1. 选择一个分隔符,例如;并用它来划分变量值的各个部分
  2. 使用“链接设置”获取任务的内部参数名称
  3. 在目标任务之前插入一个PowerShell任务,并插入上面的代码,替换正确的变量和任务参数名称

如果将变量设置system.debugtrue,通常会在跟踪输出中看到各种INPUT_参数和一些解析。这取决于特定任务的执行情况。

该解决方案对于Build和Release序列应该同样有效。