Droneのオープンソース版を試してみました。
Droneのオープンソース版が公開されたということで、早速こちらを試してみました。
GitHub: https://github.com/drone/drone
デモビデオ: https://docs.google.com/file/d/0By8deR1ROz8memUxV0lTSGZPQUk
GitHubのREADME.mdによると、Droneは現在以下のバージョンのUbuntuで動作検証が実施されているとのことでしたので、今回は前述のデモビデオでの手順通り、DigitalOceanでDocker 0.8 Ubuntu 13.04 x64のDropletを作成・起動し、その上でDroneをインストールすることにしました。
インストール
$ wget http://downloads.drone.io/latest/drone.deb $ sudo dpkg -i drone.deb $ sudo start drone
以上の作業により、ポート番号80番でDroneが起動します。http://DRONE-HOSTNAME/installへアクセスすると、以下のサインアップ画面が表示されます。
この画面で名前、Eメールアドレス、パスワードを入力し、Create Adminボタンをクリックするとアカウントが作成され、Sysadmin画面が表示されます。
設定
GitHubのAccount settings -> ApplicationsにてRegister new applicationボタンをクリックします。
Homepage URLにhttp://DRONE-HOSTNAME/を、Authorization callback URLにhttp://DRONE-HOSTNAME/auth/login/githubをそれぞれ入力し、GitHub Applicationを登録します。
登録したGitHub ApplicationのClient ID、Client Secretを、Drone Sysadmin画面のGitHub Client ID and Secret:へ入力し、Saveボタンをクリックします。
Droneの画面右上のNew Repositoryボタンをクリックし、リポジトリの登録作業に移ります。
Link Your GitHub AccountのLink NowボタンをクリックしてGitHubアカウントを連携させた後、Repository Setup画面のGitHub Owner、Repository Nameに、DroneでビルドしたいGitHubリポジトリ名を入力し、Addボタンをクリックします。(今回はyosssi/gonhkというリポジトリを登録します。)
.drone.ymlファイルの作成
Droneでビルドしたいリポジトリのルートディレクトリに、以下のような.drone.ymlファイルを作成します。
image: mischief/docker-golang env: - GOPATH=/var/cache/drone script: - go build - go test -cover -v
Droneに登録したリポジトリへモジュールをプッシュすると、.drone.ymlファイルの定義情報をもとにビルドが自動的に実行されます。
Docker image
Droneでは、.drone.ymlのimageで設定されたDocker imageをベースにしたコンテナ上でビルドが実行されます。前述の手順ではmischief/docker-golangというDocker imageが使用されています。
リポジトリは、Dockerコンテナ上の以下パスにクローンされます。
/var/cache/drone/src/github.com/$owner/$name
Drone公式のDocker image
Drone公式のDocker imagesとして、以下のものがあります。
# these are the base images for all Drone containers. # these are BIG (~3GB) so make sure you have a FAST internet connection docker pull bradrydzewski/ubuntu docker pull bradrydzewski/base # clojure images docker pull bradrydzewski/lein # image: lein # dart images docker pull bradrydzewski/dart:stable # image: dart # erlang images docker pull bradrydzewski/erlang:R16B # image: erlangR16B docker pull bradrydzewski/erlang:R16B02 # image: erlangR16B02 docker pull bradrydzewski/erlang:R16B01 # image: erlangR16B01 # gcc images (c/c++) docker pull bradrydzewski/gcc:4.6 # image: gcc4.6 docker pull bradrydzewski/gcc:4.8 # image: gcc4.8 # go images docker pull bradrydzewski/go:1.0 # image: go1 docker pull bradrydzewski/go:1.1 # image: go1.1 docker pull bradrydzewski/go:1.2 # image: go1.2 # haskell images docker pull bradrydzewski/haskell:7.4 # image: haskell # java and jdk images docker pull bradrydzewski/java:openjdk6 # image: openjdk6 docker pull bradrydzewski/java:openjdk7 # image: openjdk7 docker pull bradrydzewski/java:oraclejdk7 # image: oraclejdk7 docker pull bradrydzewski/java:oraclejdk8 # image: oraclejdk8 # node images docker pull bradrydzewski/node:0.10 # image node0.10 docker pull bradrydzewski/node:0.8 # image node0.8 # php images docker pull bradrydzewski/php:5.5 # image: php5.5 docker pull bradrydzewski/php:5.4 # image: php5.4 # python images docker pull bradrydzewski/python:2.7 # image: python2.7 docker pull bradrydzewski/python:3.2 # image: python3.2 docker pull bradrydzewski/python:3.3 # image: python3.3 docker pull bradrydzewski/python:pypy # image: pypy # ruby images docker pull bradrydzewski/ruby:2.0.0 # image: ruby2.0.0 docker pull bradrydzewski/ruby:1.9.3 # image: ruby1.9.3 # scala images docker pull bradrydzewski/scala:2.10.3 # image: scala2.10.3 docker pull bradrydzewski/scala:2.9.3 # image: scala2.9.3
データベース
Droneでは、ビルド時に以下のデータベースコンテナを起動することができます。
service: - cassandra - couchdb - elasticsearch - neo4j - mongodb - mysql - postgres - rabbitmq - redis - riak - zookeeper
デプロイ
Droneではビルド成功時にデプロイを自動的に行うことができます。
deploy: heroku: app: safe-island-6261 publish: s3: acl: public-read region: us-east-1 bucket: downloads.drone.io access_key: C24526974F365C3B secret_key: 2263c9751ed084a68df28fd2f658b127 source: /tmp/drone.deb target: latest/
通知
Droneではビルド完了時にEメール、HipChat、Webフックでの通知を自動的に行うことができます。
notify: email: recipients: - brad@drone.io - burke@drone.io urls: - http://my-deploy-hook.com hipchat: room: support token: 3028700e5466d375
Eメール通知の設定を行ってみます。今回はAmazon SESを使ってメールを送信することにします。
SysadminのSMTP Server Settings.の各欄へAmazon SESの情報を入力し、Saveをクリックします。
.drone.ymlのnotify.email.recipientsに通知先のメールアドレスを指定します。
image: go1.2 env: - GOPATH=/var/cache/drone script: - go build - go test -cover -v notify: email: recipients: - yoshida.keiji.84@gmail.com - yoshida.keiji@economica.co.jp
Droneでのビルドが完了すると、.drone.ymlで指定したメールアドレスへ以下のような通知メールが送信されます。
非公開の環境変数の登録
APIキー、パスワードなどの、.drone.ymlファイルに記載したくないパラメータは、リポジトリ名 ->Settings -> Paramsにて設定することができます。
Droneビルドバッヂの取得
リポジトリ名 -> Settings -> BadgesにてDroneビルドバッヂのMarkdown、HTMLコードを取得することができます。
登録可能なリポジトリ
現時点ではGitHub上のリポジトリのみ登録可能でした。Bitbucketはcoming soonとのことです。
所感
「使い捨ての環境を簡単に作り出せる」というDockerの特徴を十分に活かした素晴らしいサービスだと思います。やはりDockerとCIツールの相性は抜群ですね。自作のDocker imageを使ってビルドすることができるため、自分・自社のプロダクト・プロジェクトにあわせた独自のCIツールを簡単に構築することができると思います。