2016-04-12 27 views
0

TeamCityの新バージョンで、別のCI製品から移行し、TeamCityバージョン9.1.6のC++プロジェクトの作業ビルドを構成する方法を見つけようとしています。TeamCity C++ gradle buildはアーティファクト依存関係を削除します

私が抱えている問題は、エージェントがコンポーネントビルドの直前(またはその間)に依存関係ディレクトリを削除していることです。なぜビルドログのどこにこの問題が起こっているのかの記録が見つかりません。

、システム内の任意のコンポーネントのビルドレイアウトはそうのようになりますので、

<base-dir> 
    | 
    +---<to-be-built> 
    +---<dependency-1> 
     +---Include 
     +---Lib 
    +---<dependency-2> 
     +---Include 
     +---Lib 

は...、checkoutDirはコンポーネントのあるものは何でも、すべての依存関係がピア・ディレクトリに発見されることが想定され、依存関係に基づいて名前が付けられ、フォルダ名にバージョン情報はありません。例えば

、「MyExe」のバージョン3.0.2は、「SomeLibA」と「SomeLibB」のバージョン2.1.0のバージョン1.1.0に依存する場合、ファイルシステムはそれほどのようになります。

MyExe_3.0.2 
    | 
    +---MyExe 
    +---SomeLibA 
     +---Include 
     +---Lib 
    +---SomeLibB 
     +---Include 
     +---Lib 

したがって、このビルドレイアウトを作成するには、 "MyExe"のバージョン3.0.2のビルド設定で、 "MyExe_3.0.2/MyExe"のようなカスタムチェックアウトディレクトリが指定されています。

これまでのところ、とても良いです。依存関係は成果物依存として構成され、その宛先ディレクトリーは '../'として指定されます。これもまた簡単です。

私がビルドを開始すると、ビルド対象のコンポーネントが取得されているのを確認した後、依存関係が到着したことを確認してから、ビルドのために設定したgradleタスクが実行されます。すべての依存関係ディレクトリ(SomeLibAとSomeLibB)が抹消され、もちろんそのコンポーネントは依存ファイルのどれも見つけることができず、インクルードファイルとコンパイルは失敗します。

コンポーネントのチェックアウトディレクトリ内のすべてのファイルをクリーンにし、すべての依存関係上で 'アーティファクトをダウンロードする前にコピー先パスをクリーンアップ'を無効にしましたが、これは無効です。

この動作に関連する可能性がある2つのヒントしか見つかりませんでしたが、どちらの原因でこの問題が発生するのかわかりません。

最初は、「MyExe」の「バージョン管理設定」タブで、「このディレクトリはビルド前にTeamCityで消去される可能性があります」という小さな警告記号で、カスタムディレクトリを参照しています。しかし、ビルド実行中に消去されるディレクトリは、checkoutディレクトリではなく、checkoutディレクトリの親ディレクトリです。

私が見つけることができる唯一の他の候補は、私が設定したgradleタスクが、ビルドの実行時に指定された唯一のタスクではないということです。ビルドログで "gradlew.bat myGradleTask"を見るのではなく、 "gradlew.bat --init-script C:\ TeamCity \ BuildAgent \ plugins \ gradle-runner \ scripts \ init.gradle myGradleTask"を見ています。

しかし、私はそのinitスクリプトを見てきましたが、ディレクトリクリーンアップに関連するものは何も見ませんでした。

私は困惑しています。誰もが何が起こっているのか、それを回避する方法を知っているので、このビルドは正常に完了できますか?許容可能なソリューションは、上記のビルドレイアウトの要件を維持する必要があります。

答えて

0

ここでの問題は、「ビルド前にチェックアウトディレクトリのすべてのファイルをクリーン」を無効にしていたことです。

このチェックボックスを無効にすると、パス全体の内容がチェックアウトディレクトリに書き込まれます。 https://confluence.jetbrains.com/display/TCD9/Clean+Checkout

関連の抜粋があるから

...:

自動クリーンアウト

クリーンチェックアウトが有効でない場合は、チームシティー

参考

は、こちらのドキュメントを参照してください チェックアウトディレクトリ内のソースを必要な状態に増分的に更新します。 TeamCityは、 が、チェックアウトディレクトリ内のソースが期待される状態に対応する ではないかどうかを検出し、ソースが適切であることを確認するために のこのような場合にきれいなチェックアウトをトリガします。

これは、VCS設定 では有効ではなく、Web UIからユーザーからリクエストされていない場合でも、TeamCityがクリーン チェックアウトを検出できることを意味します。このような場合、チェックアウトディレクトリのコンテンツはすべて削除され、 によってソースが最初から再設定されます。 の決定で利用可能な詳細があれば、チェックアウトに関連するログの前にビルドログに追加されます。

このチェックボックスを有効にすると、依存関係ディレクトリをそのまま残すことができます。

関連する問題