継続的な統合により、成長する多様なコードベースを維持する
継続的インテグレーションセットアップの哲学と設計について、いくつかの助けが必要です。 現在のCIセットアップではbuildbotを使用しています。それを設計し始めたとき、私は(厳密には、一年前にその設計に関わっていたため)、ビルド全体を一度に一晩実行するように調整されたオーダーメイドのCIビルダーを継承しました。しばらくして、これは不十分であると判断し、さまざまなCIフレームワークの調査を開始し、最終的にビルドボットを選択しました。buildbotへの移行における私の目標の1つ(ウィズバンのエキストラをすべて楽しむ以外に)は、オーダーメイドのナイトリービルダーの不備のいくつかを克服することでした。 私をちょっとユーモアして、私が受け継いだものを説明させてください。私の会社のコードベースは約150のユニークなc ++ Windowsアプリケーションで、それぞれが1ダース以上の内部ライブラリ(および多くのサードパーティライブラリ)に依存しています。これらのライブラリーの一部は相互依存しており、依存関係のあるアプリケーションがあり(それらは相互に何の関係もありませんが)、そのライブラリーの同じビルドでビルドする必要があります。これらのアプリケーションとライブラリの半分は「レガシー」で移植不可能と見なされており、IBMコンパイラーのいくつかの異なる構成で構築する必要があります(私はの固有のサブクラスを作成しましたCompile)。残りの半分はVisual Studioで構築します。ShellCommands、VSSのサポートがないため)。 オリジナルの夜間ビルダーは、すべてのソースを単純に削除し、特定の順序でビルドしました。単一のアプリケーションだけをビルドしたり、リビジョンを選択したり、グループ化したりする方法はありませんでした。仮想マシンを起動して、多数のアプリケーションを構築します。あまり堅牢ではなく、配布できませんでした。それはひどく拡張可能ではありませんでした。私はビルドボットのこれらの制限をすべて克服できるようにしたかったのです。 私がこれを最初に行った方法は、構築したい各アプリケーション(すべて150アプリケーション)のエントリを作成し、さまざまなアプリケーションをグループとして構築できるトリガースケジューラを作成し、全体的なナイトリービルドスケジューラの下にそれらのグループを含めることでした。これらは専用スレーブで実行でき(仮想マシンシカネリーは不要)、必要に応じて新しいスレーブを追加することもできます。これで、予定外のフルビルドを実行したい場合は、ワンクリックで実行できますが、必要に応じてアプリケーションを1つだけビルドすることもできます。 ただし、このアプローチには4つの弱点があります。1つは、ソースツリーの複雑な依存関係のWebです。設定のメンテナンスを簡略化するために、すべてのビルダーは大きな辞書から生成されます。依存関係は、それほど堅牢ではない方法で取得およびビルドされます(つまり、ビルドターゲットディクショナリ内の特定のものをキーオフします)。2つ目は、各ビルドに15から21のビルドステップがあり、Webインターフェイスで閲覧および確認するのが難しいことです。約150の列があるため、ロードに永久に時間がかかります(30秒から数分と考えてください)。3つ目は、ビルドターゲットの自動検出機能がなくなったことです(ただし、同僚の1人が私にこのことを気にかけているのと同じように、そもそも何が私たちにもたらされたのかわかりません)。最後に、 現在、新しい開発に移行し、g ++とsubversionを使用し始めています(古いリポジトリは移植しないでください。新しいものに限って)。また、より多くの単体テスト( "more"は誤った結果をもたらす可能性があります...それは他のものに似ています)、および統合テスト(pythonを使用)を開始しています。これらを私の既存の構成にどのように組み込むかを理解するのに苦労しています。 それで、私はここで哲学的にどこが間違っているのですか?どのようにすれば、自分の構成を実際に保守可能にするために(buildbotを使用して-これは私が取り組むライセンスを持っている唯一のパズルのピースです)先に進むことができますか?デザインの弱点に対処するにはどうすればよいですか?大規模な(おそらく過度に)複雑なコードベースのCI戦略に関して、実際に機能するものは何ですか? 編集: 私は自分の問題を説明したと思ったが、明らかに十分に明確ではなかった。私はない CIのプラットフォームを変更するための提案を探しています。それは起こらないでしょう、そしてそれが受け入れられないことを示唆する答え。私が知りたいのは、他の人々がCIを使用して複雑なコードベースをどのように管理するかです。私は十二乗の異なる製品を持っています、そして依存関係が風に散らばっていて、それらはすべて異なります。これは私がどのように対処するか知りたいものです。