Drone Community Edition

2019年12月03日 火曜日


【この記事を書いた人】
濵﨑 一樹

システムクラウド本部所属。IaaSを作っています。旅行をしたり、雪山に登って写真を撮るのが趣味です。

「Drone Community Edition」のイメージ
IIJ Engineers blog読者プレゼントキャンペーン

Twitterフォロー&条件付きツイートで「バリーくんぬいぐるみ」を抽選で20名にプレゼント!
応募期間は2019/11/29~2019/12/31まで。詳細はこちらをご覧ください。
今すぐツイートするならこちら→ フォローもお忘れなく!

IIJ 2019 TECHアドベントカレンダー 12/3(火)の記事です】

IIJ社内では様々なCI/CD環境を状況に応じ使い分けて利用していますが、そのひとつにDroneがあります。
Droneについては IIJのサービス開発を支えるGithub Enterpriseとdrone.io で詳しくご紹介しています。

Drone Community EditionとEnterprise Edition

Drone v1.0からはライセンス体系が大きく変わり、Community EditionEnterprise Editionの2つに分かれることになりました。

Community Editionは引き続き無料で利用することができますが、Enterprise Editionは有料のライセンスが必要です。最大5000ビルドまでの間は無料で利用することができます。また主にスタートアップ向けで年間売上100万米ドル以下かつ従業員数100人以下の企業では無料で利用できるようです。細かいライセンスの考え方はLicensing and Subscription FAQを見るのがよいと思います。

Community EditionとEnterprise Editionの機能差については DRONE ENTERPRISE FEATURES にまとまっています。表中のOpen SourceがCommunity Edition、EnterpriseがEnterprise Editionのことを示しています。Docker RunnerはCommunity Editionでも使えると書かれていますが使えないようです。

現時点での簡易的な比較は以下のようになります。

Community Enterprise
ユーザ数 無制限 ユーザ数課金
ビルド数 5000ビルド/年 無制限
データベース SQLiteのみ SQLite, MYSQL, Postgres
エージェント シングルマシンのみ。エージェントは利用不可 マルチマシン、マルチプラットフォーム
Runner 利用不可 利用可
Cron 利用不可 利用可
Autoscaling 利用不可 利用可
ライセンス Apache License 2.0 Drone Non-Commercial License

またこの制限はv1.0がリリースされてから何度も変更されていますのでバージョンが上がるたびに確認する必要があります。

Community Editionのビルド

さて公式で提供されているdockerイメージはEnterprise Editionになっており、Community Editionは自前でのビルドが必要です。ここではCommunity Editionのビルド方法についてご紹介します。

基本的には BUILDING_OSS を見て同じようにビルドすればよいですが、-tags “oss nolimit” を付けるのがポイントになります。tagも途中で変更されたことがありますので毎回確認するようにしたほうが良いでしょう。ここではスタティックリンクするようにしています。

$ git clone --depth 1 https://github.com/drone/drone.git
$ cd drone
$ go build -tags "oss nolimit" -ldflags '-extldflags "-static"' github.com/drone/drone/cmd/drone-server

バイナリをそのまま動かす場合はこのままでよいですが通常はdockerで動かすと思いますのでDockerfileも作りましょう。Dockerfile.server.linux.amd64を見ながら作れば良いですが、v1.5以降は DRONE_AGENTS_DISABLED=falseが必要になります。
FROM alpine:3.9 as alpine
RUN apk add -U --no-cache ca-certificates

FROM alpine:3.9
EXPOSE 80 443
VOLUME /data

RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf

ENV GODEBUG netdns=go
ENV XDG_CACHE_HOME /data
ENV DRONE_DATABASE_DRIVER sqlite3
ENV DRONE_DATABASE_DATASOURCE /data/database.sqlite
ENV DRONE_RUNNER_OS=linux
ENV DRONE_RUNNER_ARCH=amd64
ENV DRONE_SERVER_PORT=:80
ENV DRONE_SERVER_HOST=localhost
ENV DRONE_AGENTS_DISABLED=false

COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

COPY drone/release/linux/amd64/drone-server /bin/
ENTRYPOINT ["/bin/drone-server"]

自分でビルドするのは大変なのでDroneをDroneでセルフビルドできるようにしたリポジトリを置いておきました。forkしてお使いください。

https://github.com/iij/drone-oss

ライセンスの都合上、生成したイメージを配布するには商標を取り除く必要があるためこのような方法としています。

バージョンが上がるたびに追いかけていくのが大変なDroneですが、仕組みはシンプルなため利用してみてはいかがでしょうか。

濵﨑 一樹

2019年12月03日 火曜日

システムクラウド本部所属。IaaSを作っています。旅行をしたり、雪山に登って写真を撮るのが趣味です。

Related
関連記事