ビルド エンジニアとシステム担当者の役割を担うことになったので、いくつかのことを学ばなければなりませんでした。つまり、インフラストラクチャをセットアップする方法です。私が乗船する前は、何も持っていませんでした。これを念頭に置いて、私が明白であるべきことを尋ねたら、すみません。
現在、3 つのレベルの分散 mercurial リポジトリがあります。レベル 1 は各開発者マシンに、レベル 2 は中央 (トランク) サーバーにあり、ローカル ネットワークからのみアクセスでき、3 番目のレイヤーは BitBucket にあります。ワークフローは次のとおりです。
ローカル開発: 開発者は、ローカル ネットワーク サーバーから変更セットをプルします。開発者はローカルにコミットし、マージの競合が解決されるとローカル サーバーにプッシュします。スケジュールされたスクリプトは、夜間にすべてを BitBucket にバックアップします。
在宅勤務: 開発者は BitBucket から変更セットをプルします。開発者はローカル リポジトリにコミットし、BitBucket にプッシュします。
TeamCity は、プロジェクトごとにローカル ネットワーク サーバーからリポジトリの変更を取得し、テスト環境へのビルド / 自動デプロイを実行します。
私が直面している問題はシナリオ 2 です。現時点では、誰かが何かを bitbucket にプッシュした場合、オフィスに戻ったときにそれをマージする責任があります。また、自動化できれば、少し時間の無駄になります。
ご参考までに、ローカル ネットワーク上に中央リポジトリがある理由は、BitBucket リポジトリの TeamCity ビルドを実行するのが遅いためです。検証していないので、ただの推測です。
とにかく、スケジュールされ、ローカルネットワーク上の中央リポジトリからすべての変更をプッシュするスクリプトは、リポジトリごとに「hg push」を実行するだけです。事前にプル/マージを行う必要があります。どうすればこれを正しく行うことができますか?
これは、プルでスイッチを使用する必要があるものです: - プル後に更新 - マージの競合が発生した場合は、常に新しいファイルを取得します - エラーが発生した場合は、システム管理者に電子メールを送信します - 追加の何か?
説明されているものと大きく異ならない限り、独自の設定を自由に共有してください。
更新:最近の回答に照らして、意図したアプローチを明確にする必要がある場合、重要な側面を感じています。アイデアは、ローカル ネットワークの中央リポジトリでマージを強制することではありません。代わりに、post pull: update + merge を使用して、開発者のマシンで HgWorkbench を使用するのと同じように、マージの競合を解決する必要があります。すべての開発者はデフォルトでこれをオンにしているので、問題ありません。
したがって、サーバー上のスクリプト/バッチ ファイルは次のようになります。
- BitBucket からプル
- 更新 + 自動マージ
マージの自動競合はありますか?
3.1 はい -> 管理者にメールを送信して手動でマージ -> 中断
3.2 いいえ -> 続行
送信変更セットを取得します。プッシュすると複数のヘッドが作成されますか? (これはプル/更新のため冗長である可能性があります)
4.1 はい -> 管理者にプロンプトを表示します。壊す。
4.2 いいえ -> プッシュの変更
これで問題が少し解決することを願っています。さて、これは hg コマンドのみを使用して実行できますか (バッチ)、それともスクリプトを作成する必要がありますか? 具体的には、メールを送信できますか?
ありがとう。