2009年2月25日水曜日

ビルド結果のファイルを別のマシンへ転送する(maven, Hudson)

maven+hudsonを使ってビルドやら何やらを自動化しているが、成果物を別のマシンにscpしたいという要求が出てきた。これをHudson+plug-inでやるか、maven2+plug-inでやるか?で迷った。といぅか、どっちも目的の処理を行う事ができるplug-inがあるのか?からして謎だったw maven2はwagonを使った経験が遠い過去にあったので、それかなー?くらいに目星はついたが、Hudsonは一度設定してしまえばそぅそぅ触る事も無いしすっかり忘れかけていたり。

maven

ずばり、maven-wagon-pluginで正解だった。

  • deploy-pluginで別マシンへinstallする時と同じように、settings.xmlのservers要素の配下に転送先のserverの設定が必要。
    <server>
      <id>remotehost</id>
      <username>shin1ogawa</username>
      <password>password</password>
    </server>
  • pom.xmlはbuild/plugins配下に以下のように設定。この例ではpackageフェーズが実行されたタイミングで起動している。
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>wagon-maven-plugin</artifactId>
      <version>1.0-beta-1</version>
      <executions>
        <execution>
          <id>upload-jar</id>
          <phase>package</phase>
          <goals>
            <goal>upload</goal>
          </goals>
          <configuration>
            <serverId>remotehost</serverId>
            <url>scp://192.168.1.109/</url>
            <fromDir>target</fromDir>
            <includes>**/*.jar</includes>
            <excludes>*-sources.jar</excludes>
            <toDir>/home/shin1ogawa/tmp</toDir>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

Hudson

電車の中でiPhoneからぶつぶつつぶやいていたら、@kompiroからアドバイスが。

名前もそのもまんま。設定方法もシンプル。

  1. 上記リンクからプラグインファイル(*.hpi)をダウンロードして、Hudsonのルート画面から[Manage Hudson][Manage Plugins]をたどってプラグインをインストールしておく。んで再起動する。
  2. Hudsonのルート画面から[Manage Hudson][Configure System]をたどり、[SCP repository hosts]を設定する。例ではパスワードで認証する設定だけど、鍵ファイルを使う事もできそぅだ(項目があるし。これでできなかったらビックリする。)。
  3. ファイル転送を行うためのjobの設定画面を開き、[Post-build Actions]に表示されている[Publish artifacts to SCP Repository]にチェックを入れる。すると他のプラグインと同じように、プラグインの設定パネルが表示されるのであれこれ設定する。[Destination]にはHudsonの全体設定の[SCP repository hosts][Root Repository Path]で設定したパスからの相対パスを指定する。存在しないフォルダを指定してみると、ちゃんとフォルダを作ってから転送してくれた。

転送先が複数ある場合であれば、hudson+SCP-pluginだと複数のjobにしなきゃならん?ような気がするので、maven-wagon-pluginの方がいいかな。maven-wagon-pluginであればexecutionの定義をたくさん書いてしまえばいいだけだし。

コメントを投稿