さくらのVPS+Jenkins+github+rails3
さくらのVPS(CentOS6.3)にはすでにJenkinsとrbenvでruby1.9.3と公開鍵とかの設定ができているので、ここからこれらを繋げる。
ちなみにnginxも入っていて、nginx->jenkinsという流れで繋がるようになっていた。いつやったんだ。
rbenvとかはここでやったんだろうな。
これで動いた!さくらのVPS+github+capistranoでrailsアプリ自動デプロイの設定ファイルを置いておく
あとはいつやったんだっけ・・・。とにかくJenkinsもrbenvもどれも記憶にもないのでその辺は簡単なんだと思う。
で、要はgithubのプライベートリポジトリで管理されている
の2つをさくらのVPSで動かしているJenkinsで継続的なんちゃらをしようということで。
Jenkinsのアップデート
Jenkins ver. 1.493だったんだけど1.496がでてたからアップデートすることにした。つーか、すごくこまめにアップデートがでてるのね。。
http://jenkins-ci.org/changelog
だからかわかんないけど、*nixな環境で"java -jar jenkins.war"で走らせてる人はJenkinsの管理画面から自動アップデートができるらしい。
その他の人はここらへんで確認を。
https://wiki.jenkins-ci.org/display/JENKINS/Automated+Upgrade
で、/manageに行くとダウンロードリンクがでてるのでクリックするとローカルにダウンロードされる。へ?
よくしらべると、本当は「Upgradeボタン」的なものが表示されるらしい。権限の問題かと思ったけど、フルパーミッションのユーザーだったしよくわからん。
しゃーないので手動でjenkins.war落としてきて入れ替えた。
ぼくの環境だと/var/log/jenkins直下にjenkins.warはあったので、ここのやつを最新のと取り替えて再起動したった。
うん。特に問題ない。
ちなみに現状(デフォルトで)インストールされていたプラグインは以下の11個
- Jenkins Mailer Plugin
- External Monitor Job Type Plugin
- LDAP Plugin
- pam-auth
- javadoc
- ant
- Jenkins CVS Plug-in
- Jenkins Translation Assistance plugin
- Maven Integration plugin
- Jenkins SSH Slaves plugin
- Jenkins Subversion Plug-in
なんかアンインストールできないっぽいからCVSとか要らないもんもたくさんあるけど放っておく。
とりあえずgithub+railsをやってみる。
事例が多そうだったから。
ゴールはgithubにpushしたらJenkinsがpullってきてrspecで書いたテストを走らせて結果をボクチンに通知する。という流れ。
ここを参考にすることにした。
http://nepalonrails.com/post/14217655627/set-up-jenkins-ci-on-ubuntu-for-painless-rails3-app-ci
プラグインのインストール
Jenkins氏が最新になったところで必要なプラグインを入れていく。
えーと調べたところ、以下のプラグインが必要になるよう。
上2つは公開鍵認証用のSSHキーがらみので、下2つはGitとgithubのらしい。
で、この4つをManage Pluginsページで選択してインストールしたら、勝手に別のやつも2つほど入ったみたいだった。
紛れがあると嫌なので"install without restart"的なのもあったが、インストールごとに再起動しておいた。
プロジェクトの作成
とりあえずNew Jobからfree-style software projectを作っておく。名前はgithubのプロジェクト名と同じにした。
作り終わると、設定画面に連れて行かれるが離脱。
ユーザーの作成
Configure Global Securityに行って
- "Jenkins's own user database" をチェック
- "Allow users to sign up" をチェック
- "Authorization"の"Project-based Matrix Authorization Strategy"を選択
- "admin"と"github"の2つのユーザーを作る
- 管理権限でのアクセスは"admin"というユーザー名じゃないといけないらしい。
- "admin"ユーザーにはすべての権限を付ける
- "github"ユーザーにはOverallのReadのみ付ける
と、どういうわけか、ここで追加した"admin"と"github"ユーザーはまだ実際には作られておらず、別途追加しなければいけないっていう。まぁ、確かにパスワードとか入れてないけど。
というわけで、Manage Usersからユーザーを追加する。メールアドレスが必須になっているけど、同じものが使えるから問題ない。
最後に作った2つのユーザーをプロジェクトに追加する。
プロジェクトのConfigureから。
- "Enable project-based security" にチェック
- Source Code ManagementのGitをチェック
- Repository URLに "git@github.com:
/ .git" を記入
- Repository URLに "git@github.com:
- Build TriggersのBuild when a change is pushed to GitHub にチェック
で、セーブ。
SSH key
鍵を作る。手元の環境がjenkinsユーザーにシェルが設定されておらず、設定がめんどくさかったので大部分をrootで代行した。
cd /var/lib/jenkins/ mkdir .ssh chmod 700 .ssh/ chown jenkins:jenkins .ssh/ cd .ssh/ ssh-keygen -t rsa chown jenkins:jenkins *
で、これでできたid_rsa.pubの中身をgithubのプロジェクトの"Settings"タブにあるDeploy Keysに設定する。上記の手順だとrootで作っているのでid_rsa.pubの中身にrootというのがあったのでこれをjenkinsにしておいた。意味があるかどうかは調べてないけどなんとなく。
で、再度Jenkinsサーバに戻って
cd /var/lib/jenkins/ sudo -u jenkins git clone git@github.com:<user name>/<repo name>.git
でclone成功。
Hookの設定
今度はまたgithubに行って、さっき行ったばかりのプロジェクトのSettingsに行って、Service Hooks > WebHook URLsから以下のURLを追加する。
github:githubがさっきJenkinsで追加したgithubユーザーとパスワードらしい。
ってかここの一覧見てたら"Jenkins(GitHub plugin)"とかいうのあったから、これでもいいんじゃね?まぁいいや。
次はJenkinsに行ってManage Jenkins > Configure System の下のほうにいくと"GitHub Web Hook"というのがあってオートとマニュアルがあるのでオートのほうで
ユーザー名とパスワードを入れる。入れて"Test Credential"ボタンを押してVerifiedって出たらOK。
rspecを走らせる設定
ここでとりあえずCentOS上のjenkinsユーザーにログインシェルを設定してログインできるようにし、rbenvとか入れてjenkinsユーザーでrspecを走らせられる環境を作ることにした。
手動でrspecが走るようになったら
プロジェクト > Configure > BuildのExecute Shellのところに
source /var/lib/jenkins/.bashrc cd /var/lib/jenkins/workspace/project_name/ bundle exec rake db:migrate bundle exec rake db:test:prepare bundle exec rspec spec/
こんな感じで。
とりあえず、JenkinsのプロジェクトページからBuild Nowしてみる。。。コケた。
あー。鍵にパスフレーズ設定しちゃったからかな・・・。そらそうだよな。。。
パスフレーズなしにしてリトライ。。。うまくいった。っぽい。
うん。とりあえずうまくいったよう。
最初に設定したゴールだと、通知がくるようにすれば終わりだけど、もう疲れたので今回はこれで終わり。