Unselected Kid Blog

プログラミングを中心に好きなことを好きなように書くブログ

Jenkins で Ruby on Rails をデプロイ

今回目指す形

Github のmasterブランチにプッシュされた場合にRailsのデプロイと再起動を行う.

Jenkins をインストール

インストールは yum でおk

yum -y install java-1.7.0-openjdk
yum install -y java-1.8.0-openjdk-devel
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins

Jenkins と Githubの連携

GitHub plugin のインストール

Jenkinsの管理からプラグインの管理にてインストール(ついでに必要となる ruby, rake, rbenv もインストールしておく)

GitHub側の設定

SSH keyの登録

サーバでSSH keyを作成する.(以下はjenkinsユーザにて行う)

ssh-keygen

ssh configを設定しておく

Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/id_git_rsa #ここに自分の鍵のファイル名
  User git

公開鍵を GitHub の設定より設定しておきます.

GtiHubをHookするJenkinsのジョブ設定

「Settings」=> 「Server Hooks」=>「 Jenkins (Github plugin)」で「Jenkins Url」に[JenkinsのURL]/github-webhookを設定する.

Jenkinsの起動とジョブの作成

service jenkins start

localhost:8080 で起動するので Nginxで80portに設定する.
接続するとパスワードを求められるので以下のファイルからコピーする.

cat /var/lib/jenkins/secrets/initialAdminPassword

接続できたらジョブを作成から フリースタイル・プロジェクトのビルド を選択する.
ソースコード管理はGitを選択しプロジェクトURLを設定する.(master以外のブランチも選択可能)
ビルド・トリガには GitHub hook trigger for GITScm polling を選択しておく.
ビルド環境では,rbenv build wrapperを選択し Preinstall gem list にて bundler,rake を行う.
ビルドは,シェルを選択し以下のように設定する.

cd /var/www/dev-sample/
git pull 
bundle install
rails db:migrate
ps aux | grep unicorn | grep -v grep | awk '{ print "kill -9", $2 }' | sh
bundle exec unicorn_rails -c config/unicorn.rb -E production -D

これでmasterブランチにプッシュされれば自動でデプロイが行われる.