VTRyo Blog

一歩ずつ前に進むブログ

CircleCI Jobステップの成功失敗でそのあとのステップ実行を分岐させる

かんたんな話なので簡潔に。

XXのJobが失敗したとしてもYYのJobは実行して欲しい

そんな切なる願いを叶えるのがこちら。

references:
  commands:
    echo-string: &echo-string
      name: echo string
      command: |
        echo "hoge"

    ls-command: &ls-command
      name: file list
      command: |
        ls -l
      when: always


job1: &job1
  <<: *defaults
  steps:
    - checkout:
    - attach_workspace: *attach-workspace
    - run: *echo-string
    - run: *ls-command

↑このように書くと、echo-stringがなんらかの理由で実行に失敗しても、必ずls-commandは実行される。

when attribute

when attributeを使うと、それより前のステップが成功・失敗したときにどう振る舞うかを指示できる。

circleci.com

attribute 振る舞い 事例
on_success 先行ステップがすべて成功した場合のみこのステップを実行する コンテナセットアップ→テスト など
always 前のステップの終了ステータスに関係なくこのステップを実行させる Jobステータス成功失敗通知、ロックファイル削除 など
on_fail 前のステップが失敗した場合のみこのステップが実行される テスト失敗ログ送信、アラートトリガー など

なおデフォルトではon_successが適用されているため、CircleCIはステップが失敗した瞬間にJobを終了するようになっているようだ。

補足:unless

whenだけではなく、unlessも存在する。

条件が偽の場合に評価するというもの。今の所使ってない。

circleci.com