azure-pipelines - 如何有条件地设置 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
解决方案
要在循环中运行任务,您可以创建一个模板,该模板将具有一组操作,并在构建期间传递参数。例如:
模板.yml:
天蓝色管道.yml:
检查博客:
https://mattvsts.github.io/2019/05/04/solving-the-looping-problem-in-Azure-DevOps-Pipelines/
推荐阅读
- javascript - 如何将宏应用于谷歌电子表格的文件夹
- javascript - Add annotations to D3 line graph using D3plus
- vue.js - Vue Component Navigation Fails After $router.replace
- css - How to make active link underlined (CSS)?
- sharepoint - People Picker in Microsoft Project Online
- javascript - json-schema 中有没有办法验证匹配正则表达式的对象键?
- python - 为什么我通过 pip 安装了模块后仍收到“没有名为 scipy 的模块”错误?
- api - 有没有办法从 Medium 帖子中获取语言?
- flutter - Flutter 音频文件的完整路径
- ffmpeg - 使用 ffmpeg 和 force_original_aspect_ratio 从视频创建 PNG - 生成的 PNG 被压缩为 sample_aspect_ratio(而不是 display_aspect_ratio)