ソフトウェア リリースを構成するバイナリ ファイル (入力コンポーネント) のコレクションを管理するツールを探しています。これはソフトウェア製品であり、過去 20 年間、毎年複数のバージョンをリリースしてきました。ファイルの詳細と種類は異なる場合がありますが、これは多くのソフトウェア チームが管理する必要があるものです。
ソフトウェアリリースは何でできていますか?
ソフトウェア リリースには、次のようなファイルが混在しています。
- Windows 実行可能ファイル/バイナリ (40 個の DLL と 30 個以上の EXE ファイル)。
- インストーラーがデータベースを作成するために使用するスクリプト
- さまざまなプラットフォーム (.NET、ActiveX、および Java) の API アセンブリ
- ドキュメント ファイル (HTML、PDF、CHM)
- サンプル アプリケーションのソース コード
リリースの 1 つのバージョンで収集される完全なファイルは、約 90 MB です。ほとんどはソース コードから構築されていますが、一部はサード パーティ製です。
手動プロセス
昔はこれを手動で管理していました。
- 新しいリリースを開始するたびに、最後のリリースのビルドに使用されたファイルが共有ドライブの新しいフォルダーにコピーされます。
- 開発者は、このフォルダー内のファイルを手動で追加または更新します (誤って失われたり削除されたりしないことを願っています)。
- ソフトウェア インストーラー スクリプトは、このフォルダー内のファイルを使用してコンパイルされ、SETUP.EXE (出力) が生成されます。
- リリースまで、検証とテスト中にステップ 2 と 3 を繰り返します。
自動プロセス
数年前、私たちは CI (毎晩またはオンデマンドでバイナリをビルドする) を採用しました。
サードパーティのバイナリは通常それほど頻繁に変更されないため、バージョン管理下に置くことにしました。
次に、CI ビルド出力に基づいて、リリース用のファイルを収集および更新するプロセスを自動化しました。最後に、SETUP.EXE の構築を自動化することができました。
残りのギャップ
ここまでは順調ですが、2 つの問題が残ります。
- アセンブリの再構築 CI は主に、何かが変更されたときにプロジェクトを構築しますが、強制されると、コードが変更されていないバイナリを再コンパイルします。出力は、以前にテストしたバイナリの新しいビルドです (ヒント: これらが同等であると常に信頼する必要がありますか?)。
- 最新 vs 安定ほとんどの CI マシンは、各プロジェクトの最新バージョンをビルドします。場合によってはこれで問題ありませんが、多くの場合、テスト済みまたは安定版の古いバージョンをリリースしたいと考えています。これを行うために、最新ビルドと安定ビルド用に別々の CI プロジェクトを用意しています。これは機能しますが、扱いにくいです。
ここまでお待ちいただきありがとうございます:-)
探しているものがまだ見つからない
しばらく解決策を探した後、独自の解決策を構築する方が簡単かもしれませんが、他の誰かが以前にこれらの問題を解決したことは確かです!?
私たちが必要としているのは、バイナリ ファイル (CI からの出力またはサード パーティ ファイルのいずれか) を保存および管理する方法であり、それぞれが次のことを可能にするバージョン (v1.2.3.4) でタグ付けされます。
- 各バイナリの新しいバージョンを公開するための CI (ただし、既存の再構築されたバージョンは拒否します)。
- 開発チームは、含めるコンポーネントを指定するソフトウェア リリース (NuGet packages.config のようなもの) のレシピを作成します。
- パッケージ名
- バージョン
- リリース フォルダーのパス/宛先
- レシピを使用する自動パッケージ スクリプトは、必要なファイルを収集し、インストール パッケージ (例: SETUP.EXE) をコンパイルします。
バイナリを VCS に保存することについての過去の議論を認識しています。今のところ、より良い解決策を探しています。そのアプローチは、長期継続的な使用 (たとえば、古いバイナリをプルーニングする方法など) には理想的ではないようです... 他の問題の中でも特に。
現在利用可能なアーティファクトリポジトリをいくつか試しました。私の調査によると、これらはコンポーネント/アーティファクトのストレージとバージョン管理のソリューションを提供します。ただし、ソフトウェア リリースに含めるコンポーネント/アーティファクトのリストを管理するためのツールは提供していません。
このためのツールを知っている人はいますか?
CI インフラストラクチャでこれらの残りの問題に対処する方法を見つけましたか?
この問題を解決するためにアーティファクト リポジトリを使用している場合、プロセスをどのように管理および自動化しますか?