結論
when
を使います。run:
の step 内のシェルスクリプトで分岐する方法はよく見るのですが、step
そのものを分岐します。
使い方具体例
公式ドキュメントに書いてあるとおりです。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
の説明については公式ドキュメントをご覧ください*1。equal
以外に 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 になります