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 Nuget 还原失败 MSB4226