首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Pipeline是否强制使用and()和or()类型?

Azure Pipeline是否强制使用and()和or()类型?
EN

Stack Overflow用户
提问于 2021-04-23 09:12:07
回答 1查看 24关注 0票数 1

我正在尝试检测是否应该发布构建。这取决于分支是否是功能分支和(功能分支的名称存储在组变量中,或者在运行构建时设置参数)。我没有得到我期望从and()和or()中得到的逻辑,它似乎与类型强制有关。

代码语言:javascript
复制
    value: $[ startsWith(variables['build.sourceBranch'], 'refs/heads/feature') ]
  - name: autoPublishBranches
    value: $[ contains(variables['PublishBranches'], variables['build.sourceBranch']) ]
  - name: publishFeature
    value: $[ and( variables.featureBuild, or( variables.autoPublishBranches, ${{ parameters.manualPublishBranch }} ))]
  - name: publishToDocker
    value: $[ or( variables.autoPublishNonFeature, and( variables.featureBuild, or( variables.autoPublishBranches, ${{ parameters.manualPublishBranch }} ))) ]

  - name: debugTest
    value: $[ or('false', and('False', or('True', False))) ]

  - name: TruthTable_Or_1
    value: $[ or('false', 'false') ]
  - name: TruthTable_Or_2
    value: $[ or('false', 'true') ]
  - name: TruthTable_Or_3
    value: $[ or('true', 'false') ]
  - name: TruthTable_Or_4
    value: $[ or('true', 'true') ]
  - name: TruthTable_Or_5
    value: $[ or('False', 'false') ]
  - name: TruthTable_Or_6
    value: $[ or('True', 'true') ]
  - name: TruthTable_Or_7
    value: $[ or(False, False) ]
  - name: TruthTable_Or_8
    value: $[ or(True, True) ]
  - name: TruthTable_Or_9
    value: $[ or('False', 'False') ]
  - name: TruthTable_Or_10
    value: $[ or('True', 'True') ]
  - name: TruthTable_Or_11
    value: $[ or('False', False) ]
  - name: TruthTable_Or_12
    value: $[ or('True', True) ]

产生

代码语言:javascript
复制
  featureBuild:
    Parsing expression: <startsWith(variables['build.sourceBranch'], 'refs/heads/feature')>
    Evaluating: startsWith(variables['build.sourceBranch'], 'refs/heads/feature')
    Expanded: startsWith('refs/heads/user/dreuss/deploy_based_on_group_variable', 'refs/heads/feature')
    Result: 'False'
  autoPublishBranches:
    Parsing expression: <contains(variables['PublishBranches'], variables['build.sourceBranch'])>
    Evaluating: contains(variables['PublishBranches'], variables['build.sourceBranch'])
    Expanded: contains('refs/heads/user/dreuss/deploy_based_on_group_variable,refs/heads/master', 'refs/heads/user/dreuss/deploy_based_on_group_variable')
    Result: 'True'
  publishFeature:
    Parsing expression: <and( variables.featureBuild, or( variables.autoPublishBranches, False ))>
    Evaluating: and(variables['featureBuild'], or(variables['autoPublishBranches'], False))
    Expanded: and('False', or('True', False))
    Result: 'True'
  publishToDocker:
    Parsing expression: <or( variables.autoPublishNonFeature, and( variables.featureBuild, or( variables.autoPublishBranches, False )))>
    Evaluating: or(variables['autoPublishNonFeature'], and(variables['featureBuild'], or(variables['autoPublishBranches'], False)))
    Expanded: or('false', and(variables['featureBuild'], or(variables['autoPublishBranches'], False)))
    Result: 'True'
  debugTest:
    Parsing expression: <or('false', and('False', or('True', False)))>
    Evaluating: or('false', and('False', or('True', False)))
    Expanded: or('false', and('False', or('True', False)))
    Result: 'True'
  TruthTable_Or_1:
    Parsing expression: <or('false', 'false')>
    Evaluating: or('false', 'false')
    Expanded: or('false', 'false')
    Result: 'True'
  TruthTable_Or_2:
    Parsing expression: <or('false', 'true')>
    Evaluating: or('false', 'true')
    Expanded: or('false', 'true')
    Result: 'True'
  TruthTable_Or_3:
    Parsing expression: <or('true', 'false')>
    Evaluating: or('true', 'false')
    Expanded: or('true', 'false')
    Result: 'True'
  TruthTable_Or_4:
    Parsing expression: <or('true', 'true')>
    Evaluating: or('true', 'true')
    Expanded: or('true', 'true')
    Result: 'True'
  TruthTable_Or_5:
    Evaluating: or('false', 'false')
    Expanded: or('false', 'false')
    Result: 'True'
  TruthTable_Or_6:
    Evaluating: or('true', 'true')
    Expanded: or('true', 'true')
    Result: 'True'
  TruthTable_Or_7:
    Parsing expression: <or(False, False)>
    Evaluating: or(False, False)
    Expanded: or(False, False)
    Result: 'False'
  TruthTable_Or_8:
    Parsing expression: <or(True, True)>
    Evaluating: or(True, True)
    Expanded: or(True, True)
    Result: 'True'
  TruthTable_Or_9:
    Evaluating: or('false', 'false')
    Expanded: or('false', 'false')
    Result: 'True'
  TruthTable_Or_10:
    Evaluating: or('true', 'true')
    Expanded: or('true', 'true')
    Result: 'True'
  TruthTable_Or_11:
    Parsing expression: <or('False', False)>
    Evaluating: or('False', False)
    Expanded: or('False', False)
    Result: 'True'
  TruthTable_Or_12:
    Parsing expression: <or('True', True)>
    Evaluating: or('True', True)
    Expanded: or('True', True)
    Result: 'True'

不清楚为什么有时它的计算结果是'false‘vs 'False',并且根据文档和()和or()应该强制类型,但看起来它们并不是(或者我语法错误)。我想我可以使用eq(),看看这是否强制,但这比我想要的更混乱。

EN

回答 1

Stack Overflow用户

发布于 2021-04-26 16:42:26

BooleanTrueFalse是布尔文字表达式。

String:必须用单引号引起来。例如:'false''true'

非空字符串,则计算时将计算为1(真布尔值)。True和False是字面上的值10

如果逻辑表达式或布尔表达式的计算结果为1,则认为该表达式的结果为true;如果计算结果为0,则认为该表达式的结果为false。

这里我们以表达式:<or('false', and('False', or('True', False)))>为例。我们可以把它想象成<or(1, and(1, or(1, 0)))>,结果就是1 -> True

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67222706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档