Jenkins
・Jenkinsをインストールする(下記参照)
Jenkins を CentOS 6.3 にインストール - 俺の成長日記
# 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
・これによりRH系のLinuxのサービスのごとく # service start jenkins というオペレーションが可能になる
SSL対応
・HTTPで通信すると、パケットキャプチャとかすれば丸見えなのでHTTPSで通信するように環境を修正
これも、先ほどの記事を参考に /etc/httpd/conf.d/**.conf を作成すればよい。
・もちろんその前にhttpdとmod_sslをyumでインストールしておく
・加えて、Proxy のエラー - 作業日記を参考に、設定を追加するとよい
GitHubアカウントとJenkinsアカウントの連携
・銀天すばるさんの記事が参考になった
Jenkins with GitHub OAuth Plugin のセットアップ手順 - 野良C++erの雑記帳
紹介されているGithub OAuth Pluginを使えばGitHubアカウントでJenkinsにログインできる
・プラグインのインストールからGithub OAuth Pluginをインストールして、Jenkinsの設定をちょっと変えるだけです
・あと、これはやっておく(あとで使うから)
GitHub Plugin の Web-hook 機能を使う場合には, Github Commiter Authorization Strategy で
「Grant READ permissions for /github-webhook」をチェックする良いです.
Jenkinsのジョブを作成
・ここからが難しいがだいたい下記のサイトを参考にすれば実現できる
Trigger Jenkins builds by pushing to Github | Four Kitchens
概要を述べると以下のとおり(上記サイトに書いてないこともあるが…)
・ソースコード管理の欄にあるGitのリポジトリ指定「Repository URL」は「git@github.com:${User}/${Repository}.git」の形式で指定
・そのためにはJenkinsのアカウントでssh-keygenして公開鍵をGitHubに設定する必要がある
・設定した公開鍵情報はソースコード管理の「Credentials」に設定する → エラーが出なければOK
このへんのGitHubの公開鍵設定方法は下記のサイトが詳しい
How to use GitHub (and Bitbucket)
Jenkinsのシステム設定
・Jenkinsの位置には「https://xxx.yyy.zzz.vvv/jenkins/」を設定
・GitHub Web Hookは「Manually manage hook URLs」を設定しておく
GitHubにpushした際にビルドとデプロイを実施
・自分が作成したリポジトリのSettingsからService Hooks→Jenkins(GitHub Plugin)を選ぶ
→ 対象のURLを設定「https://xxx.yyy.zzz.vvv/jenkins/github-webhook/」
→ Activeにして設定
→ Test Hook!
問題解析
・ここまでで壁にぶち当たったら以下を参照すると良い
・Jenkinsのシステムログ … 例外が発生していれば、そこから原因がわかる
・/var/log/httpd 以下のログ … 先ほどのHookはHTTP POSTでCIサーバに通信が走る。うまくいけば200 OK。
Jenkinsのジョブ起動と同時にRuby on Rails起動
これがやりたいがためにちょっとしたシェルスクリプトを書いた
ps aux | grep 'rails' | grep -v grep | awk {'print $2'} | xargs -I{} sh -c "sudo kill -INT '{}'" cd ${WORKSPACE} sudo -u app GEM_HOME=/home/app/.gem PATH=$GEM_HOME/bin:$GEM_HOME/gems:$PATH ./script/rails server -e production -d
まとめ
・ここまで紹介した記事で以下のことが可能になる
・https://xxx.xxx.xxx.xxx/jenkinsの形式のURLでJenkinsに接続可能
・GitHubアカウントでJenkinsにログイン可能
・pushしたと同時にビルド&デプロイ*2