drone.io でagentごとに特定のビルドのみ実行するフィルタを設定する

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

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

github.com

特定ビルドを特定のagentに処理させたいということがあるかと思います。例えば重いテストを専用のagentに隔離させるであるとか、Trustedフラグが有効になっていて専用のデバイスが接続されているagentで実行させたいとかです。

agentには環境変数DRONE_FILTERを設定することでフィルタを設定することができます。

environment:
  - DRONE_FILTER=repo IN ('drone', 'docker', 'foo', 'bar')

SQLっぽい独自の構文で条件は記述することができます。

DRONE_FILTER=repo == 'drone'

演算子==, !=, <, <=, >, >=, AND, OR, NOT, IN, GLOB, REGEXP, BETWEEN が利用できます。

DRONE_FILTER=repo GLOB 'hoge/some-prefix-*'
DRONE_FILTER=repo NOT GLOB 'hoge/some-prefix-*'

と、ここまで書いてなんですが、 drone v0.8ではfilterが動作しないバグがあります ので次のバージョンをお待ちください。