在 IF 语句中使用 Bitbucket 的 $BITBUCKET_TAG 变量

Using Bitbucket's $BITBUCKET_TAG variable in an IF statement

我整天都在绞尽脑汁想弄明白这个问题。有人能告诉我为什么吗

- if [ $BITBUCKET_BRANCH == 'master' ]; echo "Do master branch stuff"; fi

如果我推送到的分支是 master.

在尝试 运行 一些代码时工作得很好

但是当我试图通过带有

的标签来区分它时

- if [ $BITBUCKET_TAG == 'test-*' ]; then echo "Do test tag stuff"; fi

它被完全忽略了,就好像if语句里面的代码永远不会到达。

我做错了什么?我尝试以多种方式更改语句,尝试使用正则表达式等无济于事。任何帮助将不胜感激。

这是一个可重现的示例管道代码:

image: node:12.16.0
options:
  docker: true

definitions:
  steps: 
    - step: &if-test
        name: If test
        script:   

          - if [ $BITBUCKET_BRANCH == 'master' ]; then echo "Do master branch stuff"; fi

          - if [ $BITBUCKET_TAG == 'test-*' ]; then echo "Do test tag stuff"; fi

          - if [ $BITBUCKET_TAG == 'staging-*' ]; then echo "Do staging tag stuff"; fi

pipelines:
  branches:
    master: 
      - step: *if-test

  tags:    

    'test-*': 
      - step: *if-test

    'staging-*': 
      - step: *if-test

问题在于您对 "if" 语句进行编码的方式:

if [ $BITBUCKET_TAG == 'test-*' ];

这是一个 bash/unix if 语句,它将检查文字字符串 "test-*" 作为分支名称,您可能不会使用它。

您应该使用 'string contains' 测试而不是 'string equals' 测试,如下所示:

if [[ $BITBUCKET_TAG == *"test-"* ]];

另请注意,'test-*'yml 用法...

tags:
  'test-*':

... 与 bash/shell 脚本解释 'test-*'.

的方式不同