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に変更しました。これでファイル名の一覧が表示されるようになります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント