失敗した時だけ実行されるステップ

runオブジェクトにwhen: on_failセクションを置くと、前回のステップが失敗した時にだけ実行させることができます。

以下の例は1つ目のステップでfoo != barじゃない時は失敗(exit: 0以外が返される)とするようなスクリプトになっています。もちろんこれは失敗するので、次のステップのecho "bar"が実行されるはずです。

version: 2.1

jobs:
  build:
    docker:
    - image: alpine
    steps:
    - run: |
        if [ "foo" != "bar" ]; then
          exit 1
        fi
    - run:
        name: on fail
        command:
          echo "bar"
        when: on_fail
    - run: ': 1'
    - run: ': 2'
    - run: ': 3'

望んだ通りになりました。

on fail が実行されたci

処理を続ける

when: on_failなステップを複数置いている時、1度でもwhen: on_failなステップが実行されると、それ以降のwhen: on_fail(とalways)なステップはすべて実行されます。

以下のような場合最後のon_success以外のすべてのステップが実行されます。

version: 2.1

jobs:
  build:
    docker:
    - image: alpine
    steps:
    - run: |
        if [ "foo" != "bar" ]; then
          exit 1
        fi
    - run:
        name: on fail 1
        command:
          echo on fail 1
        when: on_fail
    - run:
        name: on fail 2
        command:
          echo on fail 2
        when: on_fail
    - run:
        name: on fail 3
        command:
          echo on fail 3
        when: always
    - run:
        name: on fail 4
        command:
          echo on fail 4
        when: on_success

on_fail の連鎖