2016-05-16 5 views
0

私は以下の要件を満たすために最善の分岐と展開の戦略を研究しています。たぶん私は何かが欠けているかもしれませんが、それはもっと複雑です。理想的には、プロダクションへのリリースをマークするためにタグを付けられた特定のコミットを持つことができる1つの永続的なブランチ、「マスター」を持つだけです。TeamCityとOctopusを使用してこの分岐と展開の戦略を実現する方法

私たちの現在の戦略は、Git Flowに基づいており、永久的な支店「master」(本番へのリリースのみ)と「開発」を持っています。複数のパーマネントブランチモデルを使用することを複雑にする主なことは、同じビルドをステージング環境からプロダクションに「促進する」という概念です。現在、これは別々のソースコードブランチで実行する必要があります(ステージングへのデプロイメントは '開発'から、デプロイメントは 'マスター'からのものです)。

ツール: Gitリポジトリ(VSTS)、チームシティー、タコ展開

要件(機能および修正プログラムのライフサイクル):すべてのコードがプル要求を経由して見直され

  • (分岐方針を経て施行)
  • すべてのコードがテスト用のステージング環境にデプロイされます
  • デプロイされたコードのスナップショットにすばやく戻ることができますテストは、同じビルドが

機能がシングルとして生産に押し出す前に、時間をかけて蓄積生産(再構築する必要はありません)に私たちのステージング環境から「昇格」することができます成功した場合、以前に

  • をYEDリリース。ホットフィックスは、次の定期的なリリースで「すべてか何か」に巻き込まれることなく通過することができなければなりません。

    私は、タグ付きの永続ブランチを持つアイデアが好きです(マスター/開発スプリットは冗長、http://endoflineblog.com/gitflow-considered-harmful)が、永久的なブランチを追加すると、異なるライフサイクル/バージョン(機能と修正プログラム)をOctopus 。

    私はこの問題を解決するための最善の方法を取り組んできました。どんなフィードバックもありがとうございます。

  • +0

    実際にあなたの質問は何ですか?インフラストラクチャといくつかの一般的なアイデアについて説明しましたが、テキストには何の疑問もなく、答えは出せませんでした(議論や意見は実際に答えではありません)。 – cyberskunk

    +0

    申し訳ありません。私はタイトルを更新しました。私はリストされたツールを使用してリストされた要件を達成する方法を理解しようとしています。 – FahnzMode

    +0

    この質問は多すぎます。これらは2つの自動化ツールと1つのSCMで、ほとんど何でも実現できます。あなたはデザイン/練習を提供できますか?それを改善するためのアイデアを提供できるかどうかがわかりますか?それはもっと簡単かもしれません。 –

    答えて

    1

    あなたは多くの質問をしていると思いますが、それらはかなり広いです...会話のスターターとして、それぞれの要件にいくつかのコメントを追加しますが、このスレッド全体はモデレータによってブロックされる可能性があります質問のスタイルSOが作られました。


    すべてのコードは、(分岐方針を経て施行)プル要求

    を経由して見直され、私は年齢のためVSTSを見ていないが、私は、彼らがすでにブランチポリシーをサポートして引っ張る期待-requestsなので、リポジトリの設定を構成する以外に必要なものがあるかどうかは不明です。

    VSTSでサポートされていない場合は、次のようなツールに移行することを検討してください。 BitBucketGitHubなどです。クラウドでホストされているバージョンを使用できない(または使用したくない)場合に備えて、これらの両方にオンプレミスバージョンがあります。

    すべてのコードは、あなたは確か展開/プロモーションがしたいシーケンスを追従させるために、lifecycles in Octopus Deployを設定してそれを達成

    をテストするためのステージング環境にデプロイされます。

    我々はすぐにあなたが今必要なのは、環境に配備されたコードからのトレーサビリティはに、である、あなたはすでにソースコントロールを持っている、以前に

    を展開されたコードの任意のスナップショットに戻ることができますOctopus Deployのデプロイメント・バージョン、TeamCityのビルド・ジョブ、ソース管理のブランチと正確なコミットが含まれます。

    あなたはそれを達成するために、行うことができますいくつかあります:

    1. はあなたのために働くバージョン管理スキームを定義します。私はセマンティックバージョニングを使いたい。 "Major"と "Minor"バージョンは開発者によって定義され、 "Patch"はTeamCityからの自動増分された数値(%build.number%)です。すべてgit pushコードをビルドし、固有のビルドバージョンを生成します(%major%。%minor%。%build.number%)

    2. TeamCityのビルドステップの一部として、コードをコンパイルする前に、ファイルは、の各ビルドによって割り当てられたバージョン番号でパッチされ、ソース管理ののコミットハッシュとブランチ名がコミットされます。例えば.NETを使用している場合は、すべてのAssemblyInfo.csファイルがそのバージョンで更新され、バージョンがバイナリに埋め込まれていることを確認してください。これにより、バイナリファイルのプロパティを見てバージョンを問い合わせることができます(ステータスバー、フッター、キャプション、ボックスなどについて)

    3. Have TeamCityはソース管理にすべてのビルドのバージョン番号を付けるので、ソース管理履歴をすばやく確認できます。あなたはおそらくマスターブランチのためだけにそれをしたいと思っていますが、それはあなたが気にしているものです。

    4. Octopusに展開バージョン番号と環境名を付けたソースコントロールにタグを付けると、どこに展開されたものがすぐに(ソースコントロールから)参照できるようになります。

    ステップ1と2が最も重要なものです。 3と4はちょうどいいです。テストはその後、同じ成功した場合、ほとんどの時間は、あなただけ...

    を「について」でハッシュをコミットチェック、環境中のアプリを開いて、そのコミットハッシュにgit checkoutをやります

    再び生産(再構築する必要はありません)、Octopus Deploy lifecyclesに私たちのステージング環境から「昇格」し、更新されたアプリケーションの構成ファイルに定義されている各環境で異なる必ず何かを作ることができますビルドOctopus展開中にenvironment-specific variablesを使用しています。

    ブランチワークフローに関して、この最後の要件は、展開ライフサイクルを開始する前に、変更をmaster(または "本番ブランチ")にマージすることを必須としています。

    関連する問題