Azure DevOps 管道表达式评估

问题描述 投票:0回答:1

我有一个 Azure DevOps 管道,用于构建和部署适用于 Viso 的 Visual Studio Tools for Office (VSTO) 插件。根据分支,我希望将

InstallUrl
自定义为 MSBuild 发布任务的一部分。为此,我编写了一个 YAML 表达式,可以根据下面的每个 YAML 片段有条件地设置
msbuildArguments

当管道运行时,我可以看到表达式没有按预期执行,因为

msbuildArgumentProduction
始终被选中。在查看了 MS doco 后,我无法理解出了什么问题。

stages:
- stage: build
  variables:
    isProduction: $[eq(variables['Build.SourceBranch'], 'refs/heads/production')]
    isDevelopment: $[eq(variables['Build.SourceBranch'], 'refs/heads/development')]
    solution: '**/ModelGenVisioAddIn.sln'
    buildPlatform: 'Any CPU'
    buildConfiguration: 'Release'
    msbuildArgumentDevelopment: '-v:d /t:publish  /property:InstallUrl=https://exampleDev1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
    msbuildArgumentProduction: '-v:d /t:publish  /property:InstallUrl=https://exampleProd1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'

  jobs: 
    - job: build_job
      pool:
        vmImage: 'windows-latest'
      steps: 
         - task: MSBuild@1
           displayName: 'Publishing ModelGen for Visio (MG4V)'
           inputs:
            solution: '$(solution)'
            configuration: '$(buildConfiguration)'
            ${{ if eq(variables.isDevelopment, true) }}:
              msbuildArguments: '$(msbuildArgumentDevelopment)'
            ${{ else }}:
              msbuildArguments: '$(msbuildArgumentProduction)'

如有任何建议/帮助,我们将不胜感激

azure azure-devops yaml azure-pipelines
1个回答
0
投票

表达式 '

${{ xxxx }}
' 在运行时之前的编译时处理,表达式 '
$[xxxx]
' 在编译时之后在运行时处理。请参阅“了解变量语法”。

enter image description here

所以,当编译时处理条件表达式'

${{ if eq(variables.isDevelopment, true) }}
'时,'
isDevelopment
'变量的值并没有被扩展。

对于您的情况,您可以更改条件表达式,如下所示:

stages:
- stage: build
  variables:
    isProduction: $[eq(variables['Build.SourceBranch'], 'refs/heads/production')]
    isDevelopment: $[eq(variables['Build.SourceBranch'], 'refs/heads/development')]
    solution: '**/ModelGenVisioAddIn.sln'
    buildPlatform: 'Any CPU'
    buildConfiguration: 'Release'
    msbuildArgumentDevelopment: '-v:d /t:publish  /property:InstallUrl=https://exampleDev1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'
    msbuildArgumentProduction: '-v:d /t:publish  /property:InstallUrl=https://exampleProd1.com/ /property:ApplicationVersion=1.0.0.136 /p:PublishDir=MG4V\'

  jobs: 
    - job: build_job
      pool:
        vmImage: 'windows-latest'
      steps: 
         - task: MSBuild@1
           displayName: 'Publishing ModelGen for Visio (MG4V)'
           inputs:
            solution: '$(solution)'
            configuration: '$(buildConfiguration)'
            ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/development') }}:
              msbuildArguments: '$(msbuildArgumentDevelopment)'
            ${{ else }}:
              msbuildArguments: '$(msbuildArgumentProduction)'
© www.soinside.com 2019 - 2024. All rights reserved.