Jenkins + GitHubで、RailsのCIの仕組みを整える①

※2016年10月に別のブログで書いたものを移行した記事になります。

---

[Railsの開発環境を整える① \- Qiita](http://qiita.com/mokuo/items/1e0bde7c7c7af3c98648)
[Railsの開発環境を整える② \- Qiita](http://qiita.com/mokuo/items/025c83aab51f8f180e17)
に続いて、CI（継続的インテグレーション）を導入して、ベスト・プラクティスの完成です。
CIツールには、Jenkinsを使います。
今回は、AWSで動かしたいと思います。

<!--more-->

## Jenkinsのインストール

### Javaのインストール

JenkinsはJavaで動く。
※既にJavaがインストールされていれば、削除しておく

```
$ java -version
$ sudo yum remove java
```

Javaをインストールする。

```
$ yum list | grep openjdk
$ sudo yum -y install java-1.7.0-openjdk
$ java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (rhel-2.6.7.2.el7_2-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
```

Javaのバージョンが違う場合、1.7.0を指定する。

```
$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)

$ sudo alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
\*  2           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2

$ java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (amzn-2.6.7.2.68.amzn1-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
```

### Jenkinsのインストール・設定

Jenkinsをインストール

```
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
$ sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum -y install jenkins
```

自動起動設定(CentOS7の場合)

```
$ sudo systemctl start jenkins
$ sudo systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
$ sudo chkconfig jenkins on
$ chkconfig --list jenkins

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

jenkins         0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

自動起動設定(CentOS6.xの場合)

```
$ sudo service jenkins start
Starting Jenkins                                           [  OK  ]
$ sudo chkconfig jenkins on
$ chkconfig --list jenkins
jenkins         0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

### ファイアフォール設定(AWSの場合)

AWSの場合、セキュリティグループで、8080portを許可しておく。

### ファイアフォール設定(Vagrant✕CentOS7の場合)

Vagrantの場合、以下の設定が必要。
ファイアフォールで、httpと8080portを許可

```
$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
$ sudo firewall-cmd --zone=public --add-service=http --permanent
success
$ sudo firewall-cmd --reload
success
$ firewall-cmd --list-all
public (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client http ssh
  ports: 8080/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
```

localhost:8080でアクセスできるように、Vagrantファイルに以下を追加

```
config.vm.network "forwarded_port", guest: 8080, host: 8080
```

### Jenkinsにアクセス

ブラウザで http://[yourhost]:8080/にアクセス

![Jenkins-Jenkins--1024x507.png](https://qiita-image-store.s3.amazonaws.com/0/102964/4846dbda-e45f-c542-0f19-7c8df0a78db7.png)

初回のみ、以下の画面が表示される。指定されたパスに書いてあるパスワードをコピペする。

```
$ sudo -u jenkins cat /var/lib/jenkins/.ssh/id_rsa.pub
```

![SetupWizard-Jenkins_installing--1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/6626c16a-c181-a7e9-f94f-90a5ff6ecb7c.png)

インストールが実行される。

![SetupWizard-Jenkins_installing--1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/b7459dbe-229d-0330-ed25-c15897c71402.png)

ユーザー名などを入力

![SetupWizard-Jenkins-info--1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/ba3df685-818c-1b57-d301-5e61577af291.png)

Jenkinsのトップページが表示された。

![ダッシュボード-Jenkins--1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/50b3c14d-5e49-70a0-dfd5-a80eff1ef68f.png)

**参考サイト**

* [Installing Jenkins on Red Hat distributions - Jenkins - Jenkins Wiki](https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions)

## botアカウントの作成

GitHubで、botアカウントを新たに作成しておく。
このbotアカウントが、自動テストの結果をGitHubに通知してくれるように、設定していく。

## GitHubへの公開鍵認証を設定する

GitHubのリポジトリへのアクセス認証は、公開鍵認証で行う。

### 公開鍵と秘密鍵の作成

Jenkinsユーザーで鍵を作成する。

```
$ sudo -u jenkins ssh-keygen -t rsa -C "you@example.com"
```

いくつか質問されるが、全てEnterで良い。
"you@example.com"は、GitHubに登録したメールアドレスを設定する。
公開鍵のパスワードも空にする。

### botアカウントに公開鍵を登録する

先ほど作成した公開鍵(id_rsa.pub)は、botアカウントに登録する。
botアカウントの Setting > SSH and GPG keys で、「New SSH Key」をクリックする。

![SSH-and-GPG-keys-1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/9e651704-ccc3-2aa4-ab03-f7a4c61b43a4.png)

名前は適当なものを入力し、
id_rsa.pubの中身をコピペして、「Add SSH key」をクリックする。
id_rsa.pubはcatコマンドで確認できる。

```
$ sudo -u jenkins cat /var/lib/jenkins/.ssh/id_rsa.pub
```
![SSH-and-GPG-keys-1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/654acc72-251a-7042-4e2a-1f76fa4a0929.png)

GitHubの認証が通るかテストする

```
$ sudo -u jenkins ssh -T git@github.com
```

以下のように表示されれば成功。

```
Hi mokuo-bot! You've successfully authenticated, but GitHub does not provide shell access.
```

## botアカウントに、リポジトリへのアクセス権限を与える

GitHubのリポジトリのページから、Setting > Collaborators で
botアカウントをCollaboratorsに追加する。

![Comparing-master...-3-%B7-mokuo-mokumoku_library-282x132.png](https://qiita-image-store.s3.amazonaws.com/0/102964/4638be53-0fc9-282b-7ea5-4fffa1ec3e4f.png)

## Jenkinsプラグインのインストール

Jenkinsの管理 > プラグインの管理 > 利用可能タブ から、

* Rake plugin
* rbenv plugin
* GitHub pull request builder

にチェックをして、「再起動せずにインストール」をクリック。

![アップデートセンター-Jenkins-1-1-1024x479.png](https://qiita-image-store.s3.amazonaws.com/0/102964/b0874071-5e63-6ef3-3449-eea84bfd826c.png)