C++継続的統合のためのbuildbotとhudson/jenkinsの比較
質問
私は現在、ほとんどがC++の大規模なプロジェクトで継続的インテグレーションにjenkins/hudsonを使用しています。 私たちは、トランクとすべてのブランチのために別々のプロジェクトを持っています。 また、Javaコードのためのいくつかの関連するプロジェクトがありますが、それらのためのセットアップは、今はかなり基本的です(私たちは後でもっとやるかもしれませんが)。 C++プロジェクトは次のようなことを行っています。
- 再構成、クリーン インストール、またはフレッシュ チェックアウトを使用するかどうかのオプションを指定してすべてをビルドします。
- オプションですべてのテストをビルドして実行します。
- オプションで Valgrind の memcheck を使用してすべてのテストを実行します。
- cppcheck を実行します
- doxygenドキュメントの生成
- レポートの発行: ユニットテスト、valgrind、cppcheck、コンパイラの警告、SLOC、オープンタスク、コードカバレッジ (gcov、gcovr、および cobertura プラグインを使用)。
- テスト環境とパッケージリポジトリに毎晩またはオンデマンドでコードをデプロイします。
すべては自動ビルドのために設定可能であり、オンデマンドビルドのためにオプションです。 その下には、この多くを制御する bash スクリプトがあり、automake と autoconf をカスタム bash スクリプトと共に使用する私たちのビルド システムに大きく依存しています。
私たちが Hudson を使い始めたのは (当時)、Java の人たちが使っていたもので、私たちはただ毎晩のビルドを望んでいただけでした。 それ以来、私たちは多くのものを追加し、さらに追加を続けています。 ある意味では Hudson は素晴らしいものですが、確かに理想的ではありません。
他のソリューションも見てみましたが、代替になりそうなのは buildbot だけです。 この状況では、buildbot の方が良いのでしょうか? すでに Hudson を使用しているので、その投資に見合うだけの価値がありますか? なぜでしょうか?
EDIT : ある人が、なぜ私がHudson/Jenkinsを理想的だと思わないのか、と質問しました。 短い答えは、すべては改善することができるということです。 私は、Jenkinsが私のユースケースにとって現在の最良のソリューションなのか、それとも、新しい要件が出てきても長期的にメンテナンスしやすい何か良いもの(buildbot?)があるのか、単に疑問に思っています。
どのように解決するのですか?
どちらもオープン ソース プロジェクトですが、buildbot のコードを変更して "拡張する必要はありません。例:独自のコンパイルやテストコード、次のステップに渡す出力やエラーの解析、アラートメールの独自のフォーマットなど、多くの可能性があります。
一般的に、buildbot は最も汎用的な自動ビルドツールであると言えると思います。しかし、Jenkins はテストの実行に最も適しており、特に、buildbot ではできないことですが、結果を解析して美しい方法で表示します (結果、詳細、チャートなど、数回のクリックで表示されます)。私は実際に、よりセクシーなテスト結果ページを持つために、両方を使用することを考えています... :-)
また、経験則として、新しいツールの設定を作成するのは難しくないはずです。何をすべきか(設定、ビルド、テスト)の仕様が、あるツールから別のツールに切り替えるのが難しすぎる場合、それは設定スクリプトが十分にソースに移動されていない(悪い)兆候と言えます。Buildbot(またはJenkins)は、単純なコマンドを呼び出すだけでよいのです。テストを実行するのが簡単であれば、開発者もそれを行うようになり、成功率が向上します。一方、継続的インテグレーションシステムだけがテストを実行する場合、新しいコードの不具合を修正するためにその後に実行することになり、非進行性の価値が失われてしまうでしょう。)
お役に立てれば幸いです。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】Enterキーを押して続行する
-
[解決済み] Jenkinsを手動で再起動する方法は?
-
[解決済み] 継続的インテグレーションと継続的デリバリーと継続的デプロイメントの比較
-
[解決済み】Jenkinsのビルドの現在の状態をGitHubのリポジトリに表示する
-
[解決済み] Pythonのための "きれいな "継続的インテグレーション
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】C++の余分な資格エラー
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている