2007年5月24日木曜日

robocopyとeclipseとant

windows上でrobocopy&eclipse&antで
1.フォルダの同期
2.バックアップ
を自動化してみた。

以下のxmlをeclipseに読ませて外部ツールのantを実行すると、
xmlのあるプロジェクトのsrc以下のファイルを一度c:\export\srcへエクスポートして、エクスポート先と目的のフォルダが同期をとります。
そして同期前にバックアップをc:\export\bkに作成する。
ちなみに同期時のrobocopyのログはc:\export\logに吐き出すようにしてます。
一応動いたので満足w

昨今はeclipseをみんな良く使うなーと思って、でも、実際に実行環境(テスト、ステージング、本番含む)にアップする
時に人手が介在すると結構余分なファイルがアップされる(.svnとか平気でアップされる)のが嫌なんです。
かと言って、限られた人しかアップしないとかナンセンス。
なので、人手が介在しないようなシステム(仕組みというか手順)を用意するのがそもそもですよね?
って感じでこれからも研究していきたいと思われ。
人類猿化計画にまた一歩近づいた気がするw
<?xml version="1.0" encoding="UTF-8"?>
<project name="upload_test_up" default="test_up" basedir=".">

  <!-- *** properties *** -->
  <property name="export.src.path" value="c:\export\src" />
  <property name="export.target.path" value="${basedir}\src" />
  <property name="bkup.path" value="C:\export\bk\src_" />
  <property name="syncronize.log.path" value="C:\export\log\syncronize_" />
  <property name="syncronize.command" value="robocopy" />
  <property name="syncronize.option" value="/E /PURGE" />
  <property name="syncronize.src.path" value="c:\export\src" />
  <property name="syncronize.target.path" value="c:\export\syncronize\src" />

  <target name="init" depends="export">
    <tstamp></tstamp>
  </target>

  <!-- *** control this project *** -->
  <target name="test_up" depends="init,export,syncronize">
  </target>

  <!-- *** update from SVN *** -->
 
  <!-- *** export without svn directory *** -->
  <target name="export">
    <copy todir="${export.src.path}">
      <fileset dir="${export.target.path}" />
    </copy>
  </target>

  <!-- *** syncronize target directory *** -->
  <target name="bkup" >
    <!--
    <copy todir="${bkup.path}${DSTAMP}${TSTAMP}">
      <fileset dir="${syncronize.target.path}" />
    </copy>
    -->
    <zip destfile="${bkup.path}${DSTAMP}${TSTAMP}.zip" basedir="${syncronize.target.path}" />
  </target>

  <target name="syncronize" depends="bkup">
    <exec executable="${syncronize.command}" os="${os.name}" output="${syncronize.log.path}${DSTAMP}${TSTAMP}.log">
      <arg line=" ${syncronize.option} '${syncronize.src.path}' '${syncronize.target.path}'" />
    </exec>
  </target>
</project>


0 件のコメント :

コメントを投稿