豚吐露@wiki

TortoiseSVNでCheckInしたタイミングでbuildする

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

TortoiseSVNでCheckInしたタイミングでbuildする

Windows Server 2012R2 Essentials
Jenkins 1.592 ※Windows Binary版
SubVersion 1.6.17
TortoiseSVN 1.8.8

svn側のフックスクリプトを使えない時にどうしようか悩んだ挙句...
TortoiseSVNのクライアントフックをbuildトリガにする方法を考えた。

似たような名前でも、SubVersionのフックスクリプトとは、動作タイミングが異なるので要注意。
Hook Type Timing
Start Commit Hook コミットダイアログが表示される前に呼ばれる。
Pre-Commit Hook コミットダイアログでOKボタン押下後、コミット処理が始まる前に呼ばれる。
Post-Commit Hook コミット処理が終わった後に呼ばれる。
Start Update Hook 進捗ダイアログが表示される前に呼ばれる。
Pre-Update Hook 実際にsvnに対して要求を出す前に呼ばれる。
Post-Update Hook 実際に出した要求に対する処理が行われた後に呼ばれる。
svn up、svn switch、svn coなどの処理の後でも呼ばれるらしい。
Pre-Connect Hook リポジトリに接続を行う前に呼ばれる。5分間隔くらいで呼ばれるらしい。

以下のように設定してみる。

『Hook Type』は、上に書いたように設定した処理が動くタイミングを指定する。
『Working Copy Path』は、多分、フック処理の対象となるworkを指定する。なので、workの場所が変わったりなんかすると、ちょっとめんどい。
まさか、全部のworkに設定する訳にもいかんしなぁ...
『Command Line To Execute』は、そのタイミングで行いたい処理ですね。vbsやbatを使ってやれば良い。

次にチェックボックス。
『Wait for the script to finish』をONにすると、Tortoiseは、設定された処理が終わるまで待ってる。
『Hide the script while running』をONにすると、処理が走るダイアログを隠す。コマンドプロンプトとかが見えんようにできるっぽぃ。
『Always execute the script』をONにすると、対象外のWORKで行われた場合でも、処理が動くみたい。

で、試しに特定のURLにアクセス(Get)するvbsを書いてみたのがコレ。

  1. Option Explicit
  2. Dim targeturl, http
  3.  
  4. targeturl="http://192.168.1.10:8080/job/RemoteBuildTest/build?token=RemoteBuildToken"
  5. Set http = CreateObject("MSXML2.XMLHTTP")
  6. http.Open "GET", targeturl, False
  7. http.Send
  8.  
  9. If 201 <> http.Status Then
  10. WScript.Echo "Build Request NG: " & http.Status & " " & http.StatusText
  11. End If
  12.  
  13. Set http = Nothing

と、言うわけで、Jenkinsのリモートビルドがチェックインの度に動く予定が...svn upとかのタイミングとかでも動いてしまう訳ですね...(´・ω・`)

大人しく『SCMをポーリング』でトリガ引いた方が良い気がする...


あと、どんなに頑張っても『%REPOROOT%』が使えんかったんですが...何か使う方法あるんでしょうか?



更新日: 2014年12月10日 (水) 18時33分41秒

名前:
コメント:

すべてのコメントを見る
添付ファイル
記事メニュー
ウィキ募集バナー