かんたんな話なので簡潔に。
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を使うと、それより前のステップが成功・失敗したときにどう振る舞うかを指示できる。
attribute | 振る舞い | 事例 |
---|---|---|
on_success | 先行ステップがすべて成功した場合のみこのステップを実行する | コンテナセットアップ→テスト など |
always | 前のステップの終了ステータスに関係なくこのステップを実行させる | Jobステータス成功失敗通知、ロックファイル削除 など |
on_fail | 前のステップが失敗した場合のみこのステップが実行される | テスト失敗ログ送信、アラートトリガー など |
なおデフォルトではon_success
が適用されているため、CircleCIはステップが失敗した瞬間にJobを終了するようになっているようだ。
補足:unless
whenだけではなく、unlessも存在する。
条件が偽の場合に評価するというもの。今の所使ってない。