Pra*_*der 3 tfs tfsbuild azure-devops azure-pipelines azure-pipelines-release-pipeline
我在VSTS版本管理中有删除文件的任务。我想让内容来自一个变量。我已经创建了一个变量,但是我不知道如何创建多行变量。因此,例如,一个删除三种文件类型的变量:
变量名称= ExcludeFiles
变量值=“库”“ bin \ *。pdb”“ bin \ *。dll.config”
不支持多行变量,我在这里提交了一个用户声音:多行变量在 Build 和 Release。
根据删除文件任务的源代码,它通过'\n'分割内容值,但根据我的测试,将'\n'添加到变量不起作用(例如t1.txt \n t2.txt 或t1.txt)。 txt\nt2.txt)。
您可以根据删除文件任务的源代码自定义构建/发布任务,或者使用您的逻辑来完成它并通过 PowerShell/命令行任务执行它。
重击解决方案:
emailbody=$(echo "$output" | sed ':a;N;$!ba;s/\n/%0D%0A/g')
Run Code Online (Sandbox Code Playgroud)
可以将具有多行逻辑行的变量用作多行任务参数的输入,但是它可能不适用于每个任务。使用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匹配。
如果将变量设置system.debug为true,通常会在跟踪输出中看到各种INPUT_参数和一些解析。这取决于特定任务的执行情况。
该解决方案对于Build和Release序列应该同样有效。
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |