背景:
ソフトウェア以外の企業の内部アプリケーションをサポートする(そして新しいアプリケーションを構築する)3〜5人の開発者。私はTFSを使用していますが、それは私の質問にはそれほど重要ではないと思います。
展開パイプラインを開発し、継続的な統合/展開手法を採用できるようにしたいと考えています。
ソースツリーは次のようになります。単一のTFSチームプロジェクトを使用します。
$/MAIN/src/
$/MAIN/src/ApplicationA/VSSOlution.sln
$/MAIN/src/ApplicationA/ApplicationAProject1.csproj
$/MAIN/src/ApplicationA/ApplicationAProject2.csproj
$/MAIN/src/ApplicationB/...
$/MAIN/src/ApplicationC
$/MAIN/src/SharedInfrastructureA
$/MAIN/src/SharedInfrastructureB
マイゴール(かなり典型的なプロモーションパイプライン)
特定のアプリケーションにコード変更が加えられたとき、そのアプリケーションをビルドして、その変更をDEVサーバーに自動デプロイできるようにしたいと考えています。
開発者のテストに合格した場合、エンドユーザーが新しい機能を確認するSTAGINGサーバーに、手動でトリガーされた自動ビルドのビルドを導入したいと考えています。
エンドユーザーによって承認されたら、手動でトリガーした本番環境への自動デプロイを行います
質問:
マルチアプリケーション環境で継続的デプロイメント手法を最もよく採用するにはどうすればよいですか?私が見るアドバイスの多くは単一のアプリケーション固有のものですが、それはどのようにして複数のアプリケーションに最適に適用されますか?
手順1では、アプリケーションごとに個別のチームビルドをセットアップするだけですか?
最新のビルドを新しい環境にプロモートするステップ2と3を達成するための最良のアプローチは何ですか?
私はこれがウェブアプリでうまく機能するのを見てきましたが、データベースの変更はどうですか
Jenkins CIは、あなたが望むものを達成するのに役立つはずだと思います。
データベースの移行については、DBのバージョン管理を行う必要があります。これにより、移行スクリプトを展開と共に展開できます。
Jenkins + Build Pipelineは長い間、私にとってはうまく機能しています。これらは主に中小規模の複雑なWebアプリケーションでした。小さなiOSとAndroidアプリでも試してみました。
Teamcityやjenkinsなどの多くのCIシステムは、バージョン管理システムを監視し、チェックインが検出されたときにビルドを開始するように設定できます。 CIシステムによって開始されるイベントのシーケンスは、次のようになります。
データベースの変更に関しては、展開プロセス中にデータのバックアップをステージングサーバーに復元してから、データベースの移行プロセスを開始できます。統合テストでは、移行の問題をキャッチし、ステージングへの展開に問題があることを警告します。これにより、「適切なビルド」領域へのコピーが許可されなくなります。
私が数年前に働いていた会社で、TFS 2008があり、ビルドラベルとWFワークフローを介してデプロイメントを処理しました。ビルドラベルが変更されると、トリガーがアプリケーションを環境にデプロイしましたデータベースの変更は、データベースプロジェクトにチェックインされた変更スクリプトを通じて処理されました。
これを最初から行う場合は、TFSを拡張するのではなく、TeamCityまたは別の専用CIソリューションを検討します。そうは言っても、TFSを使ったストーリーは、TFSを使って試すことができるほどに改善されたのかもしれません。