なにこれ
モバイル向けのCIとして有名なBitriseにて
特定の条件下で同じWorkFlowでも特定のstepの処理を除外したいときがありました。
多分本来はWorkFlow自体を別のものを設定すべきなのだと思いますが、
1stepだけ違うWorkFlowをそれぞれメンテする未来がいやだったので、なんとか処理でstep実行を振り分けたかった。
結論
run_if を使う
(公式リファレンス)
GUIでWorkFlowを作れるのがBitriseのいいところですが、もちろんコード管理などの為にコードベースの bitrise.ymlが準備されています。
こちらの run_if プロパティを指定してstepの実行振り分けを行います。これはその名の通り、設定したstepを実行するか否かを判定するプロパティです。
使い方

WorkFlowEditorのbitrise.ymlを選択します

今回は実行に時間のかかるvirtual device testのRoboテストを振り分けています。
コードは環境変数ROBO TESTがtrueの場合のみvirtual device testを実行するというものになります。
必須手順は以上。
あとはslackのカスタムコマンドで環境変数を設定したり、script stepを挿入して環境変数を設定するなどの方法があるかと思います。
[外伝]実用例
今回僕が必要になったパターンをご紹介。
もともと対象のWorkFlowがPullRequestをトリガーとして実行されるものであり、そんなPR毎に毎度毎度Roboテスト実行してもなぁ…というところから始まりました。
検討の結果、ライブラリやgradleのアップデートなどロジックの変更はないけど動作を見ておきたいというようなPRのみRoboテストを実行することにしました

なので対象のvirtual device testのstepの直前にscriptを設定

Bitriseのデフォルトで利用可能な環境変数たちAvailable environment variablesにあるBITRISE_GIT_MESSAGEを利用してGithubPRのタイトルを取得、
その中に[rote test]の文字列がある場合にBitriseの環境変数を追加する envmanを利用してROBO_TEST環境変数を追加しています。
ちょっと運用がローカル運用しすぎて、Androidエンジニアが増えたらちょっと忘れがちなので、もう少し手を加えてbuild.gradleの変更差分があるときに実行するとかにしたほうがいいかなと思っています。