drone.io v1.0 RC レビュー

2018年12月11日 火曜日


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

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

「drone.io v1.0 RC レビュー」のイメージ

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で定期的に実行することができるようになりました。

リポジトリの設定画面からcronを設定できる

hourlyが最初の設定となり細かい設定できないようです。

UIがかっこよくなった

全体的にかっこよくなり、思わずロゴも傾いています。

drone v1.0 RC スクリーンショット

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とEntepriseの違い

かなり謎なのは「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 指定のため注意

濵﨑 一樹

2018年12月11日 火曜日

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

Related
関連記事