1

さて、サーバーにSVNレポがセットアップされました。「DEV」フォルダーに更新されるコミット後のフック設定があるため、変更をコミットすると、サーバー上の「DEV」サブドメインに自動的にプッシュされます。

私が今必要としているのは、準備ができたときに「ライブ」サブドメインにプッシュする簡単な方法です。「ライブ」サブドメインは同じサーバー上にあり、実際には、DEV と同じ svn update /... コマンドになりますが、パスは異なります。

私は自分のレポに特定のファイルを含めることができると考えていました。おそらくこのファイルを変更して、コミット後のファイルで何らかの条件を作成して、その特定のファイルが変更された場合に「ライブ」ディレクトリにも更新することができます.

しかし、そのコードの書き方がわかりません。現在、コミット後のファイルは次のようになっています。

#!/bin/sh

REPOS="$1"
REV="$2"

svn update /var/www/dev/public

基本的にこれを行うにはそれが必要です(ただし、明らかに正しい構文で)

#!/bin/sh

REPOS="$1"
REV="$2"

svn update /var/www/dev/public
if (pushLive.txt has changed) {
  svn update /var/www/live/public
}

誰か提案はありますか?

4

2 に答える 2

3

更新には長い時間がかかる可能性があるため、コミット後のフックを介してこれを行うことはありません。つまり、ユーザーは、ワークステーションを再び制御できるようになる前に、更新が完了するのを待つ必要があります。

ジェンキンスを見てください。

Jenkinsは継続的ビルドサーバーですが、ビルドがなくても使用できます。あなたの場合、それを使用してライブドメインのSubversionリポジトリを監視できます。JenkinsがそのSubversionURLでコミットを検出すると、ビルドプロセスを生成できます。あなたの場合、それはライブサーバー上のファイルを更新するでしょう。

サーバーがJenkinsを実行している同じマシンである場合、Jenkinsの作業ディレクトリを/ var / www / live/publicディレクトリに簡単に指定できます。(デフォルトでは、Jenkinsはの下$JENKINS_HOME/jobs/<jobname>/workspaceにビルドディレクトリを作成しますが、Jenkinsにはそれを指定できるオプションがあります)。そうすれば、プログラミングはまったく必要ありません。これは、コミット後のフックで遊ぶよりも速くて簡単です。

ちなみに、この方法をとる場合は、クリーンなディレクトリに新しい更新を作成してから、ディレクトリの名前を変更することをお勧めします。それ以外の場合、Subversionがサーバーを更新すると、以前のSubversionリビジョンと現在のSubversionリビジョンのファイルが同時に存在します。これにより、更新の実行中に誰かがサーバー上にいた場合に問題が発生する可能性があります。

于 2012-01-30T19:54:35.793 に答える
2

これが最も効率的な方法であるかどうかはわかりません。また、この最初のケースは、ディレクトリに関係なく「pushLive.txt」というファイルで技術的に機能するため、それで遊んだり、ファイルが一意であることを確認したりできます...

#!/bin/sh

LOOK=/usr/bin/svnlook
REPOS="$1"
REV="$2"

for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`;
do

  idx=`expr index "$changes" =`;
  directory=${changes:$idx};
  action=${changes:0:$idx-1};

  case "$directory" in
    *pushLive.txt )
      case "$action" in
        "U" )
           svn update /var/www/dev/test/public
           ;;
      esac
      ;;
  esac
done

exit 0
于 2012-01-31T03:36:53.463 に答える