Azure Pipelines 中的多行字符串

Posted

技术标签:

【中文标题】Azure Pipelines 中的多行字符串【英文标题】:Multiline string in Azure Pipelines 【发布时间】:2020-03-08 10:39:37 【问题描述】:

我可以在 Azure Pipelines 中使用 multiline YAML string 吗?

使用 ASP.NET Core (.NET Framework) 模板,我尝试对 msbuildArgs 进行多行处理,但没有成功。

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: >
       '/p:DeployOnBuild=true /p:WebPublishMethod=Package'
       '/p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true'
       '/p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip"'
       '/p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

MSBUILD : 错误 MSB1008: 只能指定一个项目。 开关:'/p:DeployOnBuild=true


查看string reference documentation我没有看到任何关于这个主题的信息。

【问题讨论】:

进展如何?您能从我更新的答案中获得有用的信息吗? 嗨@LeoLiu-MSFT - GTG,两个答案都有效,感谢您的跟进! update documentation request 【参考方案1】:

我总是像这样使用YAML block chomping operator

msbuildArgs: >-
  /p:DeployOnBuild=true
  /p:WebPublishMethod=Package
  /p:PackageAsSingleFile=true
  /p:SkipInvalidConfigurations=true
  /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip"
  /p:DeployIisAppPath="Default Web Site"

效果很好,让事情变得清晰整洁

【讨论】:

对于我在 YAML 中的 AzureCLI 任务,它需要像这样的参数 [arguments: '-param XYZ' ] 所以当我分解它时它与你的相似,只是我没有放减号在大于号之后并删除单引号。请注意,方括号只是为了清楚起见。【参考方案2】:

你可以把'放在msbuildArgs的开头和结尾:

- task: VSBuild@1
  displayName: 'Build solution **\*.sln'
  inputs:
    vsVersion: latest
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package 
    /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true'

【讨论】:

【参考方案3】:

Azure Pipelines 中的多行字符串

Shayki Abramczyk 指出了这个错误的关键。

只需将 one ' 放在 msbuildArgs 的开头和结尾即可 无需为每个 MSBuild 参数进行配置

作为测试,以下 YAML 对我有用:

- task: VSBuild@1
  displayName: 'Build solution YourSolution'
  inputs:
    solution: $(solution)
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

注意:变量$(solution) 应指向特定解决方案.sln 或项目.csproj 文件,而不是**\*.sln。如果您的 repo 中有其他解决方案,您可能会收到错误 Only one project can be specified

更新:

但我不想要您提供的答案中的超长运行线路。一世 想分成多行!

如果你不想像MSBuild参数那样超长的运行线,你可以直接拆分它们,但要注意缩进,例如:

- task: VSBuild@1
  displayName: 'Build solution YourSolution'
  inputs:
    solution: $(solution)
    msbuildArgs: '/p:DeployOnBuild=true
                  /p:WebPublishMethod=Package 
                  /p:PackageAsSingleFile=true 
                  /p:SkipInvalidConfigurations=true 
                  /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" 
                  /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

作为测试,它工作正常。

希望这会有所帮助。

【讨论】:

嗨 Leo Liu - 感谢您的回答,但我不希望您提供的答案中出现超长的运行线路。我想分成多行! ? @spottedmahn,知道了!让我看看它是否可以分成多行,当我有结果时会告诉你。 @spottedmahn,可以直接拆分,但要注意缩进。查看我更新的答案以获取更多详细信息。

以上是关于Azure Pipelines 中的多行字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure Key Vault 中的证书/密钥对使用 Azure Pipelines 构建的代码进行签名?

如何为 Azure Pipelines 中的每个阶段使用不同的服务连接?

不遵守 Azure Pipelines 任务超时

Azure Pipelines Nuget 还原失败 MSB4226

如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序

Azure Pipelines - CI/CD:如何针对 DB 执行文件夹中的所有 .sql 文件