drone.io v1.0 RC レビュー
2018年12月11日 火曜日
CONTENTS
【IIJ 2018 TECHアドベントカレンダー 12/11(火)の記事です】
drone.io は Goで作られたオープンソースの継続的インテグレーション・継続的デリバリー(CI/CD)環境です。drone.io は最初SaaS版として公開され、その後オープンソース版が公開されて正式版ではない0.Xとして開発が続いてきました。これを書いているときの最新版はv0.8.9です。
そして先日droneの正式バージョンであるDrone 1.0 Release Candidateが登場しました。最初は最速レビューというタイトルを付けていましたが、先を越されてしまったので表現を控えめにしました。
早速どんなところが変わったのかレビューしていきます!
主な変更点
マルチアーキテクチャ、マルチOSに対応
ビルドを複数のCPUアーキテクチャ、OS上で走らせることができるようになりました。実はいままでのバージョンでも動かすことはできましたが、正式にARM, ARM64とWindowsのサポートが追加になりました。
drone.yml が変更になり以下のように複数のアーキテクチャを混在させることも可能になりました。
kind: pipeline name: backend platform: arch: arm os: linux steps: - name: build image: golang commands: - go build - go test --- kind: pipeline name: frontend platform: arch: amd64 os: linux steps: - name: build image: node commands: - npm install - npm test depends_on: - backend
Jsonnet でテンプレートエンジンが使えるようになった
JsonnetはGoogleが作っているJSONのテンプレート言語です。
たとえばGOで書かれたバイナリを複数のアーキテクチャでビルドするような場合、今まではmatrixを使っていたと思いますが、以下のように書くことができます。
local Pipeline(arch) = { kind: "pipeline", name: arch, steps: [ { name: "build", image: "golang", commands: [ "go build", "go test", ] } ] }; [ Pipeline("amd64"), Pipeline("arm64"), Pipeline("arm"), ]
JsonnetはJSON5よりももっと柔軟にかけますので、似たような処理を繰り返し書くような場合には威力を発揮するはずです。これにより従来のmatrixは非推奨になりました。
Cronが使えるようになった
droneはリポジトリへのpushや、Pull(Merge) Requestの作成といったイベントでテストを走らせることしかできませんでしたが、Jenkinsのようにcronで定期的に実行することができるようになりました。
hourlyが最初の設定となり細かい設定できないようです。
UIがかっこよくなった
全体的にかっこよくなり、思わずロゴも傾いています。
Kubernetesにネイティブ対応
Droneではテストをコンテナ上で実行するためにagentにdocker socketをvolume mountして渡す必要がありました。新しくKubernatesをバックエンドエンジンとして利用することができるようになったため、docker socketを渡す必要がなくなりagentも不要になります。代わりにKubernetes APIで操作してテスト用コンテナを実行するようになります。
SaaS版が復活!
一度はなくなったSaaS版がDrone Cloudという名で復活しました。https://cloud.drone.io/ からサインアップでき、オープンソースプロジェクトは無料で利用できます。Drone Enterpriseとほとんど同じもののようです。
有料化?
ここで残念なお知らせですが、まだ公式な発表はありませんが、v1.0は有料プランの提供のみになりそうな気配です。立ち上げると以下のようなログが出力され、trialライセンスで上がっていることが分かります。
{ "expires": "0001-01-01T00:00:00Z", "kind": "trial", "level": "debug", "msg": "main: license loaded", "repo.limit": 5, "time": "2018-12-04T10:26:04Z", "user.limit": 5 }
有料化に関しては特に発表がないのですが、drone Enterpriseとして 価格表は公開されています。
デフォルトではこの「For Small Teams」と同じ状態になり、5ユーザ、5リポジトリまでの制限がかかります。
かなり謎なのは「Core」の存在です。これは機能差を見る限りSaaS版とも違うので今後上記よりも安いプランが登場する可能性があります。ソースコードが現在公開されていないため、今後の発表に注意する必要があります。
試してみるには
インストール用のドキュメントが用意されていますので、それに従えばセットアップできますが、一部不親切な点がありますので補足します。
DBのスキーマ変更あり
スキーマの変更があるためdrone v0.8からのアップグレードはそのままではできません。移行用のツールが計画されているため、アップグレードで対応する場合はこのツールが出てくるまで待ったほうが良いです。
ポート番号が変更
デフォルトで上がってくるポート番号が変更になっています。docker-compose.ymlを書いている人は注意しましょう。
OAuth Callback URL変更
ドキュメントにははっきりと書かれていませんが、OAuth用のcallback URLが https://<drone host>/login に変更されています。
Serverもdocker.socketのマウントが必要
これ何に使うのか不明ですが、今まではagentでのみ必要だったdocker.socketのマウントがserverでも必要になりました。
設定用の環境変数名が変更
ほとんどの環境変数は名前が変更になっています。また一部の変数は設定する内容も変更になっています。
- DRONE_HOST が DRONE_SERVER_PROTO と DRONE_SERVER_HOST に分割
- Agentに指定する DRONE_RPC_SERVER はURLでの指定のため注意
- Agent に指定する DOCKER_TLS_VERIFY は true/false ではなく 0/1 指定のため注意