1つのプロジェクトに2つのビルド構成があります。
I want Deploy Code to run only if Build & Test Code built successfully, so I set up a snapshot dependency.
Does a snapshot dependency mean that Deploy Code will check out the same SVN revision as Build & Test Code and then run the NAnt script against that checkout, which will not contain the compiler generated post-build files? Or, will a snapshot dependency on Build & Test Code from Deploy Code mean that the NAnt will run against the post-build, working directory files of Build & Test Code on the build agent?
UPDATE:
It seems if I put a snapshot dependency on Build & Test Code for Deploy Code and I have a build of the latest revision for Build & Test Code, my NAnt script will deploy the post-build files for that build of Build & Test Code.
I would still like to confirm that I understand the concept, as I don't really understand the Team City documentation. I think I should probably make sure Deploy Code runs on the same build agent as Build & Test Code, otherwise I might run into a case where Deploy Code checks out the SVN revision and then just deploys the pre-build code files. Is this correct?
私の混乱は主に、Deploy CodeのVCS設定が必要なためです。リビジョン番号とスナップショットの依存関係を比較する必要があるからですか?
Dependent Builds docoページのスナップショット依存関係セクションから:
ビルド構成Aからスナップショットへの依存関係 構成Bは、Aの各ビルドが「適切な」ビルドを有することを強制する 両方のビルドが同じソースのスナップショット(使用されたソース リビジョンは同じ瞬間に対応しています)。
したがって、スナップショット依存のアイデアは、正常に実行された別のビルドとまったく同じコードベースに対してビルドを実行できるということです。
ビルドとテストコードが正常に実行された後にのみ "デプロイコード"ビルドを実行する場合は、2番目のビルドでスナップショットの依存関係を作成し、 "適切なビルドのみを適切なものから使用する"に設定されていることを確認します。
これは人工物とは何の関係もないことに留意してください。 2番目のビルドは単純に同じコードベースを引っ張り、それを再び全部再コンパイルします。最初のビルドから作成されたアーティファクトを展開する場合は、代わりにアーティファクト依存関係を見たいと考えています。これはPaulが答えたところで書いたもので、正しいアプローチです。
あなたのアップデートに関しては、ビルド後のファイルは、最初のビルド後にビルドエージェント上に残っているため、利用可能であるように聞こえます。最初のビルドを実行してから、エージェントで「ソースのクリーニング」を実行し、2番目のビルドを実行してみてください。オリジナルのコンパイル出力はもはや存在せず、失敗するでしょう。複数のビルドエージェントがある場合や、2つのビルドの間にある程度の時間がかかる場合は、まだそこに存在する人工物として保存されていない出力に依存できないため、これは重要です。
はい、TeamCityのドキュメントは混乱しています:)
私はTeamCityのセットアップが非常に似ていますが、MSBuildはNAntではありませんが、同じ2ステップのビルドプロセスを使用しています。どのように設定したのか説明したらうまくいけば、何をする必要があるのか理解できるようになります。
私のセットアップでは、ビルド1はソース管理からコードを取り出し、コンパイルして単体テストを実行します。次に、デプロイメントに必要なすべてのファイルを成果物としてパブリッシュします。
ビルド2にはビルド1のアーチファクト依存関係のスナップショットとがあり、これはコードを作成しないということを意味し、単にビルド1のアーチファクトを取り出して展開するだけです。
実際には、これはビルド2をトリガーできることを意味し、2つのうちの1つが起こります。ビルド1が最新の場合は、ビルド1の最後の成功ビルドの成果物を単純に配置します。ただし、ビルド1が最新でない場合、TeamCityは自動的にビルド1を起動し、その後ビルド2を実行します。ビルド。