次の原則に従う新しいワークフローを設計しようとしています。
- 自動検証 (CI) に合格したコミットのみをメインラインにマージする必要があります (具体的には、マージされた状態は、統合ブランチを可能な限り初期状態に保つために CI に合格する必要があります)。
- 人間によるコード レビューに合格したコミットのみをメインラインにマージする必要があります
- 自動検証に合格したコミットのみを別の人間がレビューする必要があります (ビルドしてテストに合格しない場合でも、他の人の時間を無駄にしないでください)。
- 機能ブランチは CI でカバーする必要があります (独立して、統合ブランチにマージされません - これは開発中の開発者にとって役立ちます)
git、Stash、TeamCity を使用しています。これは私が思いついたものですが、どれも完璧ではありません。提案の微調整や新しいアイデアを探しています。
ワークフロー 1
- 開発者は機能/VHPC-1 で開発します (機能ブランチは TeamCity の通常の CI でカバーされます)
- 機能が完了すると、開発者はプル リクエストを作成します: feature/VHPC-1 --> mainline
プル リクエストが別の開発者によって承認されると、Stash によって自動的にメインラインにマージされます (メインラインは TeamCity の通常の CI によってカバーされます)。
問題: マージの競合がある場合、Stash はマージを実行しませんが、メインラインへのマージが完了するまで、マージされた状態はまったくテストされません。メインラインが壊れるかどうかは、壊れるまでわかりません。
ワークフロー 2
- 開発者は機能/VHPC-1 で開発します (機能ブランチは TeamCity の通常の CI でカバーされます)
- 開発者は、feature/VHPC-1 から feature/VHPC-1/review にプッシュします (統合ブランチをリベースしてから CI (マージされた状態のテスト) を実行します)
- 機能が完了すると、開発者はプル リクエストを作成します: feature/VHPC-1/review --> mainline
プル リクエストが別の開発者によって承認されると、Stash によって自動的にメインラインにマージされます (メインラインは TeamCity の通常の CI によってカバーされます)。
問題: マージされた状態がテストされてから統合が行われるまでの時間 (20 分~1 日?) により、統合ブランチが変更され、マージされた状態が機能しなくなる可能性があります。統合分岐が壊れる可能性。
- 問題: ブランチの数が 2 倍になるということは、複雑さと作業が増えることを意味します。
ワークフロー 3
- 開発者は機能/VHPC-1 で開発します (機能ブランチは TeamCity の通常の CI でカバーされます)
- 機能が完成したら、開発者はプル リクエストを作成します: feature/VHPC-1 --> feature/VHPC-1/review
別の開発者がプル リクエストを承認してマージすると、feature/VHPC-1/review が自動的にビルドされ、マージされた状態でテストされ、成功するとメインラインに自動マージされます
問題: ブランチの数が 2 倍になるということは、複雑さと作業が増えることを意味します。
- 問題: コミットは常にメインラインに統合する必要があり、ブランチをリリースするためにチェリー ピックのみを選択する必要があります。
ワークフロー 4
- 開発者は機能/VHPC-1 で開発します (機能ブランチは TeamCity の通常の CI でカバーされます)
- 機能が完了すると、開発者はプル リクエストを作成します: feature/VHPC-1 --> メインラインの TeamCity は自動的にレビュアーを追加し、マージされた状態でプル リクエストのビルドとテストを試みます (Stash の文書化されていない refs/pull を使用) -リクエスト/マージ)
自動検証に合格すると、TeamCity はプル リクエストを承認します。その後、人間がそれをレビュー、承認し、メインラインにマージします。
問題: TeamCity は、統合ブランチが変更されると変更される refs/pull-requests/merge を監視します。つまり、統合ブランチが 1 つの新しい変更を取得すると、開いているすべてのプル リクエストでビルドがトリガーされます。