我有三个条件作为变量(isMaster,isRelease,isHotfix):
variables:
isMaster: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/master')]
isRelease: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')]
isHotfix: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/hotfix/')]
checkCondition: $[or(variables.isMaster, variables.isRelease)]
问题是当我为OR条件(例如checkCondition)输入两个“ false”时。 我应该得到“假”,但由于某种原因我得到“真”。
- task: CmdLine@2
inputs:
script: |
echo %BUILD_SOURCEBRANCH%
echo %ISMASTER%
echo %ISRELEASE%
echo %ISHOTFIX%
echo %CHECKCONDITION%
condition: or(variables.isMaster ,variables.isRelease)
...
Result:
...
refs/heads/someBranch
False
False
False
True
Finishing: CmdLine
任何人都有一个想法,为什么条件会给出错误的结果? 谢谢!
答案 0 :(得分:1)
使用OR function时,您需要使用or(expression, expression)
,然后它将表达式转换为Boolean进行求值。如果使用or(variables.isMaster ,variables.isRelease)
,则有两个字符,没有表达式可以转换为布尔值。您需要改用or(startsWith(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'))
。
答案 1 :(得分:0)
看起来很可行,因为它写为here:
评估条件以决定是否开始一个阶段,工作或步骤。这意味着在该工作单元内运行时无法计算任何内容。例如,如果您有一个使用$ []语法使用运行时表达式设置变量的作业,则不能在自定义条件下使用该变量。
,但不能在任何地方使用。因此,如果您在根目录上有步骤,它将无法正常工作,但是如果您以这种方式进行操作,则应该如此
variables:
isMaster: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/master')]
isRelease: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')]
isHotfix: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/hotfix/')]
checkCondition: $[or(variables.isMaster, variables.isRelease)]
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: A
jobs:
- job: A1
steps:
- script: echo Hello Stage A!
- stage: B
condition: or(variables.isMaster ,variables.isRelease)
jobs:
- job: B1
steps:
- task: CmdLine@2
inputs:
script: |
echo %BUILD_SOURCEBRANCH%
echo %ISMASTER%
echo %ISRELEASE%
echo %ISHOTFIX%
echo %CHECKCONDITION%
condition: or(variables.isMaster ,variables.isRelease)
- task: CmdLine@2
inputs:
script: |
echo %BUILD_SOURCEBRANCH%
echo %ISMASTER%
echo %ISRELEASE%
echo %ISHOTFIX%
echo %CHECKCONDITION%