Azure Pipelines convertToJson转义含变量模板参数反斜杠异常
Azure DevOps YAML模板序列化含反斜杠变量的转义问题
我在Azure DevOps流水线里,把带反斜杠的变量作为YAML对象模板参数传递,用convertToJson表达式函数序列化时碰到了转义异常。简化后的流水线和模板代码如下:
流水线代码
pool: vmImage: windows-latest steps: - template: template.yml parameters: struct: file1: $(Build.SourcesDirectory)\file1.txt file2: c:\source\file2.txt
模板代码
parameters: - name: struct type: object steps: - task: PowerShell@2 inputs: targetType: inline script: | $json = '${{ convertToJson(parameters.struct) }}' Write-Host "Serialized JSON: '$json'" # 从此处开始失败 $struct = $json | ConvertFrom-Json Write-Host "file1: $($struct.file1)"
问题现象
执行后输出显示,file1的反斜杠没有被正确转义成双反斜杠,导致PowerShell的ConvertFrom-Json解析失败。我推测是convertToJson先完成了JSON转义,之后才替换流水线变量$(Build.SourcesDirectory),使得变量里的单反斜杠直接出现在JSON字符串中,破坏了JSON格式。
已尝试的解决方法
- 使用运行时评估语法
$[ variables[...] ] - 用额外变量包装参数
- 将参数转换为PowerShell环境变量
- 尝试用
${{format(...)}}提前评估变量,但Build.SourcesDirectory是运行时变量,编译阶段无法获取值
我知道可以通过PowerShell临时修复这个问题,但想确认这种转义错误是否属于预期行为,以及有没有更优的YAML层面解决方案。
内容的提问来源于stack exchange,提问作者stavn
相关产品推荐
相关产品推荐

