2015.03.27

Dockerで動くCI、drone.ioを試す


こんにちは、次世代システム研究室のN.O.です。前回はfuelphpの開発環境をDockerで構築しました。今回はテスト、リリースといったところをターゲットに進めていきたいと思います。
テストもリリースも全てDockerでと行きたいところですが、まずはお試しでオンラインの継続的インテグレーション(以下CI)サービスdrone.ioを利用してCI環境を整備したいと思います。

drone.ioとは


Continuous Integration · drone.io

drone.ioはオンラインのCIサービスです。以下の特徴があります。
  • Dockerで構築されている
  • ユーザのプロジェクトで必要となる環境もDockerで実行される
  • オープンソース版がある。

Dockerが積極的に使用されていることから今回の取り組みにぴったりです。また、オープンソースで公開されていることからオンプレミスで実行することもできそうなので、良さそうだったらオープンソース版も試してみたいです。
今回は前回作成したfuelphpのサンプルを使用してdrone.ioのプロジェクトを作成したいと思います。

手順


サインアップ


オンラインのCIサービスではコードホスティングサービスのアカウントが必須となります。drone.ioも例外では無いのでGitHubBitbucketのアカウントを取得しておきます。

Quickstart · drone.ioを参考にサインアップします。

プロジェクトを作る


今回はGitHubにソースコードを置きます。
codehosting レポジトリを選択します。
repo 前回作成したfuelphpのサンプルを使いますので、プログラミング言語はPHPを選択します
lang ビルドのスクリプトを入力します。
script

プロジェクトの設定


Environment Variables
FUEL_ENV=test

Commands
mysql -u root -e 'create database fuel_test;'
php composer.phar install
php oil refine migrate:current
php oil test

ビルド!

buildボタンを押すと手動で実行できますので、試しに押してみます。
この時はデータベース接続先の設定をしてないのでビルドに失敗してしまいました。

GitHubにpushしてみる

GitHubにpushすると自動的にBuildが走ります。

ソースコードにデーターベース接続先の修正を加えてpushします。

fuelphp_demo_app/fuel/app/config/test/db.php
<?php
/**
 * The test database settings. These get merged with the global settings.
 *
 * This environment is primarily used by unit tests, to run on a controlled environment.
 */

return array(
	'default' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=localhost;dbname=fuel_test',
			'username'   => 'root',
		),
	),
);

fuelphp_demo_app/fuel/app/config/test/migrations.php
<?php
return array(
  'version' => 
  array(
    'app' => 
    array(
      'default' => 
      array(
        0 => '001_create_messages',
      ),
    ),
    'module' => 
    array(
    ),
    'package' => 
    array(
    ),
  ),
  'folder' => 'migrations/',
  'table' => 'migration',
);

pushすると自動的にビルドが実行され、今度は成功しました。

push時の自動実行だとビルドの様子がわかりづらいので、手動でbuildボタンを押した様子がこちらになります。
droneio




ステータスバッチ


ステータスバッチを配置することもできます。


最後に


いかがでしたでしょうか?今回はCIのところまででリリースまでには至りませんでしたが、サービスとして提供されているdrone.ioは使ってみたところなかなかよさそうです。
今後はオープンソース版も試してみたいと思います。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。