私は、build.gradle ファイルをセマンティック バージョンを使用するように変換するイニシアチブの真っ最中です。Gradle の使用に加えて、Git も使用し、Gitflow ワークフローに従っています。Jenkins は、プロジェクトのビルドに使用されます。
リリースされたアーティファクトのバージョンは、MAJOR.MINOR.PATCH 形式に従います。build.gradle ファイルで依存関係を宣言する場合、10.0.+ などの動的バージョンを使用します (つまり、最新の 10.0.PATCH バージョンを使用します)。
アーティファクトを Release Candidates リポジトリから Nexus の Releases リポジトリに昇格させます。リポジトリのポリシーは「リリース」に設定されています。製品の複雑さ (200 以上のプロジェクト、多くのアップストリームとダウンストリームの依存関係がある) のため、Jenkins で利用できるプロモーション プラグインの多くは不十分なようです。アーティファクトの名前を変更し (10.0.0-rc.1-abcdefg は 10.0.0 になります)、正しい Nexus リポジトリにアップロードする方法として、Jenkins にマスター ブランチを構築させることを考えていました。
アップストリームの依存関係でパッチのバージョンが増加している状況を処理する方法がわかりません。ダウンストリーム プロジェクト (WAR) は Jenkins によって再構築され、新しい JAR がバンドルされますが、ダウンストリーム プロジェクトのバージョンは変更されません。Nexus にアップロードしようとすると、同じバージョンを持つことができるアーティファクトは 1 つだけであるため失敗します。
次に例を示します。
- Releases Nexus リポジトリには、10.0.0 でバージョン管理されたアップストリーム API と 10.0.0 でバージョン管理されたダウンストリーム プロジェクトがあります。
- ダウンストリーム プロジェクトはアップストリーム API の 10.0.+ に依存します
- アップストリーム-api.jar は、ダウンストリーム-project.war ファイルにバンドルされています
- 2 つの成果物は、製品のリリース X の一部としてデプロイされます
- ホットフィックス ブランチがマスターにマージされると、upstream-api のバージョンが 10.0.1 に変更されました
- この修正は、デプロイされると、製品が Release X' になることを意味します。
- ダウンストリーム プロジェクトは 10.0.0 のままですが、アップストリームの依存関係の変更により再構築されます
- Jenkins は、downstream-project-10.0.0.war が既に存在するため、Nexus へのアップロードに失敗します
古いアーティファクトを新しいアーティファクトに置き換えることもできますが、その場合、Release X は Nexus のアーティファクトから展開できなくなります (たとえば、ロールバックの場合、または古いリリースの問題を複製する必要がある場合)。
これは通常どのように処理されますか?