2012-02-01
Heroku上でJenkinsを動かす
@kiy0taka @ikikko お聞きしたいのですが、herokuでjenkinsは動きますか?調べてたら、きよたかさんの昔のツイートで、それっぽいものがあったので。
2012-02-01 13:09:08 via Echofon to @ikikko
ということで、Heroku上でJenkinsを動かすための手順をメモしておきます。
普通にJenkinsのソースをGitHubから持ってきてHeroku上でビルドしても、OpenJDKのAPTのバグとか、Herokuのファイルサイズの上限とかで失敗してしまいます。なので、必要最低限のソースを使ってPOMをゴニョゴニョしてやれば、Heroku上でビルドできるようになります。
そんな訳で、できたものをGitHub上におきました。
https://github.com/kiy0taka/jenkins-for-heroku
これを使ってcedarスタックに上げてしまえば、とりあえず動きます。
# ビルドに少々時間がかかります。
$ git clone git://github.com/kiy0taka/jenkins-for-heroku.git $ cd jenkins-for-heroku $ heroku create --stack cedar $ git push heroku master
Herokuにデプロイしてからやること
- セキュリティの設定
パブリックなところにJenkinsを置く場合は、必ずセキュリティを有効にしておきましょう。
元にしたJenkinsのソースは1.428で、最新版ではいくつかセキュリティの問題なんかも対応されています。また、Heroku上でビルドするためにデフォルトで入っているプラグインとかも外しているので、このままではあまり役に立ちません。「Jenkinsの管理」から自動でバージョンアップを選んで最新版に置き換えましょう。
- ポーリングするJobを作る
Herokuにデプロイしたアプリケーションはアクセスがないと止まってしまい、アクセスがあると再度、別のインスタンスにデプロイされるようです。再デプロイされたときにJENKINS_HOMEは消えてしまっています。適当なJobを作って、シェルの実行で「curl http://xxxxx.herokuapp.com/」とかして、1時間*1おきぐらいに実行するようにしておけばいいと思います。
その他
Maven Integrationプラグインとかを使ってビルドすると失敗するので、Mavenプロジェクトをビルドするときは「シェルの実行」で、mvnコマンドを叩くようにするといいかと思います。あとは、Safe RestartとかTerminalとかのプラグインを入れておくと何かと捗るかと思います。
まとめ
HerokuでJenkins使うより、CloudBees使った方が幸せになれると思う。
*1:多分、1時間で行けると思います。
2011-12-06
Jenkins X'mas プラグイン
Jenkins | |
Jenkins Advent Calendar jp 2011の6日目です。
ネタがあまりないので、私が好きなJenkinsの機能のひとつであるツールの自動インストールの概要と実装方法について書こうと思っていました。しかし、そういうネタは望まれていないようですね。
Dependency Graph View Plugin について - cactusman日誌 (id:cactusman / @cactusman) URL
@cactusman ちょっ、ハードル上げるな!
@kiy0taka wktk
2011-12-05 22:49:01 via YoruFukurou to @kiy0taka
@kiy0taka 僕達の期待を裏切らない!
そんなわわけで、X'masプラグインという素敵なプラグインを作りました。

アップデートセンターには出てこないので、下記のリンクからダウンロードして、手動でインストールして下さい。よく分からない人はJenkins実践入門の100ページから書いてある「手動でプラグインをインストールする場合」を見ながらやって下さい。
インストールしましたか?まだの方はインストールしてから続きを読んでください。
何をするプラグインか?
このプラグインを入れるとすべてのビルドが失敗します。特に本来、成功であるべきジョブでは「爆発しろ!」というログとともにビルドが失敗します。このプラグインを入れて再起動した時点ですべてのジョブが失敗するようになります。JenkinsのInitializerの仕組みを使って実装しています。要するにこのプラグインをインストールすることでクリスマスを中止にすることができます。

爆発しない方法
すべてのジョブの設定画面のビルド環境の箇所に「X'mas」というのがあってデフォルトでチェックが入っています。

これを外すと爆発しないように見えますが、チェックを外しても保存のタイミングで有効にされてしまいます。これはJobConfigHistoryプラグインなんかと同じSaveableListenerを使っています。この仕組のおかげで新しく作るジョブもすべて失敗します。
爆発しない方法 その2
爆発しない裏技として、次のようなブックマークレットを使うとジョブの設定画面に「Force fail」というチェックボックスが出てきます。
javascript:(function(){document.getElementById('xmas-force').parentNode.parentNode.style.display='block'})()

このチェックを外すと、とりあえず爆発しなくなります。このチェックは保存時に有効化されることもありません。でもどういう動きをするかはソースを見ておいてください。
最後に
期待に答えられたかどうかはともかく、@cactusman、@yusukey、@ikeike443、爆発しろ!ついでにビルド職人本にヒドイこと書いた@masanobuimaiも爆発しろ!
追記
第2回大阪Jenkins勉強会やりますよ!
追記 2
hpiファイルをアップするのを忘れてました。こちらからどうぞ。(川口さんのPullリクエストを取り込んだものです。)
masanobuimai
2011/12/06 08:07
さすが!俺たちのkiy0takaさんや!!(゜∀゜)キタコレ!!
2011-12-05
Spockでデータドリブンなテスト
Spock | |
G* Advent Calendar 2011 5日目です。
本当は、GradleとGebとSpockでSIerの大好物な画面キャプチャを貼りつけたExcelを出力しようとしたんですが、なぜか出力される画像ファイルのファイル名が文字化けする現象にハマってしまったので、Spock小ネタで勘弁して下さい。Excelネタは別エントリか誰かがやってくれると思います。
で、Spockでデータドリブンなテストですが、データドリブンなテストとはJUnitで「@RunWith(Parameterized.class)」ってやるアレです。JUnitのやり方だとかなり面倒なのですが、Spockだと簡潔に書けます。例としてSpockのトップページにも載ってるサンプルです。
# おそらく一番有名なSpockコードですね。
import spock.lang.* class HelloSpock extends Specification { def "length of Spock's and his friends' names"() { expect: name.size() == length where: name | length "Spock" | 5 "Kirk" | 4 "Scotty" | 6 } }
これでJUnitのParameterizedと同じようなことができますが、異なる点があります。whereラベルで定義されているデータセットの数だけテストが実行されますが、テスト結果は1つにまとめられてしまいます。

これはこれで嬉しかったり、嫌だったりします。テストによってはデータごとにレポートが欲しかったり、欲しくなかったりします。
で、Spockには@Unrollというアノテーションがあってこれを使うとJUnitのようにデータセットの数だけテスト結果も出せるようになります。
import spock.lang.* class HelloSpock extends Specification { @Unroll def "length of Spock's and his friends' names"() { ... } }
結果

これでJUnitと同じようになりましたが、JUnitと同じように「テストメソッド名 + [インデックス]」という残念なテスト名でレポートされます。
@Unrollアノテーションにはもっと便利な使い方があって、クロージャを使ってテスト名を指定できます。
# 以前は文字列だけで良かった気がしたけど。
import spock.lang.* class HelloSpock extends Specification { @Unroll({"$name の長さは $length"}) def "length of Spock's and his friends' names"() { ... } }
結果

これで、良い感じになりましたね!そんなわけで、次は @literalice さん!
2011-11-09
Jenkins実践入門いただきました。
Jenkins | |
ありがとうございます!
実践入門というだけあって、インストールからSeleniumを使った結合テストのやり方までを丁寧に説明してくれています。スクリーンショットもたくさんあって、勉強会なんかでは端折ってしまいそうなところまでわかりやすく解説があるのでJenkinsを使っていない/知らない人にはオススメです。あと、Java開発者なら読んでおいて損はないと思います。
# スクリーンショットが多いのでページ数の割にすぐに読めると思います。
単純に使い方や手順を紹介しているだけでなく、なぜそうするのかということも説明があったり、要所要所でおすすめプラグインが紹介されているので、JenkinsとCIに対する理解が一層深まるのではと思います。サンプルコードもサイトからダウンロードできるので、手を動かしながら理解できると思います。
入門本なので、少し物足りないという方にはプラグインの開発方法も軽く触れられているのでそこを読みながら、プラグインを触ってみるといいかもしれません。
リリース間際に慌てないためには、ビルド職人を雇うか、この本を1冊プロジェクトに置いておくことをお勧めします。
2011-08-16
大阪でもJenkins勉強会を開催します!
Jenkins | |
前からやりたいと思ったけどなかなか行動に移せずにいたら、RxTstudy勉強会で@yohhatuさん に催促されて がお手伝いしてくれると言ってくれたので開催できることになりました!
日時 : 2011/09/22 19:00 to 21:00
定員 : 48 人
まさかの川口さんまでビデオで参戦!
@kiy0taka Jenkins 大阪勉強会のLTにビデオで発表ってできないですかね。前もって録画したやつをお送りしておいて再生していただく、みたいな感じで。面倒すぎますか?
2011-08-14 03:15:57 via web to @kiy0taka
まだ若干の空きがありますので、まだ申し込みされていな方はぜひご参加ください!
懇親会もありますので、懇親会のみの参加も可能です。
通常発表とLTの参加者募集中です!

