Jenkinsとbitbucket private repository の連携にはnotifyCommitが便利

とあるサイトのコンテンツ管理を 、

  1. bitbucket のプライベートリポジトリ
  2. Jenkinsはユーザ認証有り
  3. pushしたら、httpサーバ側で自動的にpull
  4. サイト更新されてる(゚д゚)ウマー

ってやろうとしてて、軽くハマったので過程と解決策。

最初:ユーザ認証なしのJenkins + Token付きのビルドリクエスト

bitbucketの[Admin]->[Service]からToken付きのビルドリクエストをPOSTするようにして、要件の1,3,4は達成。

http://my.domain:8080/job/jabba/build?token=jabbajabbajabba

Jenkinsユーザ認証かけとこねー

誰それ構わずリクエスト送られても困るんで、ユーザ認証をかけておこうかと。
(Jenkinsでユーザ認証設定)

動かねー orz...bitbucketさんもリクエストを送れないようになったので当然です。

解決策:git plugin

git pluginにはnotifyCommitという機能があるらしいというのがわかりました。

これはアツイ。早速以下のように設定。

  • bitbucketの[Admin]->[Service]からPOSTするURLを変更。

http://my.domain:8080/git/notifyCommit?url=git@bitbucket.org:user/repos.git

  • Jenkinsのビルド・トリガにて、SCM Pollingに変更。スケジュールは空白。

動いてる(∩´∀`)∩ワーイ。これで要件の2も達成。さらには、ブランチ毎のJobを作っている場合でも必要なやつだけビルドしてくれるのもわかりました。

まとめ

  1. ユーザ認証かけたJenkinsとprivate repoの連携には git pluginの機能を使うと楽
  2. TOKENや、ジョブ名を指定する必要なし
  3. Notifyを受けたJenkinsのほうでジョブを探索してスケジューリング
  4. ブランチ毎のJobを作っている場合でも必要なやつだけビルド

なにこの素敵プラグイン。

情報共有の未来を読んでたら、石黒さんの話が登場しててびっくりした件

情報共有の未来【電子書籍】達人出版会から電子書籍で購入して、iPhoneでちまちま読んでいたのですが、その中で石黒さんの話が載ってて不意打ちをくらった。

本書は、yomoyomoさんが、の「情報共有の未来」というタイトルでWIRED VISIONに、2007年8月から2011年5月まで連載していたものの再録+あとがきの追加になっています。いささか古い話の部分はありますが、ある種の歴史書としての見方と、まだ達成されていない予言の書としての見方、そしてあとがきによる現在の対比が出来るというとても面白い構成です。

「第10章 Internet Turns On Junior Unsatisfied Nerds」から、itojunさんら当時のハッカーのやり取りを見た著者が高揚するばかりではなく絶望感を味わったという下りで、

98年の6Bone-JPBOFの話ですが、IPv6のルーティング周りを聞き取りにくい声でぼそぼそと説明していた人が、「なかなか接続がうまく行かないので頭に来てRIPngをスクラッチから書き始めて何とか成果を出し、嬉しかったのでBGP4+も作っちゃいました。OSPFv6を作っている人を何人か知ったのでぼくも手を貸すつもりです」と機器、どうやっても自分はこの人ったちのレベルまでは行けない、と一種の絶望感を味わったものです。

世代的なものはあるかもしれないですが、それを言い訳にしたくない気持ちもあり。
体験できるのにそこに身を置かないのはとてももったいないというのを再確認しました。

2013年の目標

人生二度目の海外での年越しでした。前回も今回も奥様が一緒でした。ありがとうございます。

写真はシャンゼリゼ通りの端に出現する観覧車から撮った写真。


昨年は巡り合わせによりWii U用のブラウザ開発に携わる事ができました。ゲーム業界な方達と一緒に仕事をすることで、本当に最高のブラウザの開発が出来たと思います。ありがとうございました。

Wii U プレミアムセット kuro (WUP-S-KAFC)

Wii U プレミアムセット kuro (WUP-S-KAFC)

また、期の半ばで課長職を拝命することになり、バリバリ書くという(いわゆる)「現場」らしい仕事からはかなり離れてしまいました。色々と兼任が多く、任せないと自分が回らなかったというのが正直なところです。残念な面もありましたが、採用面接など人と接する機会が多数出来た事で、自分のやりたい事やプロダクトとしてやるべき事を改めて考える機会となりました。

さらに、会社がW3Cに再加入したこともあり、日本会員会議などにも参加させてもらいました。
今後も諸々の活動に参加させてもらう予定ですので、SFC方面の方よろしくお願いします。

HTML5クックブック

HTML5クックブック

今年は

  1. 現在携わっているプロダクトについてもう少し幅広い責任を持って、ビジネスを回せるようになる。
  2. 体力の如実な衰えを感じているので、地道に体力をつける。
  3. 海外とのやり取りで語学力の無さを痛感する日々なので、真面目に体力増強。

を目標に日々精進したく思います。

ながの。

Chrome for Mac でアプリケーションショートカットを作る方法

強風により家に帰ってきたので、Jangoで音楽聞きながら作業。
jangoだけ別ウィンドウにしてたんだけど、Twitterクライアントのリンクオープンしてくれるもんだから、うざったいのでアプリケーションショートカット作成して追い出した。

なぜかはわからないが、Mac版Chromeのアプリケーションショートカットは無効にされている。そこでアプリケーションショートカットを作ってくれるスクリプトmakeApp.shをここからダウンロード。

ターミナルから以下のとおりに入力

$ cd ~/Downloads
$ chmod +x makeApp.sh
$ ./makeApp.sh
What should the Application be called (no spaces allowed e.g. GCal)?
ショートカットに付けたい名前を設定する
What is the url (e.g. https://www.google.com/calendar/render)?
URLを指定する
What is the full path to the icon (e.g. /Users/username/Desktop/icon.png)?
/Users/USERNAME/Downloads/jango_logo_108x48.png
$

これで、アプリケーションディレクトリにアプリケーションショートカットが作成されている。
なぜかアイコンが設定されていなかったけど、まぁいいや。問題ないので気にしない。

MacOSXでatコマンドを使おうとしてハマった話

世の中はSiriの日本語対応だとか、新しいiPadとかで大盛り上がりですが、どちらにもアップデートしない私はMacBook Airでスクリプティング。

RockMeltのフルスクリーン表示をデフォルトで使用しているのですが、没頭してたら時間がわからず困ります*1。そこで、growlnotifyで一定時間が経過したら通知するようなスクリプトを作成することにします。

時間のパースとかやりたくないなぁと思っていたところに、atコマンドの存在を知りました。

これで良いじゃん!と思いましたが、う、動かない...よくよく調べてみると、ただでは動かしてくれないらしい。

以下のようにすると良いとのこと。

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

試したところ、バッチリ動きました!

$ timer after 5

とかやると、5 分後にgrowlで表示してくれます。

メッセージの指定が出来なかったり1分前とか3分前とかの通知をしてくれなかったりしますが、それはおいおい気が向いた時にでも。

スクリプトはこちらに置いてあります。

*1:といってもtwitterは常にgrowl連携させているのですが...

[Jenkins] 第5回Jenkins勉強会に行って来ました。

品川の楽天タワーで行われた第5回Jenkins勉強会に参加してきました。

講演

DEV@cloud Jenkins-as-a-Serviceの舞台裏

Jenkinsのリード開発者@kohsukekawaさんによる、Jenkins のホスティングサービスDev@cloudの紹介。

CloudBeesが運営するサービス。 Amazon EC2の上に構築しているのでその裏側の紹介。

JVM:Slave毎にJVMで駆動。JVMで動かしている。
独自パッチ:標準のものから、マスターでビルドが起こらないようにするなど、独自パッチをあてているとのこと。このパッチはほしいぞ...。
Jenkinsの外:Chef (Rubyのコンフィグ管理ツール)をつかって、セットアップしたやつをAMI化しているらしい。そういうツールがあるのは知らんかった。
Linux Container:OSレベルの仮想化に使っている。スレーブのリサイクルが高速で、Amazon EC2の上での独立性を高めて、下のサービスに影響を受けなくて済むようにするための工夫。たしかにXとかslave側にはほとんど不要だからこうしておけばVirtualBoxのクライアントを複数立ち上げるより良さ気。
Nagiosによるモニタリング。信頼を獲得するために、動かしているシステムの状態を把握する。ディスクスペース、スレーブの稼働状況、負荷JVMヒープなどを監視。

要約⇒ちっちゃなことからコツコツと。少しずつシステマティックな管理を導入しよう。

早瀬さん@楽天 : 「楽天での"Continuous Delivery"読書会について」

楽天の中で"Continuous Delivery"読書会を開始したときの話。
Jolt Awardの中から本をピックアップして投票⇒読書会スタートの予定が、投票開始前に「CI本買いました!」って写真付きで社内SNSにアップする人が続出したために、"Continuous Delivery"を読むことになったとのこと。

一章毎の輪講形式。週一回ぐらい。3回目からカフェテリアでビール飲みながらに移行。実業務との関わりなどを絡めて行ったので上手くいっている。

「(このような活動を)社外に発信することで、社内のコミュニケーションが良くなった」とのこと。

加藤さん@mixi : 「mixi における Jenkins の運用について」

mixiでの実例。単純な繰り返し作業を無くすチームというのが存在するとのこと。これはいいチーム。
JenkinsのMasterは3台

  1. iOS: Build + インストール用に .plist 作成
  2. Android: Build Test + Gerrit
  3. "mixi"という名のテスト環境: コードをチェックアウト& テスト
  • テスト結果をTAP::Harness::JUnitを使って、JUnit形式整形⇒Jenkinsで表示
  • Code Metricsは、Perl::Metrics::Liteや、Devel::Cover::Report::Clover

と書いては見たものの、Perlモジュールなんてわからねぇ...。

"try" Job:パラメタライズドビルドにブランチURLを渡してフィーチャーブランチをテスト。しばらく前に似たような要求があったのでその時に知ってればよかったな。最初にチェックアウトして、終わったら忘れる。ブランチであることが確定していたら、svn switchでもイケるかも。
ブランチを作る?作らない?:Web系開発のトレンドでは、ブランチを作らず、メインラインに直接コミットして、コンフィグ変更で実行できるようにするのが主流になりつつあるらしい。

メインラインにコミットして、コンフィグ変更で実行できるようにしている。これのメリットは、A/Bテストがやりやすいこと。
test is dead:正しい作り方も大事だけど、意味のあるものを作るのが大事。テストがこけているどうのこうの小さいところに拘らず、製品を作ってるんだっていう、もっと高い意識を持つのが重要。

LT

Smart Jenkins on Ruby

東大笹田研究室のコ 文婷さん、胡 益さん。節電のためにビルドマシンを24時間つけておくことができなくなったため、夜中にテストするように。Slaveマシンの自動On/Off。

RubyでJenkinsのプラグインが開発できる!

ビアバッシュ

参加費で購入したというピザと、楽天のおごり(!!)の缶ビールで乾杯。
Jenkins特集が掲載される Web+DB PressJenkins実践入門オライリーのJenkins本BeeingGeekが抽選によりプレゼントされました。

まとめ

Keep
  • redmineに引き続きJenkinsの勉強会に参加。今後も開発の基盤に使うシステムに今後も参加する。出来れば年内にどこかで発表できるぐらいのネタを作りたい。引き続き社外でのプレゼンスを上げる努力。
Try
  • 前回のTryを踏まえ、今回はJenkins入れて行ったけど、iProxy有効にした場合に起動してくれなくなった...。要事前確認。

shinagawa.redmine 第二回勉強会に行って来ました #47redmine

1/21にshinagawa.redmine 第二回勉強会に行って来ました。場所は文京区の文京グリーンコートセンターオフィス。IPAさんによる会場提供での開催でした。

講演

@daipresentsさん: 数千人が利用する楽天Redmineの過去と未来
  • 自分も使っているParlkinglot chart Pluginの作者。
  • 楽天の中でたくさんプラグインを書いていて、いくつか使われなくなったものもあったけど、これは成功。
  • 時間コストの見える化に成功。redmine浸透。チーム力増加。という効果があったそうです。
  • 資料が早速アップロードされていました。
@vegashrineさん:日本語全文検索について
  • サポートツールの一部としてredmineを使っている
  • その流れで既存ドキュメントもredmineで管理しようという取り組み。
  • そのために過去のドキュメントをOSSを使って全文検索の対象にしようというのがメイントピック
@yohshiyさん: プラグイン開発ガイド
@mikoto20000さん: ALMinium について
  • redmineをこれから使う人のために、簡単にインストール&セットアップするためのツールALMinium
  • リポジトリも作ってくれて、SVN, Git, Mercurialに対応とのこと。
  • 3種の神器:yum, git, alminium
    • yumでgitをインストールして、gitでalminiumチェックアウトして、alminiumインストールw

LT

@TrinityTRedmineチケットによるプロジェクト火消し戦略!!
  • トリアージトリアージ・棚卸し
  • 5分以上かかるタスクは全部チケットに登録して、優先度設定。
    • 自分でやるって決めたタスクをやりきってもらう。
    • ヘルプを頼む場合も頼みやすい。
  • 複数会社絡む場合には、"<会社名>担当なし"というのを作っておくとどの会社担当かわかって良い。
@naitohRedmine PDF文字化け問題とその修正について
  • Redmine本体のチケットの修正についての問題の解決方法について
@me_umacha:Graph Activitiesについて
@akiko_pusu:○○からのメッセージをお読みください。
  • 管理者からの連絡を全ページに表示させたい。
    • 例えばWikipediaの「〜からのお願いをお読み下さい」みたいな感じで。
  • Redmine Banner Pluginについてに紹介がある。
@yando:CandyCaneについて
  • PHPでのRedmine clone。
  • プラグインインストールのたびに再起動・DB再構築などを行う必要が無い。これいいね。

まとめ

Keep
  • redmineなど、開発の基盤に使うシステムに今後も参加する。
    • ちょっと社外でのプレゼンスを上げる努力も。
Try
  • ネット環境はたいていの場合ないので、その対策を考えなきゃ。
    • iPhoneにiProxy入れて使ってるけど、https: やgit: が通らなくて現地で困った。
  • redmineをMacBookAirにインストールしておく。
    • 現地で試してみたいときとかに何もできない...