FuelPHPの継続的インテグレーション環境をVagrantとJenkinsを使って構築する
今日は、FuelPHPのプロジェクトのためのJenkinsサーバを構築してみます。
この設定で完璧というわけではないですが、いろいろなものが一通り動くレベルにはなってます。
FuelPHPプロジェクトを作成する
FuelPHPのプロジェクトとして、ここでは、『はじめてのフレームワークとしてのFuelPHP 第2版(改訂版)』のコンタクトフォームを使います。
develop-2
ブランチをgit clone
します。
$ git clone --depth=5 -b develop-2 https://github.com/kenjis/fuelphp1st-2nd-contact-form.git
以下は、プロジェクトがGitで管理されていることを前提としています。
Vagrantを使いサーバを構築する
Vagrant CentOS6 PHP Development Environment(vagrant-centos6-php)を使います。
FuelPHPプロジェクトのトップフォルダでgit clone
します。
$ cd fuelphp1st-2nd-contact-form
$ git clone -b develop https://github.com/kenjis/vagrant-centos6-php.git
vagrant-centos6-php/Vagrantfile
を変更し、Jenkins、FuelPHPを使うようにします。
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -23,7 +23,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# mailcatcher web
config.vm.network :forwarded_port, guest: 1080, host: 1080
# (optional) jenkins
- #config.vm.network :forwarded_port, guest: 8080, host: 8080
+ config.vm.network :forwarded_port, guest: 8080, host: 8080
# Create a private network, which allows host-only access to the machine
# using a specific IP.
@@ -91,14 +91,14 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#chef.add_recipe "mongodb"
#chef.add_recipe "redis"
#chef.add_recipe "elasticsearch"
- #chef.add_recipe "jenkins"
+ chef.add_recipe "jenkins"
chef.add_recipe "phpunit"
chef.add_recipe "php-project"
# (optional) Framework of your choice
#chef.add_recipe "codeigniter"
- #chef.add_recipe "fuelphp"
+ chef.add_recipe "fuelphp"
#chef.add_recipe "phalcon"
# (optional) Update all yum packages
仮想マシンを構築します。
$ cd vagrant-centos6-php
$ vagrant up
これで、PHP開発環境を兼ねたJenkinsサーバが構築されました。
▼Jenkinsのダッシュボード
Webアプリケーションの設定をする
仮想マシンにSSHして、Webアプリケーションの設定をします。
$ vagrant ssh
ホストOSでのfuelphp1st-2nd-contact-form
フォルダが、仮想マシン内では~/fuelphp
(実体は/mnt/project
)になっています。
composer install
し、MySQLにrootでログインします。
[vagrant@localhost ~]$ cd fuelphp
[vagrant@localhost fuelphp]$ php composer.phar self-update
[vagrant@localhost fuelphp]$ php composer.phar install
[vagrant@localhost fuelphp]$ mysql -u root -proot
データベースとユーザを作成します。
mysql> CREATE DATABASE `fuel_dev` DEFAULT CHARACTER SET utf8;
mysql> CREATE DATABASE `fuel_test` DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON fuel_dev.* TO username@localhost IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON fuel_test.* TO username@localhost;
mysql> exit
マイグレーションでテーブルを作成します。
[vagrant@localhost fuelphp]$ oil refine migrate:current
[vagrant@localhost fuelphp]$ FUEL_ENV=test oil refine migrate:current
[vagrant@localhost fuelphp]$ oil refine migrate:current --packages=auth
[vagrant@localhost fuelphp]$ FUEL_ENV=test oil refine migrate:current --packages=auth
Jenkinsでのジョブを作成する
FuelPHPプロジェクト用のジョブを作成します。
http://localhost:8080/にアクセスし、左のメニューから「新規ジョブ作成」をクリックします。
「ジョブ名」を「contact-form
」とし、「既存ジョブのコピー」を選択し「コピー元」に「fuelphp-template
」を入力し、「OK」を押します。
「fuelphp-template」はvagrant-centos6-phpに用意されているFuelPHP用のひな形です。
Jenkinsのジョブを設定する
プロジェクト「contact-form」の「設定」をクリックします。
まず、「ビルド無効化」のチェックを外します。
「ソースコード管理」の「Git」の「Branches to build」を「*/develop-2
」に変更します。ビルドに使用するブランチの設定です。
設定が完了したら、下の「適用」ボタンを押します。
ビルドを実行する
プロジェクト「contact-form」の「ビルド実行」をクリックすると、ビルドが実行されます。
▼ビルド中のコンソール出力
たまに、PHPのメモリ不足でビルドが失敗することがあります。もう一度ビルドを実行するとたぶん成功します。
うまくいかない場合は、PHPのメモリ割当を増やしてください。
▼プロジェクトcontact-form
Gitにコミットしたら自動的にビルドを実行する
.git/hooks/post-commit
ファイルを作成します。
#!/bin/sh
curl -s http://localhost:8080/job/contact-form/build?token=triggerString
echo "run Jenkins build."
triggerString
は認証トークンですが、今は設定されていないので必要(関係)ありません。
「Jenkinsの管理」→「グローバルセキュリティの設定」で「セキュリティを有効化」すると、ジョブの設定の「ビルド・トリガ」の選択肢に「リモートからビルド」が追加され、「認証トークン」を設定できるようになります。
フックファイルに実行権限を設定します。
$ chmod +x .git/hooks/post-commit
これで、Gitリポジトリにコミットすると、ビルドが実行されるようになります。
push
時にビルドを実行したい場合は、.git/hooks/post-update
を作成します。
関連
- 紙版『はじめてのフレームワークとしてのFuelPHP 改訂版』発売!
- CodeIgniterの開発環境をvagrant-centos6-phpを使い構築する
- Phalconの開発環境をvagrant-centos6-phpを使い構築する
参考
Date: 2015/01/30