首页 > 解决方案 > 如何有条件地设置 Azure Pipeline FileTransform 的变量值

问题描述

在我的 yaml 中,我定义了一个任务,如下所示:

- ${{ each profile in parameters.targetProfile }}:
        - task: FileTransform@1
          inputs:
            folderPath: '$(System.DefaultWorkingDirectory)/**/${{ Parameters.projectDir }}/*.csdef'

servicedefinition.csdef 有这样一行:

<WorkerRole name="CRWorkerRole" vmsize="#{VMSIZE}#">

如果我从 Azure Pipeline UI 定义 VMSIZE 变量,则 FileTransform 工作正常。但是,如果我像这样在 YAML 中定义一个变量:

variables:
      VMSIZE: 'Standard_A4_v2'

它不起作用。我试过不带引号,还假设间距是正确的。

我也在循环中运行 FileTransform(见上文)。我想有条件地设置变量“VMSIZE”的值。

这可能吗?

更新:2020 年 5 月 25 日:添加了整个 yaml 文件:

parameters:
  solution: ''
  cloudServiceProject: ''
  targetProfile: ''

stages:
  - stage: build
    displayName: build solution
    variables:
      buildPlatform: 'any cpu'
      buildConfiguration: 'release'
      VMSIZE: 'Standard_A4_v2'

    jobs:
      - job: build
        displayName: build Job
        pool:
          name: Azure Pipelines
          vmImage: 'windows-latest'
          demands:
            - msbuild
            - visualstudio
            - vstest
            - azureps

        steps:
        - task: NuGetToolInstaller@0
          displayName: 'Use NuGet 5.4.0'
          inputs:
            versionSpec: 5.4.0

        - task: NuGetCommand@2
          displayName: 'NuGet restore'
          inputs:
            restoreSolution: '${{ Parameters.solution }}'

        - task: VSBuild@1
          displayName: 'Build solution '
          inputs:
            solution: '${{ Parameters.solution }}'
            platform: '$(buildPlatform)'
            configuration: '$(buildConfiguration)'

        - ${{ each profile in parameters.targetProfile }}:
            - task: FileTransform@1
              inputs:
                folderPath: '$(System.DefaultWorkingDirectory)/**/${{ Parameters.projectDir }}/*.csdef' 

            - task: VSBuild@1
              displayName: 'build cloud service project'
              inputs:
                solution: '${{ Parameters.cloudServiceProject }}'
                msbuildArgs: '/t:Publish /p:TargetProfile=${{ profile.name }}
     /p:AllowUnsafeBlocks=true /p:DebugType=None /p:SkipInvalidConfigurations=true /p:OutputPath=bin\ /p:PublishDir="$(build.artifactstagingdirectory)\\${{ profile.name }}\\"'
                platform: '$(buildPlatform)'
                configuration: '$(buildConfiguration)'

        - task: VSTest@2
          displayName: 'VsTest - testAssemblies'
          inputs:
            testAssemblyVer2: |
             **\$(buildConfiguration)\*test*.dll
             !**\obj\**
            platform: '$(buildPlatform)'
            configuration: '$(buildConfiguration)'       

        - publish: $(build.artifactstagingdirectory)\\
          artifact: publishFiles

标签: azure-pipelines

解决方案


要在循环中运行任务,您可以创建一个模板,该模板将具有一组操作,并在构建期间传递参数。例如:

模板.yml:

在此处输入图像描述

天蓝色管道.yml:

在此处输入图像描述

检查博客:

https://mattvsts.github.io/2019/05/04/solving-the-looping-problem-in-Azure-DevOps-Pipelines/


推荐阅读