1

私たちのビルド システムは非常に安定しており、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 が混在しています。

だからこそ、私はあなたに尋ねています:私たちは何をより良く、より速くできるでしょうか? ソフトウェアをどのようにリリースしますか?

4

1 に答える 1

1

2つのオプションを提案します。まず、すべてを 1 つの Maven ビルドにまとめることを検討してください。これらのモジュールが常に同時にリリースされる場合、それらを個別にバージョン管理および追跡する価値はありません。

また、プレーンなMaven、シェルスクリプトが混在しています

これを 1 つのビルドにまとめるには、これらのシェル スクリプトを Maven ライフサイクルに統合する必要があります。

または、ビルドが非常に複雑な場合は、Maven の外で自動化することを検討してください。これまでの手順はすべて、1 つのシェル スクリプトに組み込む必要があります。

これは手作業で行わなければならないプロセスです。私の知る限り、これを自動化できるツールはありませんよね?

プロジェクトを認識しているスクリプトは、適切なチェックとversions:set呼び出しを行うことができます。

単一の自動化されたスクリプトの下ですべてをまとめると、ビルド時間が 1 日未満に短縮される可能性があります。それでも長い場合は、継続的な配信のためにどのステージを高速化する必要があるかがわかります。

于 2013-06-10T10:32:43.890 に答える