タグ

ブックマーク / kohsuke.hatenadiary.com (29)

  • BuildHiveをリリースしました - 川口耕介のブログ

    このところ頑張って作っていたBuildHiveがようやっとリリースに漕ぎ着けましたので、使ってやってください。 BuildHiveはCloudBeesのDEV@cloudの一環で、GitHubのリポジトリに対する継続的インテグレーションビルドをとても簡単にセットアップできるサービスです。どなたでも無料で使えます。 トップページには既にBuildHive上でビルドされている様々なプロジェクトが表示されます。新しくプロジェクトをセットアップする為に、BuildHiveにいって右上の赤い「Add your Git repositories」ボタンをクリックします。 GitHubとのOAuth認証を聞かれるので、「Allow」ボタンを押して許可してやってください。 すると、CIビルドをセットアップするGitHubのリポジトリを選ぶ画面が出てくるので、適当なプロジェクトを選んで「Enable」を押し

    BuildHiveをリリースしました - 川口耕介のブログ
    lizy
    lizy 2012/05/16
    クラウドCIサービス
  • プラグインを再起動無しでインストールする - 川口耕介のブログ

    今日からJenkins アドベントカレンダー企画が始まります。今日から25日間、コミュニティの皆さんで一日一人一つの記事を順番に書いていくという企画です。そのトップバッターになるこの記事では、今週末登場予定のJenkins 1.442での新機能、「再起動しないでプラグインをインストール」を紹介しようと思います。 後述するように内部的には色々大変なことがあるのですが、ユーザーの方には簡単に使えます。まず、今まで通りにプラグインの管理から一覧を表示し、インストールするプラグインを選びます。画面最下部にスクロールすると「Install without restart」ボタンと「Download now and install after restart」ボタンの2つが出ます。前者が再起動無しでインストールするモードで、後者が今までのように再起動後にインストールをするモードです。暫くしたら後者のボ

    プラグインを再起動無しでインストールする - 川口耕介のブログ
  • 非対話的デバッガ YouDebug - 川口耕介のブログ

    バグ修正はプログラマの仕事の一つですが、このうちのかなりの時間は問題を再現することに費やされます。 症状からバグの全容が推察できる時もあるのですが、多くの場合には、手元で問題を再現し、更なるデータを集めることによって始めてバグが理解されるからです。しかし、環境に依存する問題などは再現が難しい場合もあります。どうしたらよいでしょうか。 ロギングというのがよく行われる解決・予防策ですが、「デバッガを走らせて変数xの値を教えてくれればいいのに!」と思った事があるのは私だけではないと思います。ロギングと異なり、デバッガは予めプログラムに障害発生を予期するコードを埋め込んでおく必要はありません。また、呼び出し元のローカル変数をアクセスしたり、任意の式を評価したり、あるいは変数の値を変更することもできてしまいます。当たり前ですが、障害分析ツールとしてはデバッガはずっと強力だからです。 ではなぜユーザー

    非対話的デバッガ YouDebug - 川口耕介のブログ
    lizy
    lizy 2009/11/09
    なんぞこれ
  • java.netのアクセス障害とHudsonの挙動不審 - 川口耕介のブログ

    現在までのところ出回っている全てのバージョンのHudson(具体的には1.326まで)には、java.netがアクセス不能になっていると設定フォームをサブミットできないという問題があります。この問題の詳細は http://wiki.hudson-ci.org/display/HUDSON/Dealing+with+java.net+outages に書かれています。この問題は、次の1.327で修正される予定ですが、それまでの間、もしくはアップデートが困難な状況の場合は、上述のページに回避法が解説してあります。 なお、java.netは現在のところ特定のIPをブロックして動作させるという運用がなされており、この影響で、ヨーロッパ、アジア、アフリカロシアなどのIPから接続できない状況になっているようです。この問題を解決するべく今も障害対策が続けられていますが、解決までにはまだ若干時間を要する

    java.netのアクセス障害とHudsonの挙動不審 - 川口耕介のブログ
    lizy
    lizy 2009/10/05
  • Sun Continuous Integration Server - 川口耕介のブログ

    思ったよりずいぶん時間が掛かってしまいましたが、遂に、Sun Microsystemsから公式にHudsonの有償サポートが「発売」されました。商用などHudsonが開発チームの重要なインフラになっている場合に、便利かと思います。 この製品は「Sun Continuous Integration Server」(SCIS)という名前で、GlassFish Portfolioの一環として提供されます。従って、Portfolioを買っていただくとHudsonのサポートが入っている、という感じになります。この商品のメリットは: パッチリリース:6ヶ月毎に、コミュニティ版のHudsonリリースを取り込んで、18ヶ月間パッチが提供されます。コミュニティ版のリリースは週一回で、常に新しい機能とバグフィクスの両方が含まれていますが、パッチリリースには不安定さを増したり、UIの変更でユーザーに混乱を及ぼす

    Sun Continuous Integration Server - 川口耕介のブログ
    lizy
    lizy 2009/09/07
  • Hudson EC2 プラグイン - 川口耕介のブログ

    CIのビルドやテストには、往々にして様々な環境を用意する必要があります。例えば、職場では、GlassFishのテストには必ずLinux,Windows,Solarisの3種の環境が必要ですし、JDKに至っては、バージョンの異なる10以上の異なる環境でテストが行われます。こうした環境を実物のコンピュータに用意してもよいのですが、テストの負荷は一定ではないので、(土日夜間など)計算機資源が過小に利用されているか、(リリース直前など)計算機資源が埋まってしまって待ちが発生するか、どちらかになりがちです。 こうした観点から仮想化やクラウドコンピューティングはCIと非常に相性のいい技術であるといえます。仮想化の場合は、物理的な計算機の上に異なる環境を必要に応じて走らせられますし、クラウドコンピューティングの場合は、物理的な計算機のことを気にせず、カンバン方式で仮想計算機を割り当てればよいからです。

    Hudson EC2 プラグイン - 川口耕介のブログ
    lizy
    lizy 2009/05/22
    分散環境のインフラストラクチャ化し始めたhudson
  • Hudson Selenium PluginでHudsonクラスタをSelenium Gridに - 川口耕介のブログ

    Hudsonのクラスタを一瞬でSelenium Gridに変身させる「Hudson Selenium Plugin」を公開しました。このプラグインを使うと、クラスタ上のマシンに逐一Selenium Gridをインストールして回ることなく、Selenium Gridを利用することができます。先日リリースしたHudson Hadoop Pluginのように、既存のHudsonインフラを多用途に利用するためのプラグインです。 このプラグインをHudsonにインストールすると、HudsonマスターにSelenium Grid Hubがインストールされます。このグリッドに接続する為には、次のようにしてDefaultSeleniumインスタンスを記述します。この指定ではクラスタ上のどこかのマシンでFirefoxを起動する設定になります。 new DefaultSelenium("hudson.mydo

    Hudson Selenium PluginでHudsonクラスタをSelenium Gridに - 川口耕介のブログ
    lizy
    lizy 2009/05/16
    分散プラットフォーム化
  • Hudson PXE plugin - 川口耕介のブログ

    Hudsonのクラスタを作る上での障害の一つは、PCのインストール作業です。自分自身、仕事で使っているHudsonクラスタが大きくなるにつれて、このOSのインストール作業がどんどん煩雑になってきました。インストールには通常メディアの入ったCD-ROMが必要ですし、PC側にはドライブも必要です(そして、なぜか使い古しのPCはCD-ROMドライブが不安定なものが多いのです。)そして、往々にして、CDはどこかのドライブに入れ忘れたまま、ということになります。 更に、インストールそのものも非常に退屈な作業です。時間が掛かる上に、要所要所でインストーラの質問に答える必要があるので、目を離しっぱなしにするわけにもいきません。そのくせ、質問の答えはいつも同じです。OSのインストールが終わったら、CDを抜いてリブートして、更に追加パッケージのインストールやネットワーク設定を行うことになります。決して難しい

    Hudson PXE plugin - 川口耕介のブログ
    lizy
    lizy 2009/05/13
    CIツールだったことを忘れるぐらい盛りだくさんになってきた
  • Hudson CLIとGroovy shell - 川口耕介のブログ

    GUIから何でも出来る」というのはHudsonの大事なウリの一つなのですが、その一方、自動化やスクリプトを書くために、コマンドラインインターフェース(CLI)が便利な局面と言うのは結構あります。HudsonにはREST APIがついてはいますが、これはプログラムを書く人向けで、管理者の自動化などには、汎用RESTクライアントの不足もあって、あまり便利ではありません。そこで、Hudson 1.302から、HudsonにはCLIが追加されました。CLIのjarは、お使いのHudsonのhttp://server/hudson/cliからダウンロードすることが出来ます。また、このページには使い方の簡単な紹介も載っています。 さて、このCLI実装の中身がちょっと面白いので紹介します。CLI自体には、実はコマンドの実装は何も含まれていません。代わりに、マスター・スレイブの間で利用されているJava

    Hudson CLIとGroovy shell - 川口耕介のブログ
    lizy
    lizy 2009/05/11
  • 分散Groovy環境 - 川口耕介のブログ

    Hudsonの分散ビルドの実装の肝になっているのは、クロージャをリモートJVMで実行するという仕組み。クラスファイルとかリソースとかも必要に応じてリモートJVMにコピーするので、リモート側にあらかじめプログラムを配備しておく必要がないのがよい点です。 さて、常々Javaのクロージャ(もどき)の文法は冗長だと思っていたので、これにGroovyを組み合わせたらいいんじゃない?、という事で、実験して見たところ意外にうまくいきました。 def pid() { // PIDを取得する。要はどのJVMで動いているかをわかりやすくするだけ return new File("/proc/self").canonicalPath } i=0 (0..<4).each { i++; remote { println "1st from ${pid()} (${i})" remote { println "2n

    分散Groovy環境 - 川口耕介のブログ
  • リモートAPIを拡張しました - 川口耕介のブログ

    今井さんからフィードバックをもらったので1.272に向けてリモートAPIを直しておきました。 ジョブの一覧は hudson.primaryView.job.url ではなくて hudson.job.url であるべきなので、そのようにしました。 ビルドの一覧をジョブから取得する際には、 $JOB_URL/api/xml?depth=2 が必要だったので、標準のdepthでもある程度の情報が得られるように修正しました テスト結果の概要が$BUILD_URL/api/xmlに現れるようにしました 以下、個別にレスすると、 あたしが欲しいネタは末端のにあるのは分かったんだけど,これってすべてのテスト結果を一斉公開してるんだよね。この出力処理するのってすごーく富豪的な気がするんだけど,どんなもんなのかねぇ。 これはその通りなので修正しておきました。十分なdepthレベルを与えれば、依然として一括で

    リモートAPIを拡張しました - 川口耕介のブログ
  • redmineプラグインが公開されました - 川口耕介のブログ

    id:gaoohさんの書いたredmineプラグインが公開されました。これでid:gaoohさんもHudsonの中の人に! インストールは、いつものように、Hudsonのプラグインアップデートセンターからどうぞ。

    redmineプラグインが公開されました - 川口耕介のブログ
  • java.util.loggingはもちょっとなんとかならんのか - 川口耕介のブログ

    ここ数日はがむしゃらにコーディングしているが、そうするとあちこちの使えないライブラリに対する怒りが溜まって困る。 今日のそれはjava.util.logging。過去何度も怒りを溜めては忘れ溜めては忘れしたが、今日は書いて発散する。 まず明らかにバカなのが、次のように例外をログするのは頻出のパターンなのに適切なオーバーロードが存在しないこと。 catch(SomeException e) { LOGGER.severe("Houston, we have a problem",e); } かわりにより冗長な次の構文が必要。 catch(SomeException e) { LOGGER.log(LogLevel.SEVERE,"Houston, we have a problem",e); } 同様にメッセージのフォーマットをする場合にも LOGGER.info("Operation {0

    java.util.loggingはもちょっとなんとかならんのか - 川口耕介のブログ
    lizy
    lizy 2008/11/02
  • Hudsonをテストする - 川口耕介のブログ

    mixiでHudsonのユーザーの方に質問を頂いたので、Hudsonをどうやってリリース前にテストしているのかについてです。 まずは懺悔から。比較的最近まで、単体でテスト可能なクラスをテストするコードが若干ある他はHudsonには自動化されたテストはほとんどありませんでした。Web UIのテストは大変だとか、リリースサイクルの都合上仮にバグが見つかってもすぐに修正出来るとか、この手法で過去200リリース以上致命的な問題が発生したことはほとんど無かったから結果オーライとか、まぁ理由を弁解すれば色々有るのですが、やはり自動化テストがないのは良くないことです。Hudsonでは、長い間自動化テストに代わって人柱テストをやってきました。私が自分で社内向けに展開しているHudsonのインストレーションは非常に大規模なので、リリース前のバージョンをここへインストールし、一日位様子を見て大きな問題が見つか

    Hudsonをテストする - 川口耕介のブログ
  • Re:HudsonTracPlugin で、ビルドの説明を表示してみる - 川口耕介のブログ

    depthクエリーパラメータを使うと「job/job名/api/xml?depth=1」みたいにして全てのビルド情報を一度に取得できます。数字を調節して取得するデータ量を調整してください。また、XPathと組み合わせると必要な情報だけを取り出してデータ転送量を減らすことが出来ます。 あと、これを見てて思ったのですが、Pythonにもdictとlistのリテラル構文はあるしevalもあるので、HudsonがデータをJSONのようにしてPythonリテラルで送るモードを装備すれば、evalするだけでパースできますよね。と考えていて更に気がついたのですが、JSONってPythonのevalでそのままパースできるんじゃ...。

    Re:HudsonTracPlugin で、ビルドの説明を表示してみる - 川口耕介のブログ
  • コミッタになるには - 川口耕介のブログ

    id:cactusmanさんのブログ経由で一連のコミッタ関係の面白いやりとりを発見しました。 それで、なんで自分のような大したことない人間をコミッタにしたのかは、聞いてないので確かなことは言えません。 http://d.hatena.ne.jp/cactusman/20080806 もうお話は収束しちゃったみたいなので、今更感もありますが、僕の感想を。 と指摘されている通りで、「貢献してるんだからコミッタになりたい!」ということはもちろん主張していいことだと思います。「貢献」という言葉の意味が「不具合パッチ程度のもの」だとすると、僕の尺度からするとそれはコミッタになるための条件としては足りないと思っているので、rejectされるかな、と。もちろんこの尺度はOSSによって違うので答えはないだろうけど、自分の意見としては、contributionのレベルに応じてコミッタになれるかどうかが決定さ

    コミッタになるには - 川口耕介のブログ
  • プラグインのダウンロード統計 - 川口耕介のブログ

    6月9日にリリースされたHudson 1.222から、Hudsonにはプラグインのインストールを自動化するアップデート・センターがついています。この機能がどの程度プラグインのダウンロードに影響があったのか興味があったので、ログをまとめてみました。この記録は7日から13日までの分のログです。 プラグインのダウンロード総数はこの期間で2355でした(HTTPコードが200のものだけをカウント)。この数字からは、アップデート・センターに必要なデータファイルを作成するデーモンがダウンロードした分なども除いてあります。この2355ダウンロードのうち、1249 (53%)がアップデート・センターによるものでした。6月7日の前の週の総ダウンロード数は1682だったので、ダウンロード数は40%位増えた計算になります。全てのユーザーが新しいバージョンのHudsonにアップグレードしたわけではないし、この手の

    プラグインのダウンロード統計 - 川口耕介のブログ
    lizy
    lizy 2008/06/25
    tracプラグインを入れてみました
  • Active DirectoryとHudson/Javaの統合 - 川口耕介のブログ

    Active DirectoryとJavaのお寒い関係について、またHudsonがcom4jを使うことでどうやってゼロ・コンフィグレーションのActive Directory統合を実現したのか、以前に書きました。これはWindows上でHudsonを使っているユーザーには大変便利だったのですが、一方、その後、Active Directoryで管理されているドメインの中で動いているUnixマシン上でもHudsonを使っている人が意外に多いことが分かりました。UnixではCOMは使えないのでまったく異なるアプローチを実装する必要がありましたが、先日ようやっとHudsonのActive DirectoryプラグインをUnixでも動くようにして公開することができました。こちらは残念ながらゼロ・コンフィグレーションではないのですが、入力するフィールドはActive Directoryドメイン名の一つ

    Active DirectoryとHudson/Javaの統合 - 川口耕介のブログ
  • Hudson 1.22, アップデート・センター、そして最近の出来事 - 川口耕介のブログ

    昨日、Hudsonの最新版1.222を公開しました。このバージョンでの目玉機能は、今井さんより要望のあった、プラグインのインストールを簡便化するための「アップデートセンター」の搭載です。コミュニティ有志によって開発されているプラグインはHudsonの重要な利点の一つなので、これでユーザーがプラグインを利用しやすくなることによって、Hudsonの利便性とプラグインの開発が両方共促進されれば言うことなしです。 ユーザーの皆さんに1.222にアップデートしてもらえるように、もう一つ最近の重要な改善点をあげておくと、Mavenビルドの高速化が挙げられるでしょう。不用心にJDKのFilterOutputStreamクラスを使っていたのが原因で、肝心なところで「write(byte[])」によるバルク書き込みが、一バイトづつの逐次書き込み「write(int)」に変換されてしまっていました。一バイトず

    Hudson 1.22, アップデート・センター、そして最近の出来事 - 川口耕介のブログ
    lizy
    lizy 2008/06/12
  • JVMをネイティブコードレベルでデバッグ - 川口耕介のブログ

    先日、JVMをネイティブコードのレベルでデバッグしないといけなくなったので、このブログはそのメモです。例によって、僕はJVMチームの一員じゃありません。もし、よりよい方法をご存知の方は教えて下さい。 さて、これをやるはめになったのは、MavenをHudsonからある特定の方法で起動するとMavenがハングする、というバグが懸案になっていたからです。デバッグを長くやっていると、誰しもある種の勘というかそういうものが身についてきて、これは性質の悪い、下位レイヤからくるバグだというのが分かる時がありますが、これはそういうバグでした(当はそんなアナログなものじゃなくて、脳内で症状に合致する仮説を組み立てようとした結果、妥当な仮説が存在しないというか、もっと検索的な感じなのですが)。 デバッガサポートをつけてJVMを起動するとバグは再現しないし、jconsoleをアタッチするとその途端に生き返り、

    JVMをネイティブコードレベルでデバッグ - 川口耕介のブログ