Archive for the ‘ソフトウェア’ category

会社でgitを使い始めたのでWEB+DB Press Vol.50を読み直した

9月 22nd, 2009

今年のはじめからちょくちょくチャレンジしては壁に跳ね返されていたGitですが、先週あたりからようやくまともに使えるようになってきました。前提条件はこんな感じ

  • 共有リポジトリはSubversion、今後もずっとSubversion
  • プログラムはWindowsとLinuxで動くように作ってる、ソースは1種類
  • エンコーディングはBOM有のUTF-8、改行コードはLFCR
  • LinuxのgccはBOM有だと受け付けてくれないのでビルド前に文字コード変換を挟んでいる
  • Subversionのリポジトリは複数プロジェクト共同で、古いリビジョンだと存在しないパスがあったり、パスが途中で変わったりしている

何回かチャレンジしたときはmsysgitを使ってgit svnでのチェックアウトを試みたのですが、昔のリポジトリに同じパスのデータが無いのがまずいのかエラー終了してしまうところであきらめていました。
今回は出たばかりのTortoiseGitのバージョン1系を使い、TortoiseGitで(実際にはmsysgitなんだけど)svnリポジトリからのチェックアウトを試みて、昔のリビジョンだとエラー終了するのを指定リビジョン以降のチェックアウトに限定することで回避しました。

修正や機能追加の際にトピックブランチを作って平行開発、終わったらmasterにマージしてsvn dcommitして共有リポジトリにアップ。こんな流れで周囲の和を乱すことなく開発を進められる所まで来ました。途中gitの意味不明なエラーに遭遇したものの、TortoseGitのバージョンがこなれていくに従って徐々に減っていくでしょう。

gitの使い方はWebとWEB+DB Press Vol.50のgit特集と、オーム社の入門gitを使って勉強しました。Webの情報は古いのが引っかかったり、そもそもズバリな悩みの解決法がまだ見つかりにくく、オーム社の入門gitはリファレンスとしては有用そうに見えるのですが、git stashなど基本的なコマンドの解説が無く、WEB+DB PRESSのが一番使えることに間違いなさそうです。

gitのコミッターが書いた秀和システムの入門gitが先週土曜日に発売されましたが、Amazonからまだ発送されてきません。内容はWEB DB Pressをさらに深くしたものらしいので、日本ではこれが決定版になりそうな気がしています。

WEB+DB PRESS Vol.50 (大型本)
477413838X 入門git (単行本(ソフトカバー))
427406767X 入門Git (単行本)
4798023809

Hudsonのよくわからないエラー

9月 20th, 2009

SCMのポーリングが実行
Updating http://example.com/svn-repos/
FATAL: Unable to call getCredential. Invalid object ID 109
java.lang.IllegalStateException: Unable to call getCredential. Invalid object ID 109
at hudson.remoting.RemoteInvocationHandler$RPCRequest.perform(RemoteInvocationHandler.java:268)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:255)
at hudson.remoting.RemoteInvocationHandler$RPCRequest.call(RemoteInvocationHandler.java:215)
at hudson.remoting.UserRequest.perform(UserRequest.java:104)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:236)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)

Windowsのスレーブで1.317から出るようになったみたい。
Subversionのリポジトリをポーリングしてビルドを動かすようにしているけど、出るときとでないときがあります。1回目はエラーがでて、2回目は出ない感じ。何なんでしょう?

・・・

下のスレッドで議論されている内容が原因みたい。斜め読みだけどSingletonの使い方がおかしいのかな?
Nabble – Hudson dev – Error in SubversionSCM “Unable to call getCredential”
このnabble.comってのはどんなサイトなんだろう? 修正パッチも有ったみたいだけどHudsonのMLには同様の情報は流れてないのかな。

・・・

よくHudsonのバグリストを探してみたら見つかった、これな気がする。
hudson: 課題 4176
現在もステータスはOpenになってるし、問題として認識されているんだろう。
個人的には毎日何回もエラーメールが飛んできて困るので2票ほど投票してみた。結構根が深い問題なのだろうか、気長に待とう。

Hudsonを稼働させてるサーバにVMWare Server2をインストールしたら片方起動しなくなった

4月 2nd, 2009

タイトルの問題に今日の仕事中悩んでました。
きっかけはCentOS 5.3のアップデートで、サーバを再起動するついでに前からやりたかったVMWare Serverのアップデートもやってしまおうかと思ったことでした。

VMWare Server2からはWebインターフェースで仮想マシンにアクセスする仕様になってますが、裏ではTomcatが同梱され動いているようです。んでHudsonを動かすTomcatとVMWare Server2が使うTomcatが何らかの原因で共存できなくて問題が起こったようです。

本当は○○すればこの問題は解決します とまで調べて書きたいのですが、他の業務に押されて調べきれず、結局VMWare Serverのバージョンを元に戻してしまいました。

Javaが得意な方で、どの辺の設定をいじれば良いものか検討がつく方はいましたらコメントで教えてください m(_ _ )m

Hudson 1.273を試してみた

1月 14th, 2009

Hudsonコミッタの id:ssogabeさんに言及されてたのでHudson 1.273を試してみました。

前に書いた不満点に

  • マスタにラベルが割り振れない
  • Windows 64bitでサービス登録できない

の2点がありましたが、2点とも今回のリリースでなおっているとchangelogに記載がありました。

マスタにラベルを振る機能は自分が望んでいた通りのものでした。WindowsとLinuxを混在させた環境を作るためにマスタで直接実行するのをさけ、あえてslaveとして登録させていましたが、この設定は早速削除しました。

もう一点の64bit Windowsでのサービス登録はやっぱりうまく行きませんでした。エラーのスタックトレースはこんな感じでした。

java.io.FileNotFoundException:

http://example.jp:8080/jnlpJars/remoting.jar

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown
Source)

HudsonのURLが

http://hudson.example.jp:8080

ではなく

http://example.jp:8080/hudson/

なので、どうも要求しているリソースのURLがあってない気がします。これも登録済みのバグなのかな?

2009年1月21日追記
Hudson 1.277でなおったようです。無事に64bit Windowsでもサービス登録できました。
VistaだとUACが悪さをして登録できないようですが、一時的にUACを切ればいけます。

Redmineは右クリックができる

1月 6th, 2009

Redmineのチケット画面で右クリック

今日0.8にアップグレードして気がついたのですが、チケット一覧を表示するページで右クリックが使えるんですね。所定のチケットの優先順位や状態などを一括して変更できて非常に便利です。

JavaScriptで実現しているんだと思うのですが、最近のWebアプリはすごいですね。

WindowsでのHudson設定に難儀

11月 16th, 2008

WindowsとLinuxの混在環境が構成できたと先週ブログに書いたばかりですが、WindowsではSlaveがいつの間にかオフラインに切り替わってしまう現象が頻発して実運用には使えない状態であることが分かりました。ログとかを眺めていますが、Hudsonに関する情報はまだまだネット上に少なくてバグなのか、自分の設定ミスなのかも切り分けられません。ちなみにエラーメッセージはこんなのです

2008/11/12 9:04:04 hudson.TcpSlaveAgentListener$ConnectionHandler$1 onClosed
警告: Connection #46 terminated
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at hudson.remoting.Channel$ReaderThread.run(Channel.java:637)

2008/11/12 9:04:04 hudson.remoting.Channel$ReaderThread run
致命的: I/O error in channel machine1
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at hudson.remoting.Channel$ReaderThread.run(Channel.java:637)

2008/11/12 9:03:53 hudson.TcpSlaveAgentListener$ConnectionHandler error
警告: Connection #47 is aborted: machine1 is already connected to this master. Rejecting this connection.

Hudsonの1.262には修正したバグに”Slave installed as a Windows service didn’t attempt automatic reconnection when initiail connection fails. “なんてのがあるようですがこれとは違うようだ… VMWare上のOSをSlaveに使っているのが何かまずいのだろうか。

ついでにWindows環境のSlaveですが、Windows Vista Businessの64bitを使おうとしたところ、Windowsのサービス登録に失敗しました。これもBTSに登録されているバグなんでしょうか?

会社のメールアドレスでHudsonの日本語メーリングリストに登録したから、もうちょっとBTSを探してみて、現象を報告してみよう。

※11/17追記
HudsonをアップグレードしたらSlaveが離脱する問題が解決した模様。
VMWareが影響してネットワークが途中で切断していたのだろうか。
Vista 64bitでサービス登録できないのは相変わらず、エラーメッセージは以下の通り

WMI.WmiException: AccessDenied
場所 WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
場所 WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
場所 WMI.Win32ServicesProxy.Create(String , String , String , ServiceType , ErrorControl , StartMode , Boolean )
場所 winsw.WrapperService.Run(String[] args)
場所 winsw.WrapperService.Main(String[] args)

HudsonのWindows/Linux混在テスト環境できたよー♪

11月 6th, 2008

ということで、業務の空き時間をちょこちょこ使うことでついにWindows/Linuxの混在ビルド環境ができました。

環境を書いておくと

ホストOS:CentOS 5.2
ゲストOS(VMWare Server): Windows Vista / Ubuntu 8.10

で、HudsonをホストOSに入れTomcatで運用。
WindowsをJNLPで、Ubuntuをsshでslave.jarを呼び出す形でSlaveに追加し、ホストOSも同時実行するインスタンス数はHudsonの設定で0にし、別途Slaveとして追加しています。つまりMaster1台+ Slave3台です。

前はLinuxのSlave追加に悩んでいましたが、理屈が分かってからはWindowsの方が設定に悩みました。
以下Windowsの設定で悩んだことです。

1. WindowsでVisualStudioを使ってビルドするときはSlaveのサービスを起動するユーザをHudsonを動かすユーザにする必要がある。
そうじゃないとビルド時にオブジェクトが一致しないとか言うエラーメッセージが出てビルドができない。
discypusさんで解決情報を見つけたはずなんだけど検索しても見つけた情報が見つからなくなってる orz

2. JNLPでWindowsをSlaveに追加しHudsonをサービスとして起動するとき、Slaveの名称に半角スペースを含んでいるとサービスが起動しない。

3. 自分の環境だとなぜかWindowsのSlaveが一定時間経つとHudsonとの接続がきれ、サービスが勝手に終了してしまった。原因は分からないがWindowsのサービス設定で自動的に再起動するように設定したら大丈夫そう。

まだまだ改善点はありますが、大分ノウハウもたまってきました。

Hudsonについて試行錯誤

10月 22nd, 2008

Java製のContinuous Integrationツール Hudsonで試行錯誤しています。

実現したいのはWindows/Linux双方の環境で自動的にテストできる環境を用意することです。HudsonにはSlave機能があって、Masterとなるサーバに複数のSlaveをぶら下げ、Slaveでテストを行わせることができます。
今日いろいろと試していて分かったのは、Slaveには”windows”,”linux”といったラベルを付加することができ、テストに対してどのラベルに関連づけられたSlaveで実行するかを指定することができる。ただしMasterにはラベルをつけることができないので、Windows/Linux混在環境だとMasterにビルドを行わせることはできなそうだということ。

多分Masterはテストの管理をするだけに徹して、Masterを動かしているPC上でテストを行わせるには同じPCでMasterとSlaveを動かせばいいんでしょう、なんか変な気がしますが。

困っているのが、Slaveの登録がLinuxでうまくできないことです。HudsonではJNLPを使った登録がサポートされていますが、Linuxだとうまく動きませんでした。また時間を取って試行錯誤してみたいと思います。

そうそう、WindowsでのビルドをMSBuildでやろうと思ってVisualStudio Express Editionをインストールしたけど、これにはMSBuild.exeって入ってないんですね。 理想のテスト環境の実現にはもうちょっと試行錯誤が必要そうです。

○2008年10月27日追記
MSBuildはProgram Filesじゃなく、WINDOWSフォルダの奥深くにあるんですね。VisualStudioじゃなくて、.NETFrameworkに付属するソフトなのかしら。
MSBuildはあったけど、コンパイラと連携して動いてくれなくてコマンドラインでのビルドテストはできず、残念

CIツールはHudsonがいいみたい

10月 1st, 2008

少し前にCでも使えるようなCIツールを探していたことがあって、そのときはbuildbotというpython製のツールを試してみたのですが、うまく動かすことができませんでした。いろいろあってしばらく調査から離れていたのですが、Java製のCIツール Hudsonを試したところ非常に使いやすく、この前の苦労は何だったのかと思ってしまいました。

自分がCIツールに欲しかった機能は

  • Subversionリポジトリへのポーリング機能
  • 柔軟なビルド設定(任意のシェルスクリプトが動かせて、任意のディレクトリで、任意のビルドコマンドを実行(makeとか))
  • 警告があったときもログを確認することができる。
  • ぐらいなんですが、Hudsonはいずれの機能も備えていて、使い始めも、設定も本当に簡単です。

    Webアプリを使って久しぶりに感動しました。Web上の情報は一部のユーザ(と開発者)がブログに書いてあるものぐらいですが、Java以外の用途にも広がっていって欲しいなと思います。

    # というか前に調べたときにJavaでしか使えないのかと勘違いしていました。

    特集:Hudsonを使ったアジャイルな開発入門|gihyo.jp … 技術評論社

Spicebird

3月 29th, 2008

Spicebird

Thunderbirdベースの情報管理ツールです、ソースは Open Tech Press

メールもチャットもスケジュールも統合してくれるのは少し前なら飛びつくところなんだけど、すっかりGMailになれて最近ではThunderbirdすら起動しなくなってしまいました。メールとかスケジューラはやっぱりローカルアプリを使いたい人向けなのかな。

Pages: Prev 1 2 3 4 5 6 7 8 9 10 ...24 25 26 Next