2

私の会社は、Visual Source Safe から Subversion に移行しています。当社のパイプライン管理ツールは、コードをバージョン管理からさまざまなテスト環境に移動するために、VSS が提供する「シャドウ フォルダー」の存在に依存しています。注: インタープリター型言語を使用し、ソース コードをオブジェクト コードに変換します。現在、ソース コードとオブジェクト コードの両方がバージョン管理下にあります (特にパイプライン管理機構のニーズのため)。

繰り返しのステップとして、Subversion にソース コードとオブジェクト コードの両方を保存する必要がないように、コミット時に翻訳を開始するという点で、シャドウ フォルダー機能を少し工夫して模倣しようとしています。注: コミット中に影響を受けるファイルを変換するためだけに、すべてのクリーンな「ビルド」を実行するプロセスをハックする必要がありました。このプロセスは、少しインタラクティブ性の低いもの (時間ごとのビルドなど) を優先します)。

この裏話はすべて、単に質問をするだけです: ${user.dir} プロパティはどのように設定されるのですか?

これは私のコミット後のフック バッチ ファイルです (すべて Windows で実行されます)。

SET REPO=%1
SET REV=%2

FOR %%* IN (%REPO%) DO SET REPONAME=%%~n*

SET BUILDROOT=E:\builds
IF NOT EXIST %BUILDROOT% ( MKDIR %BUILDROOT% )
SET BUILDDIR=%BUILDROOT%\%REPONAME%
IF NOT EXIST %BUILDDIR% ( MKDIR %BUILDDIR% )
CD %BUILDDIR%

ECHO %CD%
ECHO %BUILDDIR%

C:\apache-ant-1.8.3\bin\ant -f C:\dev\shadow\build.xml -DWorkingDir=%BUILDDIR%\!build_work_dir -DSvnRepoUrl=file:///%REPO% -DFromRevision=%REV% > %BUILDDIR%\!last_build_result.txt 2>&1

最後の行は実際の Ant 呼び出しです。%BUILDDIR% または E:\builds\ にあるファイルに出力をリダイレクトしていることがわかります。このファイルは期待どおりに作成されます。これは、 %BUILDDIR% が正しくセットアップされていることを示しているため、次のようになります。

CD %BUILDDIR%

行が実行されているはずです。SVN が空の environmentで post-commit フックを開始することは理解していますが、その中のディレクトリを変更すると、Ant が開始されると状態が保持されるはずです。

その後、Ant スクリプトで ${build.dir} プロパティを次のように設定します。

<property name="build.dir" value="${user.dir}\.build.${build.time}" />
<!-- delete the build.dir, just in case we attempt a new build within the same minute...
     TODO: we may need to account for concurrent builds; does SVN single-thread commits? -->
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />

%REPONAME% (バッチ ファイル内) が DEMO の場合、現在の作業ディレクトリは E:\builds\DEMO であると予想したため、${build.dir} は E:\builds\DEMO.build のようになります。 20120622.1127 ですが、代わりに C:\dev\shadow.build.20120622.1127 です。

私が理解しているように、Ant は単に${user.dir} のようなもののために Java からSystem.Propertiesを取得しています - ${user.dir} はUser's current working directoryとして記述されています。明らかに、私の実験に基づいて、バッチ ファイル内の初期セットアップと作業ディレクトリに関する Java の呼び出しの間で何かが交差しています。

Ant は作業ディレクトリをビルド ファイルの場所に変更しますか? それを示唆するドキュメントは見つかりませんでしたが、単に何かを見落としている可能性があります。%ANT_HOME% を定義しましたが、Subversion の「空の環境」を考えると、ロードされません...おそらく影響がありますか? 調査する必要がありますが、誰かがこれがどのように機能するかを簡単に知っていることを望んでいました.

編集 (2012-06-22-16:38):

%ANT_HOME%、%JAVA_HOME%、および %JAVA_CMD% をセットアップしようとしましたが、役に立ちませんでした。

4

1 に答える 1

1

さまざまなフックが実行されるサーバーでコミットを行う場合、作業ディレクトリはありません。これにより、フックを介して必要なことを行うことができなくなります。

Jenkinsをご覧になることをお勧めします。Jenkins は継続的インテグレーション サーバーであり、各コミット後に Ant スクリプトを実行できます。Jenkins は、作業ディレクトリに必要なチェックアウトと更新を行い、コミットのたびにこれを行うことができます。Jenkins には作業ディレクトリがあるため、ant プログラムを問題なく実行できます。

さらに、コミットが終了した後に Jenkins が実行されるため、コミットが待機していないため、開発者があなたに対する憎しみを膨らませるのに十分な時間が与えられます。たとえば、フック スクリプトの実行に 20 秒かかった場合、開発者は続行する前に 20 秒ほど待たなければなりません。

Jenkins では、ビルドしたオブジェクトを Jenkins 内に保存することもできるため、Subversion リポジトリに保存する必要はありません。これは、見つけやすい Jenkins にあるため、正しいリリースを簡単に見つけることができることを意味します。Subversion リポジトリが急速に成長するのを防ぎます。

そこで、やりたいことの解決策として Jenkins を見てみましょう。

于 2012-06-22T20:45:53.903 に答える