私たちのビルド システムは非常に安定しており、CI 用の Nexus と Jenkins を備えた Maven で構成されています。(SNAPSHOT を使用して) 開発している限り、すべて問題ありませんが、リリースには常に時間がかかりすぎます。
そういうわけで、皆さんはリリースをどのように行っているのだろうかと思います...特に、継続的な展開が間近に迫っています。
私たちのビルドシステム
3 つの階層的な親 POM があります。
- プラグインとその構成を定義する「ビルド」の親。
- 外部アーティファクトとそのバージョンを定義し、それらを制御下に置く「外部バージョン」の親。
- 独自のアーティファクトとそのバージョンを定義する「内部バージョン」の親。
次に、通常のユーティリティ プロジェクト、その他のベース プロジェクトなどがあります。これらは、開発中に SNAPSHOT 依存関係として使用されます。
弊社リリース
リリースの時期になると、プロジェクトの主任開発者は SCM にブランチを作成し、SCM のヘッドで次の SNAPSHOT に切り替えます。
その後、ビルド チームはすべてのブランチで作業を続け、POM とプロジェクトをリリースします。
基本的に、リリースされたコンポーネントが確実に使用されるように、階層的にリリースする必要があります。これは、最初に 3 つの親 POM をリリースしてから、ボトムアップで開始することを意味します。つまり、ユーティリティ プロジェクトをリリースし、次にユーティリティ プロジェクトを使用するベース プロジェクトをリリースし、次にユーティリティ プロジェクトとベース プロジェクトの両方を使用する他のプロジェクトをリリースします。
これは手作業で行わなければならないプロセスです。私の知る限り、これを自動化できるツールはありませんよね?
プロジェクトがリリースされた後に「内部バージョン」POM を更新するために、バージョン プラグインを使用してその POM の自動更新が行われます (命の恩人です!)。これは、プロジェクトを Nexus にリリースしてから、リリースされている他のすべてのプロジェクトがそのリリース バージョンを使用していることを確認することを意味します。
最後に、すべてのプロジェクトがリリースされ、Nexus で見つけることができるようになったら、EAR をビルドして、リリースされたアーティファクトをデプロイし、EAR を運用担当者に引き渡します。
全体として、これにはリリースごとに約 1 日かかります。これは多くの無駄な時間のように思えます。また、プレーンな Maven、シェル スクリプト (ビルド ユーティリティ クラスと Maven を使用)、および UI (リリース プラグイン) としての Jenkins が混在しています。
だからこそ、私はあなたに尋ねています:私たちは何をより良く、より速くできるでしょうか? ソフトウェアをどのようにリリースしますか?