さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(3)

# サーバーの現状
これまで以下の作業を終えた状態。
しかし自動デプロイしたいのは前回設定したのとは別のリポジトリなので変えてある。

* Jenkinsのインストールと初期設定
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(1)](http://qiita.com/inaka_phper/items/f264401ed7a0bc25f407)

* GitHubにPushしたらJenkins動かす
[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(2)](http://qiita.com/inaka_phper/items/f37c71b5bc0a7ba57157)

* LAMP環境も構築済み
[さくらのVPSにLAMP環境構築する](http://qiita.com/inaka_phper/items/b84e5f6abae6a814150a)

# 今回やる事
今回は[目指す完成形](http://qiita.com/inaka_phper/items/f264401ed7a0bc25f407#%E7%9B%AE%E6%8C%87%E3%81%99%E5%AE%8C%E6%88%90%E5%BD%A2)でいう(7)の作業をします。

1. ローカルのVagrant上で開発
2. GitHubにPush(gitflow形式で運用)
3. GitHubに設定するwebhookでjenkinsに通知
4. jenkinsさんがGitHubからソース落とす
5. jenkinsさんがテスト走らせる
6. テスト結果をSlackのプロジェクトチャンネルに通知
7. **テストOKで該当環境のDocumentRoot上にデプロイ**

配置するのはLaravel5.1を使ったサイト

今回の作業の流れは以下の感じ
1. CentOSに作るサイト用のaureliaというユーザー追加
2. CentOSにサイト用ユーザーとjenkinsを一緒にしたグループを追加
3. jenkinsユーザーに切り替えられるように設定
4. `/home/aurelia/`内で先にcloneしておく
5. ApacheのVirtualHostで`/home/aurelia/public`をDocumentRootとして設定
6. 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
```

```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入ってなかった… :astonished: 
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
```

設定はこんな感じ
![jenkins1.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/efd52f60-59f0-adec-f1e4-5379c5ce1468.jpeg)

# 動くかテスト
既にGitHubとの連携はできているので、jenkinsから「ビルド実行」をすれば良い。
ビルド後にそのビルドの「コンソール出力」を確認すると実行された内容が確認できる。
![jenkins2.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/c05ba99e-595f-1388-1702-2c044b94a735.jpeg)
ばっちりエラーが出てしまっている。

git pullするのはjenkinsばかりになるので所有者を変えて逃げ…。
`# chown -R jenkins:works Laravel5.1-Aurelia`

![jenkins3.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/d1dedc94-428e-7433-6f59-e73de35b07aa.jpeg)
今度は成功。

# GitHubにPushしてみる
![jenkins4.jpg](https://qiita-image-store.s3.amazonaws.com/0/85113/a1e9c00f-9ec7-c0f9-420c-86301ba7190e.jpeg)
こちらも無事成功。

テスト以外でエラーが出た時は、
コンソール出力を見れば原因がそのまま書いてある場合が多い。

# 次回は
Slackへテスト結果の通知を行う設定をする

[さくらのVPSにjenkinsをインストールして、テストOKで自動デプロイする環境を構築する(4)](http://qiita.com/inaka_phper/items/79845a7210c48a27786b)