ついにねんがんのJenkins実践入門を献本してもらったぞ
@lino_sさんをはじめとした著者の方々、@dentomoさん含め技術評論社の方々、お疲れさまでした&ありがとうございます。「献本ほしいなう」としつこくつぶやいて、スミマセンでした><
献本していただけると聞いたときから、はじめての「献本」で慌てないために覚えておくといいかもしれないこと : ゼロスタートの広報ブログを見ながら、今か今かとお待ちしてましたよw
ざっと目を通して思った感想です。週末にでもまたちゃんと読み込んでみます。
Jenkinsをこれから導入する人に
説明用のスクリーンショットが多く、分かりやすいです。とりあえず8章あたりまで本書通りに進めれば、基本的な使い方はマスターしているでしょう。
Jenkinsのはじめの一歩的なものとして、同じく技評さんのサイトで掲載されている特集:Hudsonを使ったアジャイルな開発入門|gihyo.jp … 技術評論社があります。大枠は変わってないとは言え、3年前に書かれたものでちょっと古いので、時間を節約したい方はこの本を買って読み進めることをオヌヌメします*1。
Jenkinsをすでに導入していて、よりよい使い方を模索している人に
9章以降はちょっと高度な説明がされています。ここ読んでおけば、Jenkinsレベルが何段階か上がるかと思います。忘れがちだけど実際には避けることができない運用周りの話も、ちゃんと説明されているのがいいですね。
そういや、Reverse Proxy Auth Pluginはこんな感じで使えるんですね。以前ユーザ認証周りを検討していたときに、ちょうど出てきたばかりということもあってこれはスルーしてて、代わりにScript Security Realmを使って独自の認証処理を組み込んだんですよね。これはこれで、柔軟性が高くて便利なのが分かったのがよかったですが。
あと、これは本には直接は関係しないのですが、ここ最近でJenkins関連でイイねと思った発言を取り上げてみました。実際にJenkinsを使ってる方の感想なので、重みがありますね。
Jenkinsを使って非常に良かった点。Cronジョブの置き換えがメインだけど、ジョブの実行スクリプトだけに専念できた。Cronは、意外と処理の失敗に気が付きにくい。面倒な結果レポートやメール送信のスクリプトまで書かないといけない。この負担が凄く軽減された。#jenkinsci
@akiko_pusu 自分は警告やテストの失敗に対する意識がずいぶん変わったなーと思います。あと自分だけじゃなくてメンバーに『(間違ってるって)怒られてるよ』と言う言い方がしやすくなった。機械なので言いやすいっす。
2011-11-04 09:22:03 via Echofon to @akiko_pusu
「自動化までにかけるコスト」と「実際にそれを使う時間」でのみ自動化のROIを語る人がいるけど、実際はそうじゃない。手動で淡々と同じような作業とか、すごく気をつかう作業をするっていうのは人の生産性を下げる。そこまで鑑みて自動化を考えるべき。
本気か冗談か不明ですがJenkins実践入門を読むとデスマーチがなくなりますか?と聞かれました。今日のソフトウェア開発で銀の弾丸なんてものは存在しません。本を書いて、あれですがツールは所詮ツールで、結局は使う人次第、Jenkinsとともに継続的カイゼンをすることが重要だと思います
2011-11-08 20:44:54 via web
最後に超蛇足。
バグ管理システムとの連携もこの本の中で触れられていますが、とりあげられているのがTrac/Redmine/JIRAの3つで、僕がメンテしているBacklog Pluginが入っていないです。悲しいです>< ちゃんと要望も聞いてアクティブにメンテしてるので、Backlog+Jenkins環境の方はぜひ検討してみて何かあればコンタクトください。
以上、宣伝でした。
*1:3年前の結婚記念日で宿泊したホテルで、このサイトを見ながらHudsonを学んだのはいい思い出ですw
ビルドツールのEclipseプラグインを試してみたよ
Wiiを買ったはいいものの、付属のソフト以外何も買ってなくてあっさり飽きたので新しいソフトを探していたら、「JUST DANCE Wii」というなかなか面白そうなものが見つかったのでさっそくAmazonで予約しつつも、手元に届くまでYouTubeを見ながらヘビーローテーションの振り付けを覚えようとしているikikkoです、こんにちは。
概要
今回は、ビルドツールのEclipseプラグインをそれぞれ試してみました。機能紹介と簡単な感想付きで買いてみます。取り上げたのは、以下の4つ。
- M2E (Maven)
- IvyDE (Ivy)
- Gradle Plugin (Gradle)
- Gradle STS Support (Gradle)
M2E
開発元
- http://www.eclipse.org/m2e/
- Sonatype -> Eclipse
- MarketPlace 対応
感想
もともとSonatypeでM2Eclipseとして開発されていたのですが、Eclipse 3.7からM2EとしてEclipseにプロジェクトが移りました。が、移ったあとの方が前よりしょぼくなってる気が。リポジトリやプロファイルの設定など、Advanced Tabsでできてたことが軒並みできなくなってます。最悪、XMLを直接編集すればいいのですが、それだとプラグインを使う意味があまりないですしね。。。
Dependency Hierarchyで、落とされてきたJarがどのアーティファクトに紐付けられているかが分かるので、これは相変わらずいいですね。あとは、追加されたDependencyを自動検知して、Eclipseのビルドパスに反映してくれるやつ。
Maven側でもmaven-eclipse-pluginがあるのですが、こちらだとpom.xmlの更新を自動検知してくれる機能はありません。なので、dependencyなどを修正した場合は再度maven-eclipse-plugin(mvn eclipse:clean eclipse:eclipse)を叩く必要があります。
両方を使った感じ、maven-eclipse-pluginの方が安定してそう。その場合でもPOMエディタとして使えるので、M2Eを入れておいて損はないかと思います。
あと、Jenkinsの開発時(や、↓の例だとSpring Dataのチュートリアル時でも)にエラーが出ることがあります。あまり細かくは追っていませんが、M2Eでのmaven lifecycleの扱いが以前と変わっているみたいです。下記リンクを参考に。
Gradle Plugin
開発元
機能
- Runコマンドからタスク実行
Gradle STS Support
開発元
- http://static.springsource.org/sts/docs/latest/reference/html/gradle/
- SpringSource
- STSのDashboradからインストール可能
機能
- マルチプロジェクトのサポート
- インポートウィザード
- プロジェクトの依存性管理とEclipseビルドパスへの反映
- Runコマンドからタスク実行
感想
上のGradle Pluginよりは将来性がありそう。SpringSourceが開発しているということもありますし。ただ、STSと切り離してインストールできるようになると嬉しいな。今はSTSの上でしか動きません、多分*1。
機能的には、マルチプロジェクトをちゃんと動的に読み込んでくれるなど、なかなかの高機能。そのかわり、build.gradleの補完などはないので、別途入れたgroovy eclipse pluginの方に任せる感じかな。build.gradleをGroovyファイルとして読み込めば、Gradle独特の機能は無理にしろ、Groovyとしての補完は有効になるので。
ちなみに、チュートリアルではSpring Integrationのプロジェクトを使っていますが、サイト内に記載されているリポジトリパスが違っていますので注意を。
git clone --recursive git://git.springsource.org/spring-integration/spring-integration.git
ではなくて、正しくは
git clone --recursive git://github.com/SpringSource/spring-integration.git
です。
CodeMirrorでショートカットキーを追加する、あるいはJenkins Coreへの初めてのコミット
ブログの出落ちが好評との噂ですが、そのプレッシャーゆえにネタ探しに疲れてきているikikkoです、こんばんは。
今回、CodeMirrorをちょっと触ったので、自分の理解がてら触った範囲をまとめてみます。
概要
CodeMirrorというJSのライブラリをご存知でしょうか。テキストエリアをシンタックスハイライト可能な要素に変えてくれるライブラリです。ハイライト可能な言語はC, JavaやRuby/PythonからHTML/CSS/JavaScriptなど、幅広く対応しています。
原理的には、↓な感じ。用意されたテキストエリアをCodeMirrorが提供するシンタックスハイライト付きのIFrameに置き換えます。元のテキストエリアはdisplay:noneにして非表示に。ユーザはIFrameに対してテキストを編集していき、submit時に元のテキストエリアに戻すという仕組みになっています。
一番単純な使い方はこのような感じ。シンタックスハイライトさせたいテキストエリアの要素をわたしてやります。
CodeMirror.fromTextArea(document.getElementById("textarea"),{ mode:"text/x-java", }
拡張:ショートカットキーの追加
他のライブラリ同様、CodeMirrorではいくつかの設定によって拡張することができます。対応言語なども増やすことができるのですが、ここでやったのはキーイベントを取得して特定の動作を行う、いわゆるキーボードショートカットを追加してみました。具体的には、Windows/LinuxではCtrl+Enter、MacではCommand+Enterでサブミットを行うというもの。
CodeMirrorでキーイベントを取得するには、onKeyEvent()をCodeMirror生成時のオプションで指定します。これでkeydown/keyup/keypressイベントを取得することができます。なお、戻り値にtrueを返すことによって、後続のイベントを全部キャンセルすることができます。サブミット後にはイベントは基本なくてもいいはずなので、trueを指定することになります。
CodeMirror.fromTextArea(document.getElementById("textarea"),{ mode:"text/x-java", onKeyEvent: function(editor, event){ console.log(event); ... return true; } }
で、あとはCtrl or Command+Enterにフックしてsubmitすればいいだけです。が、macのCommandはCtrlキーと違って、メタキーとしてキーイベントの取得ができません。仕方ないので、keydown/keyupにひっかけて、Commandキーが押されているかどうかを判定しました。
完成コードのJS部分を抜粋したものがこちら。
(function() { var cmdKeyDown = false; CodeMirror.fromTextArea(document.getElementById("textarea"),{ mode:"text/x-java", onKeyEvent: function(editor, event){ function isGeckoCommandKey() { return Prototype.Browser.Gecko && event.keyCode == 224 } function isOperaCommandKey() { return Prototype.Browser.Opera && event.keyCode == 17 } function isWebKitCommandKey() { return Prototype.Browser.WebKit && (event.keyCode == 91 || event.keyCode == 93) } function isCommandKey() { return isGeckoCommandKey() || isOperaCommandKey() || isWebKitCommandKey(); } function saveAndSubmit() { editor.save(); document.form1.submit(); event.stop(); } // Mac (Command + Enter) if (navigator.userAgent.indexOf('Mac') > -1) { if (event.type == 'keydown' && isCommandKey()) { cmdKeyDown = true; } if (event.type == 'keyup' && isCommandKey()) { cmdKeyDown = false; } if (cmdKeyDown && event.keyCode == Event.KEY_RETURN) { saveAndSubmit(); return true; } // Windows, Linux (Ctrl + Enter) } else { if (event.ctrlKey && event.keyCode == Event.KEY_RETURN) { saveAndSubmit(); return true; } } } }) })();
どこで使ってる?
Jenkinsのスクリプトコンソールで使ってます。いつの頃からか、Jenkins上のスクリプトコンソールはCodeMirrorが採用されていますが、このおかげでちょっと困ったことになっていました。具体的には、サブミットにマウスを使用しないといけなくなったということです。
http://twitter.com/#!/ikikko/status/90756645495382016:twitter:detail:left
http://twitter.com/#!/kohsukekawa/status/90815059693019136:twitter:detail:right
http://twitter.com/#!/ikikko/status/90816199021170688:twitter:detail:left
CodeMirror採用前は、TabキーでSubmitボタンに遷移することができ、そこでSpaceキーを押せばキーボードだけで操作することができました。しかし、CodeMirror採用後はTabキーはそのままTabが入力されるようになったため、このテクニックが使えなくなったのです。スクリプトコンソールは結構頻繁に使っていたため、コンソール上ので操作が結構面倒になりました。
シンタックスハイライトが導入されて感じたことをふと思い出して、ショートカットキーを実装してプルリクエストした次第です。この対応は、Ver 1.432 (2011/09/25) 以降に入っています。スクリプトコンソールを使う方は、頭の片隅にでも留めておいてもらえると、ちょっと楽になるかもですね。
ちなみに。
CodeMirrorのユーザマニュアル見ていると、自動補完などもできるみたい。簡単にできそうなら、これも対応してみようかな。簡単にできそうなら。。。
JenkinsステンシルをCacoo Storeに公開しました
先日、Cacoo Storeが公開されました。Cacoo Storeでは、ユーザが作成したステンシルを全世界に公開することができます。
というわけで、Jekinsステンシルを作って、下記のリンク先で公開してみました。といっても、jenkins-ci.orgにSVG形式でロゴが置いてあるので、まんまCacooにインポートしただけですが。
ロゴ自体はCreative Commonsでライセンスされているので、ライセンスを明記した上で利用(インポート)するのには問題ないと認識していますが、もし問題あったら連絡ください。誰となく。
Jenkinsステンシルを利用した図はこんな感じ。こちらも手抜きで、Cacooで用意されているネットワークのテンプレートを適用して、Jenkinsとねこび〜んのステンシルを追加しただけです。なんで、図の整合性は取れていませんのであしからず。ちなみに、ねこび〜んのステンシルはこちら。
資料をつくるときに製品のロゴを用いて説明することはよくやることですが、このロゴがなかなか扱いにくかったりするんですよね。大体各製品のWebサイトTopにある画像をそのままコピペするのですが、余計な背景まで入ったり透過画像になってなかったり、また大きくすると画像が粗くなったり。まじめにやるなら、コピーしてきた画像を綺麗に見える処理をしないといけないですよね。
ですが、CacooでJenkinsのロゴを使いたいときに限って言えば、こちらのステンシルをあらかじめ(無料で)購入しておけば、画像処理をせずにきれいなロゴがそのまま使えます。使いそうと思った方は、ぜひどうぞ!
1ユーザからしても、AWSステンシルのように各社・各製品ともステンシルを用意しておいてもらえると、非常に嬉しくなりますね。
そうそう、そのうち id:masanobuimai さんから、Emotional Jenkinsのステンシルが公開されるんじゃないかなー、チラッチラッ
ビルドツールエントリを見直してみて思ったことなどなど
ちょっと前に書いた
に関連して、はてブコメントへの反応とか、その他追加で考えたことについて。
IDE連携
どのIDEを用いるかの議論はあるにせよ、今どきJavaプロジェクトの開発で何もIDEを用いないのはさすがにしんどいかと思われます。ただ、IDEだけ用意すればいいわけでもありません。IDEとは独立してビルドツール・ビルドスクリプトも用意しておかないと、ビルドがIDE依存になってしまったりCIが回せなかったりと、色々不都合な面も出てきます。
ただ、IDEとビルドスクリプトを別途用意するのは意外と面倒なことも。単純に、IDEとビルドスクリプトを2セット揃えるのが手間ということもありますし、IDE(もしくはIDEプラグイン)でできることがビルドツールで同等の処理が実現できるかというとそうとも限りません。ビルドツールとIDEでコンパイラが違っているために、ビルド結果が異なることも。
そんなとき、Mavenではコンパイラを変更することができます。Eclipse用もありますし、これで初めて知ったJikesというやつもあります。果ては、Javaに限らずC#用のコンパイラも提供されているようです。
Using Non-Javac Compilers
- aspectj with artifactId plexus-compiler-aspectj.
- csharp with artifactId plexus-compiler-csharp.
- eclipse with artifactId plexus-compiler-eclipse.
- jikes with artifactId plexus-compiler-jikes.
上記で列挙されているもの以外でも、Groovy - Groovy-Eclipse compiler plugin for Mavenで提供されている「groovy-eclipse-compiler(Groovy-Eclipseプラグインで採用されているコンパイラ)」を用いたりすることもできます。
ビルドツールを支援するツール
XMLは手で書くのは大変だけどツールは作りやすい。DSLは記述を支援するだけならまだしも、それを読み込んでなにかしようというのを静的にやるのが超大変。てか無理。結局自前で解析するんじゃなくてランタイムを動かしてどうにかするのが一番手っ取り早い。
これはSBTの話ですが、概ねGradleにも同じことが言えるのではないかと。
ビルドツールの自由度が高いということは、ユーザにとってはいいことでしょうが、ビルドツールをサポートするようなツールを実装するのは厄介だということです。この視点はありませんでした。GradleのEclipseプラグインがいまいちな出来なのも、この辺に理由があるのかも*1。
Eclipseプラグインについては、Dosanko*SE:覚書を参考に。
*1:他のIDE × Gradleはちゃんと触ったことないので、今度見てみることにします
Groovy Eclipseを使う際にやっておいた方がいい設定
「Eclipseがいないと何にも書けないわけじゃないと〜♪」今日もまっきーを聞きながらEclipseを開いているikikkoです、こんばんは。まっきーいいですよね、まっきー。「どうしようもない僕に天使が降りてきた」とかも好きです、あの歌詞が。
@Ryuzee @ikikko インタフェースでDIをかけたけど、クラスのありかがわからない
2009-12-06 14:36:57 via web to @ryuzee
もうjavaなんて嫌いなんて言わないよ絶対
- アーティスト: 槇原敬之
- 出版社/メーカー: ダブリューイーエー・ジャパン
- 発売日: 1992/05/25
- メディア: CD
- クリック: 7回
- この商品を含むブログ (26件) を見る
普段は大体Javaメインで大体Eclipse上でコード書いているのですが、ちょこちょこやっているGroovyもEclipse上で触っています。で、EclipseにはGroovyプラグインであるGroovy - Eclipse Pluginがあるのですが、いくつかやっておいた方がいい設定があるので、簡単にご紹介。Groovy Eclipseのバージョンは、2.5.1です。
なお、あまりIDEを使ったことがない&こだわりがない人は、Groovyを書くならばIntelliJ IDEAをオススメします。
Groovy 1.8を指定する
- [Groovy > Compiler > Groovy Compiler settings]
最新入れたら、デフォルトでなってるかも。じゃなければ、SNAPSHOTのUpdate Siteから持ってくる必要があります。詳しくは、Compiler Switching within Groovy-Eclipse - Groovy - Codehausを参照してください。
ソースディレクトリ以外のGroovyファイルをコンパイルさせない
- [Groovy > Compiler > Groovy Script Folders]
(ConfigSlurper用の設定ファイル"config.groovy"などの).groovyファイルをsrc/main/resources以下に配置する場合にはこれが必要。設定しておかないと、勝手にコンパイルされてconfig.classとして扱われてしまって、Class#getResource('/config.groovy')が見つからずに失敗します。
ConfigSlurperについては、GroovyのConfigSlurperがめっちゃ便利 - No Programming, No Lifeが参考になります。
Jenkins Backlogプラグインをリリースしました(ユーザ認証対応)
結構長めの夏休みがあったにも関わらず、夏休み前に買ったiPhone版FFTでラムザを無駄に暗黒騎士にしてクリアしたり、子供が40℃弱の熱出してけどお盆真っ最中の日曜日で近くの病院どこもやってなくて救急病院に連れていったり、最近職場まで20Km近く自転車漕いでるけどブレーキの効きが悪くて結構心臓に悪かったりしてたので自転車の修理に行ってついでに自転車保険に入ってきたり、あーそろそろ次回のJenkins勉強会の告知とかせんといけんなーとか思いつつ、そんなこんなしてるうちに気がつけば夏休みが終わって家族とコンビニの店員と病院の先生と自転車屋さんとしか話してなかったりなikikkoです、こんにちは。
このままだと↓の @ussy00 カイジみたく人間のクズに成り下がりかねなかったので、夏休みの自由課題ということでJenkins Backlogプラグインを拡張してみました。今回の拡張で、Backlogのユーザ情報でJenkinsにログインできるように。
Jenkinsのセキュリティ関連のプラグインの中に、Script Security Realmというものがあります。このプラグインはJenkinsの認証時に適当なスクリプトをフックできるというものですが、これの中見てるとBacklogプラグインにも認証周りの実装するのはそこまで難しくないかなと思ったのがそもそもの発端です。
まぁ、Backlogプラグインのユーザは数えるほどしかいないだろうしみんなあまり興味ないだろうから、中身のことはとりあえず置いといて。
Jenkinsのセキュリティの概念については、id:tyuki39 さんのHudsonの操作権限をユーザ/グループ/ロール別に制御する - ふぞろいのGENGOたちがよくまとまっています。ただ、自分の使い方としてはそこまでガッチガチに縛るやり方ではなく、メンバーには基本的に自由に触ってもらっています。ですが、何かあったときに誰が何をしたのかをトレースしたいなというのは前から思っていたところでした。
そんな私のお気に入りの設定は、「権限管理」で「ログイン済みユーザーに許可」です。ヘルプメッセージを見てもらえば分かるかと思いますが、ビルド結果の参照などにはログインする必要がなく、手動ビルドしたい場合や何か設定に変更を加えたい場合に初めてユーザ認証が必要になります。
これで、メンバーの手間をできるだけ減らしつつ、トレーサビリティも確保できるようになります。Jenkinsのジョブ設定の履歴を追えるJob Config Historyとの相性もいい感じです。
ところでうちの子ども、マルモリ体操を流すと熱があるにも関わらずはしゃぎだすのですが、自分の体調の悪さを分かっていないようですぐにフラフラになります。。。