azure-devops - 如何在 DevOps Pipeline PowerShell 任务中设置变量并将该变量用作另一个任务的条件
问题描述
我已经查看了在 DevOps 管道中为任务设置变量和条件的各种示例,但对于我拥有的用例,我似乎不太了解它。
我希望 PowerShell 任务将变量设置为 true 或 false,然后将该变量用作另一个任务的条件,该任务将创建一个工件。
到目前为止,我在网上阅读的内容是:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
#Some logic here
if ($logicEvaluatedToTrue) {
Write-Host "Artifacts will be created"
Write-Host "##vso[task.setvariable variable=requiresRelease;isSecret=false;isOutput=true;]$true"
}
else {
Write-Host "No artifacts will be created"
}
failOnStderr: true
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
#Both of these do not contain any values
Write-Host $env:requiresRelease
Write-Host $requiresRelease
failOnStderr: true
# this just evaluates to Expanded: and(True, eq(Null, 'true'))
- task: PublishPipelineArtifact@1
condition: and(succeeded(), eq(variables.requiresRelease, 'true'))
inputs:
targetPath: 'snip1.zip'
artifact: 'snip1'
publishLocation: 'pipeline'
# this just evaluates to Expanded: and(True, eq(Null, 'true')) too
- task: PublishPipelineArtifact@1
condition: and(succeeded(), eq(variables['requiresRelease'], 'true'))
inputs:
targetPath: 'snip2.txt'
artifact: 'snip2'
publishLocation: 'pipeline'
我尝试过像这样首先设置一个变量:
variables:
#existing vars first
requiresRelease: false
但是当我这样做时,条件的评估变为Expanded: and(True, eq('false', 'true'))
. 您的任何帮助将不胜感激。
解决方案
您需要isOutput=true
在分配值时删除:
Write-Host "##vso[task.setvariable variable=requiresRelease;isSecret=false;]$true"
对于打印值,请使用以下语法:
Write-Host $(requiresRelease)
推荐阅读
- android - NetworkAgentInfo [Ethernet () - 100] 验证失败 - 在模拟器上
- c# - 获取 DropDownMenu 的 SourceControl
- android-studio - YoutubePlayer 初始化失败
- python - Pandas - groupby 连接 2 列
- arangodb - ArangoDB 中图表中集合的一致性是否得到保证?
- android - 前台服务 START_STICKY 在内存不足的情况下被杀死后未重新启动
- javascript - 如何更改克隆 div 中的 img src?
- swagger - 带有 AWS 扩展的 Swagger 文件存储在 S3 存储桶中,用于使用 Cloudformation 创建 API
- java - 由于 netty 问题,spring cloud gateway 无法路由
- jenkins - 如何在 jenkins 中针对每个构建显示 sonarqube 指标报告