私が働いているソフトウェア開発環境では、すべて同じ (Java) コードベース (現在は SVN を使用) で作業している開発者のグループがいます。「ビルドを壊す」ことなく、自分が構築したものをコミットしたいという人が多いことに気付きました。そのため、私は Git や Mercurial など、分岐、特にマージをより簡単にするツールに注目しています。
私が目にすることの 1 つは、開発者が「悪いコード」をコミットすると、そのコードはすべての人にとって壊れてしまうということです。これを回避するためのアイデアとして、その単一の新機能の変更セットを 1 つだけ持つ、単に現在の「マスター」である「中間の単一機能」リポジトリを持つ方法が必要です。このような「中間の単一機能」リポジトリは、メイン コード ベースの一部になる前に、自動的にテスト (コード品質、単体テスト、手動コード検査など) できます。
したがって、私が念頭に置いているワークフローは次のようになります。
- 開発者は新しい機能を作成し、これをローカルで毎日コミットします。
- しばらくすると、開発者は終了し、変更セット全体を送信して「メイン」リポジトリに統合します。
- 継続的インテグレーション システムは、現在の「マスター」を取得し、変更セットを適用してコードをチェックし (マージの競合、PMD、Findbugs など)、単体テストを実行し、コーディング スタイルをチェックします。
- CI システムが「悪いコード」と判断した場合、開発者には理由が通知され、開発者は言及された問題を修正する必要があります。この場合、メイン リポジトリは変更されません。
- CI システムが「十分である」と判断した場合、コードは「主任開発者」または「コード レビュー担当者」に届き、選択されたソリューションを検査して承認または却下されます。
- 承認された変更セットはメイン リポジトリに含まれ、すべての開発者がリベース/マージできるようになります。
この種のワークフローについていくつか質問があります。
- これは実際にうまくいくと思いますか (つまり、これは良いアイデアですか、それとも本当に頭がおかしいものですか)?
- 以前にこのような作業をしたことがある人はいますか? 長所と短所は何でしたか?
- そのようなワークフロー (またはこのアイデアのバリエーション) を最小限の時間で開始できるようにする「すぐに実行できる」スクリプト/手順/ツール/... はありますか?
ありがとう。
背景メモ:
私は約 13 年前に会社で開発者として働いていました。彼らは社内で同様のワークフローを構築し、2 つのナイトリー ビルドを行っていました。
- 「本番」バージョン: メイン コード ベース
- 「シニア バージョン: すべての変更されたファイルのすべての新しく送信されたバージョンを含むメイン コード ベース。
これはすべて SCCS (lock-edit-unlock モデル) ベースであったため、「頻繁にコミット」する方法がなく、コードの変更やその他すべての厄介な影響によるデッドロックが発生しました。私が探しているのは、主に、当時使用していたものの良い点と、今日のはるかに優れたツールを使用していることです。