サーバーの現状
これまで以下の作業を終えた状態。
しかし自動デプロイしたいのは前回設定したのとは別のリポジトリなので変えてある。
-
Jenkinsのインストールと初期設定
さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(1) -
GitHubにPushしたらJenkins動かす
さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(2) -
LAMP環境も構築済み
さくらのVPSにLAMP環境構築する
今回やる事
今回は目指す完成形でいう(7)の作業をします。
- ローカルのVagrant上で開発
- GitHubにPush(gitflow形式で運用)
- GitHubに設定するwebhookでjenkinsに通知
- jenkinsさんがGitHubからソース落とす
- jenkinsさんがテスト走らせる
- テスト結果をSlackのプロジェクトチャンネルに通知
- テストOKで該当環境のDocumentRoot上にデプロイ
配置するのはLaravel5.1を使ったサイト
今回の作業の流れは以下の感じ
- CentOSに作るサイト用のaureliaというユーザー追加
- CentOSにサイト用ユーザーとjenkinsを一緒にしたグループを追加
- jenkinsユーザーに切り替えられるように設定
-
/home/aurelia/
内で先にcloneしておく - ApacheのVirtualHostで
/home/aurelia/public
をDocumentRootとして設定 - Jenkinsで実行するコマンドを設定する
実現方法
jenkinsでテスト完了後にgit pull
させる。
作業
CentOSにサイト用ユーザーの追加
# adduser aurelia
CentOSのグループの追加・設定
# groupadd works // 作業用グループを作成
# usermod -G works aurelia // 作業用グループにaurelia追加
# usermod -G works jenkins // 作業用グループにjenkins追加
# usermod -G works apache // 作業用グループにapache追加
Jenkinsユーザーに切り替え可能に設定
コマンドはjenkinsユーザーで実行されたりするので
問題発生時は直接jenkinsユーザーで試したりできる。
/etc/passwd
を編集する
jenkins:x:498:499:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/false
これを
jenkins:x:498:499:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
こうする。
これでsu - jenkins
で切り替えられるようになる。
GitHubからclone
今回使うのはこちら(https://github.com/inaka-phper/Laravel5.1-Aurelia)
# cd /home/aurelia/
# git clone -b [ブランチ名] [GitHubのリポジトリURL]
パーミッション設定とシンボリックリンク
/home/aurelia/Laravel5.1-Aurelia
内を、worksグループに属するユーザーがいじれるようにする。
# chmod 755 /home/aurelia/ // apacheでも見れるように755へ
# ln -s Laravel5.1-Aurelia/public public // わが社のお決まりパターン
# chown -R aurelia:works Laravel5.1-Aurelia // rootでやっちゃったので変えた
# chown -h aurelia:works public // 同じく
# chmod -R g+w Laravel5.1-Aurelia
# chmod -R g+s Laravel5.1-Aurelia // グループ
ApacheのVirtualHost設定
apacheのconf.dに移動してVirtualHostの設定を追加する
# cd /etc/httpd/conf.d/
# vi virtualhost-aurelia.conf
<VirtualHost *:80>
ServerName aurelia.example.com
DocumentRoot /home/aurelia/public
ErrorLog logs/aurelia-error_log
CustomLog logs/aurelia-access_log combined
</VirtualHost>
※私はさらにベーシック認証追加
# apachectl configtest // 設定にミスがないか確認
Syntax OK
# apachectl restart
設定したURLにアクセスしてページが表示されればOK。
composer install
このプログラムはLaravel使ってるのでcomposer update
する
# su - jenkins
$ cd /home/aurelia/Laravel5.1-Aurelia
$ composer install
-bash: composer: command not found
composer入ってなかった…
yumでremiから入れた。
# yum --enablerepo=remi,remi-php56 install composer
$ composer install
その後Laravelの初期設定を行って動くように調整した。
Jenkinsさんでgit pullコマンドの設定を行う
前回作ったジョブの設定で、「ビルド手順の追加」から「シェルの実行」選択してコマンドを設定する
cd /home/aurelia/Larael5.1-Aurelia
git pull
テスト成功時だけ本番環境にデプロイする場合は
実行したいテストの実行コマンドも追加して
その下に本番環境用のパスに移動してgit pullする流れで書いてあげると
最初の確認環境でデプロイ→テスト失敗(ジョブ終了)→本番環境へデプロイしないとなる。
テスト成功時はテストOK→本番環境へデプロイとなる。
# 確認環境でテスト実行
cd /home/aurelia-develop/Larael5.1-Aurelia
git pull
vendor/bin/phpunit
# 成功時のみ本番環境へもデプロイ
cd /home/aurelia/Larael5.1-Aurelia
git pull
動くかテスト
既にGitHubとの連携はできているので、jenkinsから「ビルド実行」をすれば良い。
ビルド後にそのビルドの「コンソール出力」を確認すると実行された内容が確認できる。
ばっちりエラーが出てしまっている。
git pullするのはjenkinsばかりになるので所有者を変えて逃げ…。
# chown -R jenkins:works Laravel5.1-Aurelia
GitHubにPushしてみる
テスト以外でエラーが出た時は、
コンソール出力を見れば原因がそのまま書いてある場合が多い。
次回は
Slackへテスト結果の通知を行う設定をする