生涯未熟

生涯未熟

プログラミングをちょこちょこと。

BitriseのWorkflowが無限にスタックする事象に遭遇した

Flutterアプリ開発のCIにBitriseを採用しているのですが、今回タイトルのような現象に遭遇したので知見のために書き記します。

何が起こったのか?

何が起こったのかというと、前提としてBitriseでCredits-Basedなプランを契約しており「月〇〇creditsまではこのお値段。超過したら追加課金が発生します」といったような課金体系となっています。
で、creditsは常に確認して超過しないよう注意しながら開発を続けていたのですが、ある日突然とんでもないcredits量が消費されておりました。月のcredits量を余裕で突破し、追加課金がかなり発生している状態です。

状況確認

まずは状況確認ということで、実際にどのWorkflowがcreditsを消費していたのかを調べると、あるWorkflowが15時間も動いていたことに気付きました。これは異常なことで、普段は長くても10minほどのWorkflowしか動いていなかったのでこれが原因だろうとすぐに察しがつきました。

もう一つ、異常なことがBitrise側のデフォルトのタイムアウトが3.5時間なのですがこれが効いていなかったことです。

devcenter.bitrise.io

さすがにこれはこちらの問題ではなく、Bitrise側の問題であろうということでサポートに連絡することに。

その後

サポートに連絡したことで15時間分のcreditsを返却してもらえましたが、この問題自体はBitriseとしても既知のものであり、再度発生した場合にはまた連絡してくれという回答でありました。
事実、この返却後に今後は3.5時間のスタックが発生し、こちらも返却してもらいましたが頻発するようでは困る・・・

ということで、こちらで出来ることはないかと調べると社内wikiでBitriseのこういった問題事象をまとめている方がおり、同じようなスタックする事象も書かれておりました。そこに「step毎のタイムアウト時間を設定しておくのが良い」と対処法もセットで書かれていたので対応することに。

devcenter.bitrise.io

これで、設定時間中に何も出力がされない場合にはAbortするようにできます。こういった問題が発生する以上、マストでこの設定しておいた方が良さそうですね🤔

ということで、Bitriseで遭遇した問題のお話でした。