※2016年10月に別のブログで書いたものを移行した記事になります。
Railsの開発環境を整える① - Qiita
Railsの開発環境を整える② - Qiita
に続いて、CI(継続的インテグレーション)を導入して、ベスト・プラクティスの完成です。
CIツールには、Jenkinsを使います。
今回は、AWSで動かしたいと思います。
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/にアクセス
初回のみ、以下の画面が表示される。指定されたパスに書いてあるパスワードをコピペする。
$ sudo -u jenkins cat /var/lib/jenkins/.ssh/id_rsa.pub
インストールが実行される。
ユーザー名などを入力
Jenkinsのトップページが表示された。
参考サイト
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」をクリックする。
名前は適当なものを入力し、
id_rsa.pubの中身をコピペして、「Add SSH key」をクリックする。
id_rsa.pubはcatコマンドで確認できる。
$ sudo -u jenkins cat /var/lib/jenkins/.ssh/id_rsa.pub
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に追加する。
Jenkinsプラグインのインストール
Jenkinsの管理 > プラグインの管理 > 利用可能タブ から、
- Rake plugin
- rbenv plugin
- GitHub pull request builder
にチェックをして、「再起動せずにインストール」をクリック。