CircleCI の steps 内で条件分岐をする方法

結論

when を使います。run: の step 内のシェルスクリプトで分岐する方法はよく見るのですが、step そのものを分岐します。

circleci.com

使い方具体例

公式ドキュメントに書いてあるとおりです。steps: 配下に when: を書き、その配下に condition: を書き、そしてその配下に条件分岐を書きます。条件を満たした場合、その when: の内容が実行されます。

condition: を記述するか否かについては注意が必要です。公式ドキュメントにあるように、jobs: 配下の記述においては condition: の表記が必要になります。

一方で workflows: 配下の記述に置いては不要となります

Note: When using logic statements at the workflow level, do not include the condition: key (the condition key is only needed for job level logic statements).

条件が一つだけの場合

たとえば、if a == 'foobar' のような条件の場合には、when: 配下に condition: を書き、その値として条件式を書きます。

    steps:
      - checkout
      - when:
          condition:
            equal: [ 'hello', $GREETING ]
          steps:
            - run: echo "Hello, World!"

上記の equal の説明については公式ドキュメントをご覧ください*1equal 以外に matches (正規表現での判別)もあります。

条件が「かつ」の場合

たとえば、if a == 'foobar' && b == 'hoge' のような条件の場合には、condition: 配下に and: を書き、その値として条件式を書きます。

    steps:
      - checkout
      - when:
          condition:
            and:
              - equal: [ 'hello', $GREETING ]
              - equal: [ 'world', $HOGEHOGE ]
          steps:
            - run: echo "Hello and World!"

条件が「または」や「~ではない」の場合

上記までの記述と同様にして、condition: 配下に or:not: を書き、その値として条件式を書きます。

    steps:
      - checkout
      - when:
          condition:
            or:
              - equal: [ 'hello', $GREETING ]
              - equal: [ 'world', $HOGEHOGE ]
          steps:
            - run: echo "Hello or World!"
    steps:
      - checkout
      - when:
          condition:
            not:
              matches:
                pattern: "^master$"
                value: << pipeline.git.branch >>
          steps:
            - run: echo "Hello, master branch World!"

*1:2つの値が等しい、ではなく、配列内のすべての値が等しい、ときに true になります

Powered by はてなブログ