blog4j 2.0 このページをアンテナに追加 RSSフィード

2012-02-01

Heroku上でJenkinsを動かす

| 16:11 | Heroku上でJenkinsを動かすを含むブックマーク

ということで、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とかのプラグインを入れておくと何かと捗るかと思います。


まとめ

*1:多分、1時間で行けると思います。

トラックバック - http://d.hatena.ne.jp/kiy0taka/20120201

2011-12-06

Jenkins X'mas プラグイン

| 05:26 | Jenkins X'mas プラグインを含むブックマーク

Jenkins Advent Calendar jp 2011の6日目です。

ネタがあまりないので、私が好きなJenkinsの機能のひとつであるツールの自動インストールの概要と実装方法について書こうと思っていました。しかし、そういうネタは望まれていないようですね。

そんなわわけで、X'masプラグインという素敵なプラグインを作りました。


インストール

アップデートセンターには出てこないので、下記のリンクからダウンロードして、手動でインストールして下さい。よく分からない人はJenkins実践入門の100ページから書いてある「手動でプラグインインストールする場合」を見ながらやって下さい。

インストールしましたか?まだの方はインストールしてから続きを読んでください。


何をするプラグインか?

このプラグインを入れるとすべてのビルドが失敗します。特に本来、成功であるべきジョブでは「爆発しろ!」というログとともにビルドが失敗します。このプラグインを入れて再起動した時点ですべてのジョブが失敗するようになります。JenkinsInitializerの仕組みを使って実装しています。要するにこのプラグインインストールすることでクリスマスを中止にすることができます。

爆発しない方法

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

これを外すと爆発しないように見えますが、チェックを外しても保存のタイミングで有効にされてしまいます。これはJobConfigHistoryプラグインなんかと同じSaveableListenerを使っています。この仕組のおかげで新しく作るジョブもすべて失敗します。


爆発しない方法 その2

爆発しない裏技として、次のようなブックマークレットを使うとジョブの設定画面に「Force fail」というチェックボックスが出てきます。

javascript:(function(){document.getElementById('xmas-force').parentNode.parentNode.style.display='block'})()

このチェックを外すと、とりあえず爆発しなくなります。このチェックは保存時に有効化されることもありません。でもどういう動きをするかはソースを見ておいてください。

kiy0taka/xmas-plugin - GitHub


最後に

期待に答えられたかどうかはともかく、@cactusman、@yusukey、@ikeike443、爆発しろ!ついでにビルド職人本にヒドイこと書いた@masanobuimaiも爆発しろ!


追記

第2回大阪Jenkins勉強会やりますよ!

第2回大阪Jenkins勉強会 : ATND


追記 2

hpiファイルをアップするのを忘れてました。こちらからどうぞ。(川口さんのPullリクエストを取り込んだものです。)

masanobuimaimasanobuimai 2011/12/06 08:07 さすが!俺たちのkiy0takaさんや!!(゜∀゜)キタコレ!!

2011-12-05

Spockでデータドリブンなテスト

| 23:49 | 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実践入門いただきました。

| 22:23 | Jenkins実践入門いただきました。を含むブックマーク

ありがとうございます!

実践入門というだけあって、インストールからSeleniumを使った結合テストのやり方までを丁寧に説明してくれています。スクリーンショットもたくさんあって、勉強会なんかでは端折ってしまいそうなところまでわかりやすく解説があるのでJenkinsを使っていない/知らない人にはオススメです。あと、Java開発者なら読んでおいて損はないと思います。

# スクリーンショットが多いのでページ数の割にすぐに読めると思います。

単純に使い方や手順を紹介しているだけでなく、なぜそうするのかということも説明があったり、要所要所でおすすめプラグインが紹介されているので、JenkinsCIに対する理解が一層深まるのではと思います。サンプルコードもサイトからダウンロードできるので、手を動かしながら理解できると思います。

入門本なので、少し物足りないという方にはプラグインの開発方法も軽く触れられているのでそこを読みながら、プラグインを触ってみるといいかもしれません。

リリース間際に慌てないためには、ビルド職人を雇うか、この本を1冊プロジェクトに置いておくことをお勧めします。

2011-08-16

大阪でもJenkins勉強会を開催します!

| 22:51 | 大阪でもJenkins勉強会を開催します!を含むブックマーク

前からやりたいと思ったけどなかなか行動に移せずにいたら、RxTstudy勉強会で@さん に催促されて がお手伝いしてくれると言ってくれたので開催できることになりました!

第1回大阪Jenkins勉強会 : ATND

日時 : 2011/09/22 19:00 to 21:00

定員 : 48 人

会場 : TIS株式会社(19Fセミナールーム3) (大阪府吹田市豊津町9-1 パシフィックマークス江坂)


まさかの川口さんまでビデオで参戦!


まだ若干の空きがありますので、まだ申し込みされていな方はぜひご参加ください!

懇親会もありますので、懇親会のみの参加も可能です。

第1回大阪Jenkins勉強会 : ATND

第1回大阪Jenkins勉強会の懇親会 : ATND


通常発表とLTの参加者募集中です!

Jenkinsに絡んでいれば何でも結構ですので、希望される方は、@までご連絡ください。

トラックバック - http://d.hatena.ne.jp/kiy0taka/20110816