Jenkins+svnで差分ビルドを行う方法

Jenkins+svnで差分ビルドを行う方法

Jenkinsでsvnからチェックアウトするとタイムスタンプがチェックアウトした時間になってしまいます。

追記—start

SVNサーバのC:\Users\ユーザ名\AppData\Roaming\Subversion配下のconfigの[miscellany]セクションに以下記述すると、コミットのタイムスタンプでチェックアウトできるようになります。

[miscellany]
use-commit-times = yes

追記—end

差分だけを本番環境に移送を行いたかったので、svnと本番環境とファイルサイズが異なるファイルのみを判断してantで移送する必要がありました。

コマンドプロンプトのdirコマンドでサブフォルダ含めフルパスを取得することはできますが、サイズを取得することができません。

以下はフルパスを取得する方法です。/a-dでディレクトリ名は非表示にしています。

dir /a-d /b /s D:\Jenkins\workspace\deploy\

但し、これではファイルサイズが表示されませんので以下のような形式でテキストファイルに出力するようにしました。

フルパス名|ファイルサイズ

以下コマンドで取得可能です。

C:\>echo off & ( for /f "delims=" %i in (' dir /a-d /s /b D:\Jenkins\workspace\deploy\ ') do echo %i^|%~zi ) > D:\svn.txt & echo on

これでsvn.txtにファイル名とファイルサイズを|で区切ったファイルが出力されます。

次にsvn.txtをsortコマンドでアルファベット順にソートします。

sort svn.txt /o svn_sort.txt

これでsvn_sort.txtはアルファベット順になります。

同様にこの一覧のコマンドを本番でも実行し、production_sort.txtを作成します。

この二つのファイルをfcコマンドで比較します。

これで比較できると思ったのですが、dirコマンドはフルパスでファイル名を出力します。

そのため、svnサーバのディレクトリ位置と本番サーバ位置が異なる為、diffをするとディレクトリ部分が異なると判断されます。

以下、例です。

D:\Jenkins\workspace\it_deploy\src\jp\co\confrage\A10Batch.java|4910

\xxx.xxx.xxx.xxx\d$\~\WEB-INF\classes\jp\co\confrage\A10Batch.java|4910

希望は以下の通りです。

A10Batch.java|4910

A10Batch.java|4910

ということでファイル名の未出力するように変更します。

C:\>echo off & ( for /f "delims=" %i in (' dir /a-d /s /b D:\Jenkins\workspace\deploy\ ') do echo %nxi^|%~zi ) > D:\svn.txt & echo on

do echo %i^|%~ziを、do echo %nxi^|%~ziに変更しました。これでファイル名の一覧が表示されるようになります。

コメント

タイトルとURLをコピーしました