2011/12/20■[jenkins]英語コミュニティに発信しよう今日、San FranciscoでJenkinsコミュニティの人達と飲んでいて、ふと日本語コミュニティの話になりました。聞いていて「全くその通りだ!」と思ったのでその場で急いでtweetしたのがこれです。でも帰ってきてみて、これだけだと多分伝わらないと思ったので改めてブログにすることにしました。 急募:日本語のJenkinsアクティビティを英語に翻訳して英語コミュニティに公開する人 #jenkinsja Jenkins日本語コミュニティの活発さと規模は常々こちらでも宣伝しているのですが、やっぱりヨーロッパ・アメリカ圏のコミュニティの人達には言葉の壁があってどうしても見えない存在になってしまっています。それでいいと思えばそれでもいいのですが、他方で、プロジェクトミーティングがヨーロッパ・アメリカ時間になってしまったり、Jenkins User Conferenceをどこでやろうかという時に東京は候補に上がらなかったり、色々損することが多いのも事実です。 そこで@jenkinsciの中の人Tylerが言っていたのが、じゃあ誰か日本語コミュニティの人にその活動を英語圏の人に紹介してもらってよ、と。今までは、僕も本家のニュースを日本語に翻訳して公開、みたいなのは考えていたのですが、その逆は考えたことが無かったので目から鱗でした。そう言われてみれば、じつはもうすでに発信できるコンテンツも沢山あるじゃないかと。Advent Calendarを週一で英語にするだけでも半年間いけますよね。Jenkins本の売れ行きの紹介とか、O'Reilly カエル本の翻訳の予定の紹介とかもできるし、勉強会の報告もできるし。 全部翻訳するのは面倒くさいならば、2〜3のハイライトを見繕って翻訳して、残りはGoogle Translateへのリンクを集めるとか、色々かけられる手間にあわせた方法があると思います。技術系Adcent Calendarはわりと日本独自のものだし、そういう日本の技術者文化に関する発信とかもできそうだし、これって色々と面白いんじゃないかと夢が広がりました。 @kohsukekawa あまりガッツリは難しいかもしれませんが、微力ながら協力する気持ちはいっぱいです。 既に池田さんが立候補してくださいましたが、そういうわけで、こういうのに協力しても良いという方をぜひもう何人か募集します。http://jenkins-ci.org/ にアカウントを作って本家のニュースとしてポストできるようにするあたりから始めるのがいいかなと思っていますが、展開次第では次回のJenkins User Conferenceで日本のコミュニティの活動報告をしたり(訪米もよし、ビデオもよし)、色々ありえると思います。英語が多少できて、IRCで英語で会話するのが苦にならなければなお素晴らしいです! 2011/12/05■[jenkins][xmas]Jenkins X'mas プラグインを改善しました@kiy0takaさんがバイナリの実用性とソースコードの実用性が素晴らしく乖離したJenkins X'masプラグインを書いてくれました。 このプラグインは非常に簡潔に書かれていながら幾つかのあまり使われない拡張ポイントを使っていて、プラグイン開発者には非常に参考になる逸品に仕上がっています。そこで、Jenkinsコミュニティの互助精神と他人の褌プログラミングの心を紹介するために、またクリスマスにいつもLEGOをリクエストしても嫁さんが買ってくれない僕も、早速pull requestを送って新しい機能を追加してみました。 この変更によって、以下のように、「爆発しろ」のテキストに加えてクリスマス中止のお知らせが表示されます。また、「爆発しろ」はとあるYouTubeビデオへのリンクになります。 ![]() このように、最近のバージョンのJenkinsではコンソール出力にマークアップを利用して多くの情報を付加することが可能です。活用してみてください。また、このようにJenkinsプロジェクトではお互いのプラグインをよってたかって改善しあう文化があります。皆さんもぜひ他人の始めたプラグインを改良してみてください。 2011/12/01■[jenkins] プラグインを再起動無しでインストールする今日からJenkins アドベントカレンダー企画が始まります。今日から25日間、コミュニティの皆さんで一日一人一つの記事を順番に書いていくという企画です。そのトップバッターになるこの記事では、今週末登場予定のJenkins 1.442での新機能、「再起動しないでプラグインをインストール」を紹介しようと思います。 後述するように内部的には色々大変なことがあるのですが、ユーザーの方には簡単に使えます。まず、今まで通りにプラグインの管理から一覧を表示し、インストールするプラグインを選びます。画面最下部にスクロールすると「Install without restart」ボタンと「Download now and install after restart」ボタンの2つが出ます。前者が再起動無しでインストールするモードで、後者が今までのように再起動後にインストールをするモードです。暫くしたら後者のボタンは削ってしまってもいいかなと思っています。 左のボタンをクリックするとダウンロード&インストールが始まります。 インストールが完了すると、今までなら再起動するところなのですが、今回からは「Go back to the top page」をクリックしてさっさとトップページに戻ってしまって構いません。インストールしたばかりのプラグインがもう使えるようになっているはずです。簡単でしたね。 アップデートは?残念ながら、内部的な設計の制約上、この方式を使って既にインストールされたプラグインをアップデートするのは難しいと思います。詳細は内部的な話のところで説明します。 アンインストールは?同様に、正確な意味でのアンインストールを実現するのも難しいと思います。ですが、ある種の限定的なものなら不可能ではないかもしれないと思っています。既にプラグインが使われているジョブの設定には再起動まで影響を及ぼさないけれども、設定画面には表示されなくなる、みたいな感じで。 内部的な話歴史を遡ること約400リリース前、1.44でプラグインがサポートされた時からずっと、Jenkinsではプラグインのインストール後には再起動が必要でした。Jenkinsはスタートアップ時にプラグインに対して色々な計算をして、プラグインに関するimmutableなデータ構造を作っていくわけです。このあたりの処理がそもそもは逐次的に書かれていたので、これを動的に実行できるようにするのは結構面倒くさい仕事でした。アップデートセンターを書くとか他にプライオリティの高い作業があって、動的インストールまではなかなか手が回らなかったわけです。 その後Jenkinsの起動速度の改善のために、Jenkinsの初期化を細かいタスクに分解し、その依存関係をトポロジカルソートして並列に実行...みたいな機能が入ってから、追加の初期化タスクを実行するのが現実的になってきました。その時実装しておけばよかったのですが、その後、Guiceを使って内部的にコンポーネントを結線するようになると、動的にコンポーネントを追加するのがまた難しくなってしまったのです。現在のバージョンでは、Guiceのchild injectorを使って追加されたプラグインから貢献された実装をホストするようにしています。これでほとんどのプラグインはごまかされてくれています。 では、なぜアップデートは難しいのでしょうか?Jenkinsの設計では、通常のデータベースアプリケーションとは異なり、モデルオブジェクトはメモリ内に長期間とどまるように設計されているからです。このデザイン自体は自分は気に入っているのですが、欠点の一つとして、動的に定義を変更するのが難しいことになってしまうというわけです。Javaではメモリ上のインスタンスをリロードすることはできないので。なので、これはHAみたいな方向で解決するのがいいのかなと思っています。 まとめそんなわけで、内部的には結構頑張ったので、ぜひこれを使って、どんどんプラグインを試してやってください。 2011/11/14■[jenkins] プラグインをコミュニティにホストするにはオフラインで質問を受けたのでここに書きます。 公開されているJenkinsのプラグインは http://github.com/jenkinsci/ にできるだけ集めてメンテしたいと思っています。 これによって、オリジナルの開発者が去っても他の人が開発を継続できますし、コミュニティの他の人が開発に参加するのが容易になるからです。では、どうやってリポジトリを作ったらよいでしょうか。 一つ二つしかプラグインを書く予定がない場合には、メーリングリストでGitHub IDとプラグインの名前を言って、既存の開発者に必要な操作をやってもらってください。これが一番簡単です。 他人任せではなく自分で作れるようにするためには、もうちょっと面倒な操作手順を踏む必要があります。でも、これをやってくれる人が一定数以上いないと新しい開発者が困ってしまうので、われこそはと思う人はよろしくお願いします。 GitHubの仕組みでは、リポジトリを作成するには管理者権限が必要なのですが、Jenkinsプロジェクトの「コミュニティに参加する敷居を下げる」のモットーに沿って、誰でもリポジトリを作れるように、JenkinsプロジェクトではIRC上のボットを利用しています。
以上で完成です。 ボットを使っている理由は、リポジトリに対する操作がみんなに見えるようにすることでabuseを避けるためなのですが、よく考えると、OAuthかなんかでGitHubと認証すればウェブアプリとしてもできそうですよね。「誰かがあれこれこういう操作をしているよ」という記録がリアルタイムにIRCに送られれば透明性も確保できそうだし。時間があれば書いてみたい気がします。 2011/10/06■[jenkins] 日本でJenkinsづくしの一週間JavaOneもようやっと終わり、明日からは日本へ行きます。Jenkins関係の色々な活動づくしの一週間の予定です。
お会いできる方とは、お会いする機会を楽しみにしています。 |



