drone.io でくさってしまったビルドキューをお掃除する

この記事は drone.io Advent Calendar 2017 - Adventar の8日目の記事です。

drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。

github.com

くさったビルドキューをお掃除する

みなさんはdroneのビルドキューのモニタリング/監視をしていますか? drone を複数の利用者に開放していると実行中、実行待ちのビルドを計測しておくと実行ノード数が足りているか知ることができます。 またたまにビルドが実行状態になったままずっと進まなくなることがあり、監視を入れておくとなにかあった場合に気付くことができます。

さてそのような場合にdroneを再起動したりするのですが、running 状態のままagentでも処理されないビルドがたまったままとなることがあります。

DBを直接いじって直す方法をご紹介します。drone v0.8でsqlite3利用の場合です。

くさったビルドを表示

SELECT repo_owner, repo_name, repo_private, build_branch, datetime(build_enqueued, 'unixepoch') FROM builds b, repos r WHERE b.build_repo_id = r.repo_id AND b.build_status = "running" AND b.build_enqueued < strftime('%s', 'now', '-1 day');

くさったビルドを失敗させます

UPDATE builds SET build_status = "error" where build_status = "running" AND build_enqueued < strftime('%s', 'now', '-1 day');

-1 day のところはタイムアウト値に応じて適時調節してください。