drone.io で実行時のリソースを制限する
この記事は drone.io Advent Calendar 2017 - Adventar の14日目の記事です。
drone.io は Goで作られたオープンソースのCD (Continuous Delivery)環境です。
droneではテスト実行時は無制限にホストのリソースを使ってしまいます。これはdockerのデフォルト動作です。プライベートな環境であればあまり問題にならないかもしれませんが、複数ユーザが相乗りするような環境ではリソースの制限をしたくなるかもしれません。
ドキュメントには記載がありませんが、docker のオプションに対応する cpu_quota
, cpuset
, cpu_shares
, mem_limit
, memswap_limit
, shm_size
を指定することができます。
pipeline: limit_build: image: golang cpu_quota: 1000 cpuset: 1,2 cpu_shares: 99 mem_limit: 4MB memswap_limit: 1kb shm_size: 1kb commands: - go test
上記は .drone.yml で個別に指定する形式ですが、 drone-serverの起動時環境変数に指定するとデフォルトのリソース制限を設定することができます。
services: drone-server: environment: - DRONE_LIMIT_CPU_QUOTA=1000 - DRONE_LIMIT_CPU_SET=1,2 - DRONE_LIMIT_CPU_SHARES=99 - DRONE_LIMIT_MEM=4MB - DRONE_LIMIT_MEM_SWAP=1kb - DRONE_LIMIT_SHM_SIZE=1kb
この制限は pipeline だけでなく service にも指定可能です。