GitLab+DroneでHerokuにCIする、という最高の環境を10分で作る
※2015/4/17
GitLab7.9 / Drone0.3 版に記事をアップデートしました。
Drone0.3で大きく変更されたため、手順もだいぶ変わっています。
今回の手順で主な変更点としては以下の様なものがあります。
- GitLabでDroneアプリケーションを登録する必要がある
- Drone側でリポジトリをsyncする機能が追加され、その中から選択する方式になっている
- Herokuへのdeployについて、0.3からsshキーではなくAPIキー(token)を用いる方法に変更されている
GitLab+OSS版DroneをEC2に0から構築し、herokuにCIする
という環境を10分くらいで作ってみます*1
また、すこしだけDroneについての説明もメモ程度ですが書き記しておきます。
GitLabとは/Droneとは
GitLabはGitHubクローンのOSSです。
DroneはTravisやCircleCIに似たCIサービスです。
全てがDockerコンテナ上で動く、というのが特徴です。
OSS版も公開されていて、v0.2.1のREADMEを見ると
どのようなことができるかざっくり確認できると思います。
テストを動かしたり、S3やHerokuにパブリッシュしたり、DBコンテナを起動できたりと
主要なものは機能提供されていますし
普通にシェルスクリプトも書けるので柔軟なデプロイなども行うことが出来ます。
また現在は GitHub/GitLab/Bitbucket と連携することが出来るようです。
なのでGitLab限定というわけではないですよ:)
DroneのOSS版が公開されているので今回はこちらをEC2上に構築します。
構築環境
Droneがubuntu推奨らしいので、EC2のubuntu(ami-e74b60e6)に0から構築してみます。
たぶんt2.microでもよいですが、メモリが若干心配なのでt2.smallで構築してみました。
また、本番として使うときにはディスクサイズ多めで起動したほうが良いでしょう。
(さらにプラスでセキュリティ周りも追加しておいたほうが良いですね)
ami | ami-e74b60e6 |
インスタンスタイプ | t2.small |
Drone webポート | 80 |
GitLab webポート | 81 |
前準備
GitLabとDroneの連携について補足説明
連携するためにどういうことが必要か説明します。
- GitLabにDroneアプリケーションを登録。
- GitLabにリポジトリ登録。.drone.ymlを追加しておく。
- Droneの設定でGitLabのURLやクライアントキーを登録。
- DroneにログインするとGitLabのリポジトリ一覧がsyncされているので、CIしたいリポジトリをActiveにする
あとはGitLabのリポジトリが更新されると .drone.yml の内容でCIが実行されます。
意外と簡単。
GitLabにDroneアプリケーション登録
それでは設定を準備する手順を進めていきましょう。
まずはGitLabにDroneアプリケーションを登録します。
管理者用画面から「Applications」から名前とコールバックURLを登録します。
コールバックURLは「
この辺りのドキュメントはこちら。
GitLabにリポジトリ作成/Herokuへpush
次に、GitLabのGUIからリポジトリ作成しソースコードをpushしておきます。
今回はこちらのチュートリアルのコードを利用してみました。
さらにプラスで.drone.ymlを追加しておきましょう。以下のようなファイルを用意しておきます。
image: dockerfile/ubuntu deploy: heroku: app: gitlab-drone-test token: "<Herokuで確認したAPIキー>" force: false
また、この時点でHerokuへpushしておきましょう*2
Drone
コンフィグ設定
まず、インストール後にGitLabの情報を/etc/drone/drone.tomlに記述しておく必要があります。
[gitlab] url="http://<GitLabのURL>" client="<GitLabで登録したアプリケーションのApplication Id>" secret="<GitLabで登録したアプリケーションのSecret>" skip_verify=false open=false
修正後に restart drone で反映しておきます。
すると、Droneの画面で以下のような画面が表示されているはずです。
ここの GitLab のボタンをクリックするとGitLabへのOAuthが開始されるので
GitLabでログインしている情報でAcceptすると、DroneとGitLabの連携が完了します。
Drone:気になるところ/ハマりどころ
CI速度について
一度目、Dockerイメージのpullが入ると遅いですが
二回目以降は速くなるので気にしなくてよいです。
公式のイメージサイズがバカでかい
割とサイズが大きい物が多いので、自前で必要な物だけインストールしたイメージを使うのが良いでしょう。
Dockerなので
ディスク容量には気をつけましょう。
コンテナに入りたいナリ〜
Droneの機能としては(おそらく)提供されていないので入るのは難しそうです。
.drone.ymlがscriptの羅列だけであれば
ローカルで同じコンテナ起動してscript実行してみる、というくらいでしょうか…
(もしかしたらもっといい方法があるのかも)
まとめ
繰り返しますが、このスクリプトを実行すると一発で構築できます!!
またここでは詳しく説明しませんでしたが、
OSS版Droneがよく出来ているのでお手軽CIツールとしてだいぶ良いのではないでしょうか。
オススメです!
Drone:ref
- Stable版のREADME https://github.com/drone/drone/tree/22268eb2e669619b8dbc4b92f65a487eec946861
- 公開されているOSS版ドキュメント(ちょっと古い)http://drone.readthedocs.org/en/latest/index.html
- 上記の最新版?ドキュメント(自前ビルドが必要)https://github.com/drone/docs
- サービス版ドキュメント(OSS版と異なる部分が多いので参考程度に) http://docs.drone.io/
- 使える環境変数など http://docs.drone.io/env.html
- Drone用ダッシュボード https://github.com/drone/drone-wall