Cruisecontrol と Hudson は、2 つの一般的な継続的インテグレーション システムです。どちらのシステムも自動化された連続ビルドを適切に実行できますが、バッチまたは bash ビルド スクリプトを作成し、Windows スケジューラまたは cron を使用してビルドをスケジュールする方がはるかに簡単に思えます。
C++ プロジェクトで使用できる、より優れた継続的インテグレーション システムはありますか? それとも、スクリプトとスケジューラを使用する方が簡単ですか?
Cruisecontrol と Hudson は、2 つの一般的な継続的インテグレーション システムです。どちらのシステムも自動化された連続ビルドを適切に実行できますが、バッチまたは bash ビルド スクリプトを作成し、Windows スケジューラまたは cron を使用してビルドをスケジュールする方がはるかに簡単に思えます。
C++ プロジェクトで使用できる、より優れた継続的インテグレーション システムはありますか? それとも、スクリプトとスケジューラを使用する方が簡単ですか?
C++ プロジェクトで CI にCruiseControlを使用しています。ant を使用するのはこれだけですが、CruiseControl の ant ビルド スクリプトは通常のビルド スクリプトを開始するだけなので、非常に単純であり、長い間更新する必要はありませんでした。したがって、CrusieControl が Java ベースであるという事実は、私たちにとってまったく問題ではありませんでした。
クルーズコントロールのようなものを使用する主な利点は次のとおりです。
もちろん、これらすべてを実行するスクリプトを自分で作成することもできますが、なぜすべてが機能するのでしょうか? 長い目で見れば、CruiseControl (または類似のもの) をセットアップするための余分な初期コストは、おそらくカスタム CI ビルド スクリプトを維持および更新するコストよりもはるかに少ないでしょう。
デイリー ビルドを起動するだけで、cron で起動する簡単なスクリプトで十分な場合は、必ず実行してください。ただし、CI の利点の 1 つは、チェックインのたびにビルド ステータス レポートを取得できることです。それを行うスクリプトを作成するには、さらに多くの作業が必要ですが、CruiseControl は既にそれを行っています。
CI にはHudsonを使用し、コード メトリクスにはSonarQubeを使用します。それらは統合されており、Hudson には cronjob に勝るプラグインがいくつかあります。
優れたプラグインの 1 つは CI Game です。これは、誰がビルドを壊し、誰がそれを壊さずにコミットしたかについてスコアを保持します。Hudson には、VMWare、Selenium、SVN、CSV、Git と連携するプラグインがあります。RSS シンジケーションがあり、他のすべてをさらに自動化するのに役立ちます。
ハドソンいいなぁ…
Spring RTS エンジンプロジェクトにBuildbotを使用して成功しています。
Dart Dashboardを使用しています。オープン ソースですが、KitWareによって駆動されます。それ以来、彼らは名前をCDashに変更しましたが、これはまだ機能していると思います。私たちは、デバッグ モードとリリース モードの両方で 10 の異なるプラットフォームにわたる夜間および継続的な統合を含む、いくつかの種類のテストを行っているだけでなく、何千ものアプリケーション テストを実行し、そこで結果を報告しています。
JetBrains の TeamCityを試すこともできます。これは商用製品ですが、最大 20 のビルド構成に対して無料のライセンスを提供します。
継続的インテグレーション (CI) ツールの優れた機能の 1 つは、ソース管理リポジトリに何かがチェックインされるたびにビルドがトリガーされることです。
それが必要ない場合は、おそらく Windows タスク スケジューラまたは cron ジョブを使用する方がよいでしょう。
さらに、CI ツールには、(Web) ダッシュボードと高度なログ機能も付属しています。
あなたの質問は、「なぜCIツールを使用するのか」というよりも、「どのCIツールを使用すべきか」ということのように思えます。バッチ スクリプトが必要な場合は、それを使用してください。ビルド環境の (再) 作成は、CI ツールを追加コンポーネントとして必要としない場合にのみ簡単になります。ソース管理でトリガーされたビルド、ダッシュボード、古いビルド結果の保存、またはその他のログが必要な場合は、CI ツールを使用し、バッチまたはシェル スクリプトでそのような機能をすべて開発することは避けてください。