読者です 読者をやめる 読者になる 読者になる

Jenkins(Hudson)とMercurialで引っかかったこと

メモ書き。

Jenkins(Hudson)でMercurialと連携を取ろうと、まずはWindowsにバイナリインストーラMercurialをインストール。バイナリインストーラMercurialを入れたので、環境設定もバッチリでコマンドプロンプトで"hg"コマンドがすぐに使える状態に。

その後、JenkinsでMercurial Pluginをインストール。


そして、試しにプロジェクトを作って動かしてみたのですが、Mercurialリポジトリのクローンをとろうとしたところでエラーが発生して動きませんでした。

確認するとJavaのIOExceptionが発生していて、「Cannot run program "hg": CreateProcess error=2」とのこと。

もちろん、もう一度試してみてもコマンドプロンプトでは"hg"は実行可能で原因がよくわからない。
いろいろ情報をネット上で見たものの、あまり解決に至る情報が無くどうしようかと思っていたのですが、「試しにJava以外のプログラミング言語からも"hg"コマンドが動かないのか試してみよう」ということで、手っ取り早くPythonで試してみると、確かに同じように実行できない。

これは設定の問題かも、ということでその環境変数に設定されたディレクトリ下の"hg"という実行ファイルを探ってみたところ、「hg.cmd」というファイルみたいだった。「hg.cmd」から別のディレクトリの「hg.exe」にリダイレクトしてMercurialを動かしているらしく、プログラムが"hg"という名前だけでは「hg.cmd」を認識できていなかったということらしい。

単純に自分で作ったプログラムなら"hg"で呼び出そうとしていた部分を"hg.cmd"に書き換えればいいものの、今回は取ってきたプラグイン内の処理。さすがに呼び出すところを探しに行って"hg"を"hg.cmd"に書き換えるのもいかがなものかと。

ただ、"hg.cmd"は実質「hg.exe」を呼び出しているだけで、「hg.exe」ならプログラム側からも"hg"だけで呼び出せるので、「hg.exe」の存在するディレクトリに環境変数を変更すれば解決するはず。

早速、環境変数を「hg.exe」の存在するディレクトリ変更して試してみたところ、問題なく動作。
みんな大して引っかからないのかな・・・それとも最近の仕様変更で起こったことなのかな・・・。

以上、分かれば大したことのないハマりどころでした。

広告を非表示にする