Drone Community Edition
2019年12月03日 火曜日
CONTENTS
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 EditionとEnterprise 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ですが、仕組みはシンプルなため利用してみてはいかがでしょうか。