web-dev-qa-db-ja.com

ビルドサーバー/ C ++ / Qtベースのプロジェクトの継続的な統合に関する推奨事項

QtベースのC++プロジェクトのビルドサーバーを実装したいと考えています。サーバーは、Subversionから必要なコード/アセットをチェックアウトし、実行可能ファイルをビルドし、インストールプロジェクトのアーティファクトをアセンブルし、インストールメディアファイルをビルドする必要があります。ターゲットプラットフォームと(大まかな)ツールチェーンは次のとおりです。

  • Windows(32ビットおよび64ビット): qmake、nmake、msbuild、wixツールチェーン。最終結果は、インストーラーEXEとDVDイメージです。
  • Mac OS X: qmake、make、パッケージをアセンブルするためのカスタムbashスクリプト。最終結果は、ディスクイメージとDVDイメージ内のアプリケーションバンドルです。
  • buntu(32ビットおよび64ビット): qmake、make、debuildベースのスクリプト。最終結果は、DEBファイルとDVDイメージのコレクションです。
  • Fedora(32ビットおよび64ビット): qmake、make、rpmbuildベースのスクリプト。最終結果は、RPMファイルとDVDイメージのコレクションです。

つまり、少なくとも4つのビルドエージェント(32ビットと64ビットを同じボックスで実行できない場合はそれ以上)と7つの構成になります。オープンソースプロジェクトが推奨されますが、これは絶対的な要件ではありません。

私が見ているツールのほとんどは、Java(Jenkins、CruiseControlなど)または.Net(CruiseControl.netなど))に対応しているようです。これらはC++ツールチェーンで使用できます。 、または私は常にシステムと戦っていますか?過去に使用して見つけたものはQt/C++でうまく機能しますか?

27
Dave Mateer

私は Jenkins を使用して、qmake、cmake、およびmakefileに基づく多くのC++プロジェクトをビルドおよびパッケージ化します。

Cmake、qmake、msbuildには plugins がありますが、任意のコマンドラインスクリプトも実行できます。

私はJenkinsを使用してパッケージ化を問題なく実行しました。これは、プロジェクトのコマンドラインのステップの1つにすぎません。

コンパイラによって生成された 警告/エラー の数を監視するための優れたプラグインがあります(私は通常GCCを使用します)。

また、コンパイラフラグ、プリプロセッサ変数、プラットフォームなどのさまざまな組み合わせでプロジェクトを複数回ビルドできるマトリックスビルドもあります。私が設定したプロジェクトの1つは、2つのプラットフォームで5つのブールプリプロセッサフ​​ラグを使用したマトリックスビルドです。 2 ^ 6 = 64ビルドします。これらを修正するには、設定に少し時間がかかる場合があります。

13
Silas Parker

ここで簡単な例を読むことができます:

継続的インテグレーションサーバー-ハドソン

ハドソン、ジェンキンス、ビルボットは試してみる価値があると思います。 1日か2日無駄に評価し、簡単な例で試してみると、自信を持って選択することができます。

4
kikeenrique

私が見ているツールのほとんどは、Java(Jenkins、CruiseControlなど)または.Net(CruiseControl.netなど))に対応しているようです。これらはC++ツールチェーンで使用できます。 、または私は常にシステムと戦っていますか?過去に使用して見つけたものはQt/C++でうまく機能しますか?

適度に機能するCIシステムには、ビルドコマンドに必要なプログラムを実行できる部分があります。

これが私が検討することです:

  • CIシステムは選択したシステムで実行されますか
  • ログを簡単に表示できますか?
  • テストランナーと統合されていますか
  • コードカバレッジレポートと統合されていますか(例:BullseyeCoverage w/C++&Qt)
  • ニーズに合った方法でファイルを公開しますか
  • 必要に応じて、ファイルのアーカイブ/ストアを提供します(例:pdbs&lib * .so.debug)
  • CIシステムが機能Xをサポートしていない場合、サポートされているOS /システムごとにそれを作成する必要がありますか
  • CIシステム/ UIはyoを使用するのが簡単ですか。

私はCruiseControlを使用して上記を実行しましたが、ほとんどのことは非常に簡単でした。私はすべてをmakeまたはqmakeで記述し、実行する必要のあるコマンドを呼び出すだけでした。単体テストとコードカバレッジの統合のために、XMLに出力し、CruiseControlでサポートされるものに変換しました。

私の推奨では、推奨されるCIシステムを見て、上記の基準に基づいてそれらを調べます。

3
Kaleb Pederson

これには buildbot を使用しています。使用して4年になりますが、とても満足しています。

これはpythonで書かれたアプリケーションで、サーバー上で実行され、さまざまなOS上の複数のクライアントを管理できます。現在、Windows XP、Windows 7、Debian、Ubuntu、CentOSビルドスレーブを使用しています。私のプロジェクトはC++であり、そのうちの1つ(エンドユーザーGUI)はPythonで作成されています。しかし、GUI以外の機能のために、他のフレームワークとも統合しました。

Buildbotの本当に良いところは、スレーブでコマンドラインを実行することで機能することです。これにより、あなたは何でも好きなことができます。 WindowsシステムでもVisualStudioを使用してコンパイルできます!これらのコマンドラインから、すべての出力をサーバーに集中させてアクセスできます。

また、これらの多くを参照するこの site の代替案を見つけることができます。 免責事項:3年前に見ましたが、それでも正確かどうかはわかりません。

2
Didier Trosset

質問がすでに7歳であることを考えると、Jenkinsは、このようなカスタムサービスの開発で確かにかなり人気があります。

Felgo は、Qtの継続的インテグレーションおよびデリバリー(CI/CD)サービスも提供します。デスクトッププラットフォームとiOS、Androidおよび埋め込みターゲットをサポートしています。完全な機能セットは ブログ投稿 で説明されています。

免責事項:私はFelgoのソフトウェア開発者です

1
Alex Huber

ハドソンまたはジェンキンスはかなり良いです。

1
Sergei Nikulov