問題タブ [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.
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.md
stage
master
デプロイはSemantic Versioning 2.0.0
、バージョンのバンプ、変更ログの生成、およびデプロイを担当する によって処理されます。
モノレポであることを除いて、上記と同様のセットアップを使用しているため、の動作をレプリケートLerna
するために発行 (デプロイ) を処理するために使用しています。monorepo 内で独立したバージョン管理を使用しています。{"conventionalCommits": true}
Semantic Versioning 2.0.0
と の両方のSemantic Versioning 2.0.0
設定により、ブランチは常にとのブランチの後ろまたは同じになるようにLerna
強制されます。ブランチは、カスケード効果のようなもので、常にブランチの後ろまたは同じになるようにします。master
stage
dev
stage
dev
dev
>= stage
>=master
問題
と の両方Lerna Publish
でSemantic 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.1
1.1.0
2.0.0
だから私はLernaに困惑しています。
質問
この問題を回避するには、CI/CD をどのように設定すればよいですか? 私のレポの構造が一般的であることは知っています.Lernaとセマンティックバージョニングの無数のユーザーにもかかわらず、この問題に対処している人は誰もいません.
考えられる解決策
dev
この質問を書いているときに、バージョンをバンプしてからデプロイするだけでよいのではないかstage
と思いましたmaster
。これは を防ぎstage
、master
先をdev
行くことはありません。これは正しい方法でしょうか?