2011-12-04 45 views
0

私のsvn repoは/ home/httpd/svn/projectです。作業コピーは/ home/httpd/svn/project_workです。私は作業コピーを更新するpost-commitスクリプトを実行しています。そして、テストサイトとのrsyncsを実行しています。これは正常に動作します。svn作業コピーディレクトリから削除を削除しました

しかし、削除されたファイルも作業コピーディレクトリから削除する必要があります。私は現在私の作業コピーディレクトリにいる場合、このスクリプトが動作することを知っています:

svn status | grep '^!' | sedの/! * // '| xargs -I%svn rm%

私のポストスクリプトはsvn/hooksディレクトリで実行されています。上記のコマンドに作業コピーディレクトリ内のファイルを操作して、私のポストコミットスクリプトの一部とすることができますか?

私のスクリプトは次のようになります。

$SVN update $HOST/$SITE_WORK --non-interactive --username xxxxx --password xxxx >> $LOG 
$RSYNC -azv --exclude=.svn $HOST/$SITE_WORK/* /home/httpd/sites/$SITEDIR/doc-root >> $LOG 

答えて

1

本当に奇妙です。 Jenkinsは継続的なビルドシステムですが、このタイプのタスクを実行するのにも最適です。

私が推薦する何をやっているとは少し異なっている

- あなたはhttpdの話をしている場合は、特に:

  • 新しい作業ディレクトリにのsvn輸出を行います。これはきれいで、.svnディレクトリは含まれていません(SVN 1.7では以前のバージョンと同じようにどこにでも貼り付けていませんが)。
  • エクスポートが完了したら、古い作業ディレクトリの名前を一時的な名前に変更します。
  • 新しい作業ディレクトリの名前を古い作業ディレクトリの名前に変更します。
  • 古い作業ディレクトリを削除します。

これにより、同じディレクトリツリー内に古いバージョンと新しいバージョンのファイルが同時に存在する矛盾した状態になることを防ぎます。さらに、これは自己回復しています。なんらかの理由で古いアップデートが完了しない場合、新しいビルドはすべてをもう一度右に置きます。

新しいSubversionリリースを検出するたびにJenkinsを使用してこれを行うと、コミット後のフックが不要になります。問題は、そのコミット後のフックが実行されている間に、あなたのユーザが自分の机の上に座って、Subversionがポストコミットの作業にナインかノーを渡すのを待っていることです。さらに、rebuildボタンを押すと、問題がある場合に備えて作業ディレクトリを再構築することができます。ここで


は、それが動作する方法は次のとおりです。

  • ユーザーが自分の変更をコミットします。コミット後のフックはありません。ユーザーは、変更が良好かどうかをすぐに確認できます。
  • Jenkinsは変更を確認し、サーバ上でsvn exportを実行して新しい作業ディレクトリを作成します。
  • Jenkinsは、svn exportが成功したことを検出し、古い作業ディレクトリを別の名前に移動し、新しい作業ディレクトリの名前を古い場所に変更して、(オプションで)古い作業コピーを削除します。古い作業ディレクトリが矛盾した状態になることは決してありません。
  • 変更が行われたら、Jenkinsから電子メールを送信できます。 Jenkinsは、チェックインされたコードが良いかどうかを調べるためにいくつかのスモークテストを実行し、問題が検出された場合はアップデートを行わない可能性があります。
+0

ジェンキンスとコーダは一緒ですか?それが私たちが開発に使うものです。 –

+0

Codaは開発環境であり、Jenkinsはサーバー側で動作します。 Jenkinsはビルドシステムであり、ビルドのために本当に必要なシステムではありません。ただし、Jenkinsを使用して変更の追跡、テスト、構文チェックなどを行うことができます。そのほとんどは、展開とパッケージ化です。ちょっとした肘で、JenkinsにHTML/CSSの構文を確認させ、すべてのWebページのリンクが有効であるようにすることができます。 –

1

SVNサーバは、クライアント上で実行するコマンドを送信することはできません。必要に応じて、svnとカスタムスクリプトの両方を実行するために、各クライアントのsvnに別名を付けることができます。

また、svn rm <filename>で削除されたファイルは、すべてのクライアントで削除されます(svn up)。

あなたのスクリプトからは、すべてのステータス行が! svnを使用せずに作業コピーを変更したことを示します。からmanual

'!'
アイテムが見つかりません(たとえば、svnを使用せずに移動または削除した場合)。この は、ディレクトリが不完全であることを示します(チェックアウトまたは更新 が中断されました)。

あなたやあなたのユーザーが間違っているように聞こえます。

編集:これは、ファイルの削除についてテストセッションの写しである:

私は2枚の作業コピーにリポジトリをチェックアウトしてきた、彼らはSOFと私のディスク上のSOF2と呼ばれています。
sofではaFile.txtを追加してコミットしました。 sof2では、私はそのファイルをチェックアウトしました。これは、今どのように見えるかです:

$ svn info aFile.txt 
Path: aFile.txt 
Name: aFile.txt 
URL: http://xp-dev.com/svn/sof/trunk/aFile.txt 
Repository Root: http://xp-dev.com/svn/sof 
Repository UUID: d3d45886-b759-4dae-a297-3c88720da0c3 
Revision: 2 
Node Kind: file 
Schedule: normal 
Last Changed Author: wederbrand 
Last Changed Rev: 2 
Last Changed Date: 2011-12-05 19:53:11 +0100 (Mon, 05 Dec 2011) 
Text Last Updated: 2011-12-05 19:53:37 +0100 (Mon, 05 Dec 2011) 
Checksum: e5bc1e83330bccc8efe0e884b79a1c43 

は今、私は今、私は最新のアップデートを入手しようよどこSOF2し、

$svn rm aFile.txt 
D   aFile.txt 
$ svn commit -m'file deleted' 
Deleting  trunk/aFile.txt 

Committed revision 3. 
$ l 
<no files left in directory> 
$ svn info aFile.txt 
aFile.txt: (Not a versioned resource) 

と、ファイルがなくなっているSOFにそれを削除します

あなたはこのようなもの以外の動作を取得した場合
$ l 
total 8 
-rw-r--r-- 1 raven staff 36 Dec 5 19:53 aFile.txt 
$ svn up 
D aFile.txt 
Updated to revision 3. 
$ l 
<no files shown, it has been deleted> 

は、私はあなたが0を見てお勧めするつもりです:)

+0

私は実際に上記のスクリプトを使用していない、私は別の投稿からそれを見つけた。私のクライアントを使ってsvnを使ってパックを投稿すると、post-commitスクリプトが実行され、作業コピーが更新され、作業コピーがテストサイトと同期されます。クライアント上のファイル(svnを含む)を削除すると、ローカルドライブから削除され、リポジトリから削除されますが、作業コピーに残ります。私は、作業ディレクトリからすべてのsvnで削除されたファイルを削除するスクリプト可能なコマンドが必要です。 –

+0

私はあなたが何とかして間違っていると思う、私の編集をチェックしてください。 –

+0

編集していただきありがとうございます。私は問題は私が編集のためにMacのためのコーダを使用していることにあると思う。私がcodaで削除すると、それは削除のためのファイルをマークし、コミットすると、ファイルはローカルディスクから削除され、リポジトリから削除されます。次に、コミット後のスクリプトは更新を行いますが、rmは行いません。だからこそ私のポストコミットスクリプトに追加するrm行を探していたのです。私のスクリプトは次のようになります: $ SVNアップデート$ HOST/$ SITE_WORK - 非対話型 - ユーザ名xxxxx - パスワードxxxx >> $ LOG $ RSYNC -azv --exclude = .svn $ HOST/$ SITE_WORK/*/home/httpd/sites/$ SITEDIR/doc-root >> $ LOG –

関連する問題