問題タブ [conventional-commits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
567 参照

gitlab - セマンティック バージョニングまたは Lerna Publish を使用して CI/CD からデプロイするときに、Master ブランチと Dev ブランチが同期されていることを確認する方法

設定

master一般的なセットアップには、ブランチ、stage(プレリリース) ブランチ、およびブランチが含まれるいくつかの gitlab リポジトリがありますdev

3 つのブランチすべてでプッシュ権限が無効になっています。

devワークフローは、すべてのホット フィックス、バグ修正、および機能のためにブランチからフォークすることです。リリースに満足したら、マージリクエストを に送信しdevます。最終的に、内部で安定したビルドの準備が整うとdev、; stageブランチに対してマージリクエストが送信されます。最後に、プレリリースに満足したら、masterブランチのマージ要求を送信します。

ファイルの自動生成を使用して、masterおよびstageブランチからテスト、ビルド、および展開が自動的に実行されるように、CI/CD を構成しました。ブランチは UAT s3 バケットにデプロイされ、本番 s3 バケットにデプロイされます。CHANGELOG.mdstagemaster

デプロイはSemantic Versioning 2.0.0、バージョンのバンプ、変更ログの生成、およびデプロイを担当する によって処理されます。

モノレポであることを除いて、上記と同様のセットアップを使用しているため、の動作をレプリケートLernaするために発行 (デプロイ) を処理するために使用しています。monorepo 内で独立したバージョン管理を使用しています。{"conventionalCommits": true}Semantic Versioning 2.0.0

と の両方のSemantic Versioning 2.0.0設定により、ブランチは常にとのブランチの後ろまたは同じになるようにLerna強制されます。ブランチは、カスケード効果のようなもので、常にブランチの後ろまたは同じになるようにします。masterstagedevstagedev

dev>= stage>=master

問題

と の両方Lerna PublishSemantic Versioning、公開/展開時にファイルにいくつかの変更を加えます。これらの変更には、ファイルの更新とCHANGELOG.mdファイル内のバージョンのバンプが含まれpackage.jsonます。

Lerna とセマンティック バージョニングはどちらも、最終的にこれらの変更を、CI/CD を介して実行元のブランチにプッシュします。

devこれが意味することは、 からにマージするstageと、セマンティック バージョニングまたは Lerna Publish の実行によって、ステージのバージョン番号が増加し、新しい変更ログがステージにプッシュされるということです。これにより、stageブランチがブランチよりも先になり、ブランチdevからの将来のすべてのフォークがdevブランチから切り離されます。stageつまり、次にマージするときにdev、意図されているようstageな単純なマージにはなりません。fast-forwardマージは競合に遭遇する可能性が高く、将来のマージが妨げられるか、CI/CD が失敗する可能性があります。

私の回避策

セマンティック バージョニングの場合:

  • プッシュ機能を無効にして、新しく変更されたファイルがコミットおよびプッシュされないようにしました (タグは引き続き作成およびプッシュされます)。
  • ファイルを PDF に変換CHANGELOG.mdしてチームのメールに送信するスクリプトを作成しました

セマンティック バージョニングはタグを使用して変更されたファイルを判別し、バージョンを上げる方法を決定するため、これはうまく機能します。したがって、レポ内のバージョンは一定のまま1.0.0ですが、セマンティック バージョニングは十分にスマートで、最新のタグからではなく最新のタグからバージョンをインクリメントします。package.json

残念ながら、これはまだタグを使用して変更されたファイルを特定するLernaには当てはまりませんが、内部のバージョンからバンプしますpackage.json。つまり、新しいバージョンで更新されたものをプッシュしないことによりpackage.json、Lernaは常に、、1.0.0または1.0.11.1.02.0.0

だから私はLernaに困惑しています。

質問

この問題を回避するには、CI/CD をどのように設定すればよいですか? 私のレポの構造が一般的であることは知っています.Lernaとセマンティックバージョニングの無数のユーザーにもかかわらず、この問題に対処している人は誰もいません.

考えられる解決策

devこの質問を書いているときに、バージョンをバンプしてからデプロイするだけでよいのではないかstageと思いましたmaster。これは を防ぎstagemaster先をdev行くことはありません。これは正しい方法でしょうか?