web-dev-qa-db-ja.com

ライブラリの構築時に開発パイプライン内でサーバーを実装する

これは semver 自体の仕様(これは非常に明確です)ではなく、ライブラリを構築するときに開発パイプライン内で実装するための最良のアプローチです。


TL; DR:バージョンを設定し、アーティファクトをデプロイするのは誰/何ですか?いつですか?


内部のMavenベースのGitHubでホストされるJava libsは他の人たちにとって役立つ可能性があるため、一部をオープンソース化する予定です。

  • GitHubアクションを介したCIパイプライン、master、および更新されるたびに直接masterに行くPRでテストを実行します。

さて、バージョンを更新して成果物を配信するための最良のアプローチは何ですか?私はいくつか見ることができます:

  • 「リリース駆動型」であること:GitHub UI(github.com/owner/repo/releases)を介してGitHubリリースが手動で作成されるたびに、別のパイプラインが開始され、作成されたタグを読み取ってフェッチし、mvn versions:setを実行してからmvn deploy(単純に入力)。その場合、実際にコミットされたPOMのバージョンを変更する必要はありません。 0-SNAPSHOTに滞在できます。

  • 「マージドリブン」であること:PRがmasterにマージされるたびに、上記とほぼ同じパイプラインがトリガーしますが、POMのバージョンを使用します(またはデフォルトでパッチ番号を自動的にインクリメントするか、それに沿って何かを行います)行)。次に、対応するGitHubリリースを自動または手動で作成する必要があると思います。

  • 完全に手動である:バージョン管理とリリースを何らかの方法で処理した後、一部の開発者は手動でmvn deployを実行する必要があります。

  • あなたのアプローチ。

人々はどうやってそこに進みますか?最善の方法はありますか?内部サービスとライブラリの場合、masterへのマージが成功すると、いくつかのバージョン番号がインクリメントされてデプロイメントがトリガーされますが、semverを厳密に追跡したい場合、これは適切なアプローチですか?

また、semverはバージョンに意味があるため、完全に自動化することはできないと思いますか?一部の人間は、今後のリリースがパッチか、マイナーかメジャーかをシステムに認識して伝える必要があると思いますか?

同様に留意すべき1つのケースは、変更(たとえば、セキュリティパッチ)を、まだ維持されている古いバージョンにバックポートする必要がある場合です。


私は opensource.stackexchange.com で最初にこの質問をしましたが、それは本当にOSSに関連しているのではなく、サーバーに関係していることに気付いたので、代わりにここで運を試しています。

1
sp00m

オープンソース製品について話しているとき、バージョン管理とリリースのスケジュールはチームのポリシーに基づいています。私がいくつかのApache Software Foundationプロジェクトに参加していたとき、プロセスは次のようになりました:

  • チームはSemVerポリシーを決定します(つまり、次に来る番号)
  • 役員はリリースサイクルの開始時期を決定します
  • プロジェクトリーダーはそれらのバージョンを展開します

注:これは、ユビキタスCI/CDパイプラインとパッケージマネージャーの時代の前でした。そのため、プロセスの多くは自動化されています。

ただし、私が現在見ているバリエーションは、リリースブランチに昇格するもの(プロジェクトマスターであるか、専用の名前付きブランチがチームのポリシーに基づいているか)の責任者がプロジェクト担当者であるということです。

厳格なルールはありませんが、オープンソースの大きなことはコミュニティの合意を得ることです。これは通常、Slack、Gitter、メーリングリスト、またはその他の非同期通信によって獲得されます。チームが方向性と一連の機能について合意すると、次のバージョン番号が決まります。

方向の大きな変更は通常、いつかメインブランチを追い抜くブランチで開発されました。このようにして、マイナーバージョンの更新とバグ修正の更新が、主要な変更の準備が整うまでメインブランチから配信されます。

1
Berin Loritsch