cpio を使う

  • 本番サーバーへのファイルリリースってどうしていますか?
  • アプリケーションに関するファイル群を一式デプロイしてますか?時間はかかるかもしれませんが、間違いがないですね。
  • 変更のあったファイルだけコピーしてますか?必要最小限で済みますが、ファイルの差し替えが面倒ですよね。
  • このページは、ソース管理にSubversionを使用し、かつ、変更ファイルのみをcpioでリリースする場合のメモです。

変更ファイルを列挙

なるべく余分なものを省いています。が、先頭のパスとかはまだちょっと余分です。あと、削除ファイルがやばい。

svn log -r1000:HEAD -qv | grep '^ ' | sed "s/^   [AMR] //" | sed "s/(from.*)//" | sort | uniq

リリースアーカイブを作成

開発環境等をターゲットのリビジョンにupdateし、下記のようにcpioアーカイブファイルを作成します。(ヒアドキュメントにしてあるけど、ファイルでも良し)

cpio -o << 'EOF' > release_version_2.cpio
apps/action.php
lib/hogeMaker.class.php
template/ja/top_page.php
EOF

下記コマンドでアーカイブの内容を確認できます

cpio -it < release_version_2.cpio


リリース前のソースをバックアップ

本番環境のソースをいきなり上書きすることになる(それもどうかと思われるが、ここでは無視)ので、念のため現状ファイルをバックアップしておきます。 これもアーカイブ作成と同じ手順です。存在しないファイルは無視されます。(万が一戻す場合は気をつける)

cpio -o << 'EOF' > release_version_2_backup.cpio
apps/action.php
lib/hogeMaker.class.php
template/ja/top_page.php
EOF

リリースする

リリースアーカイブを本番ソースセットに上書きします。ディレクトリはアーカイブ作成時と同じ位置で実行します。

cpio -idmu < release_version_2.cpio


元のソースに戻す

まるごと戻す場合

cpio -idmu < release_version_2_backup.cpio

個別ファイルを戻す場合(後ろにファイルを指定)

cpio -idmu < release_version_2_backup.cpio apps/action.php lib/hogeMaker.class.php


※削除ファイルは気をつける

facebook slideshare rubygems github qiita