継続的デリバリヌずSitecore実装

私たちの䌚瀟が開発しおいるメむンのCMSであるSitecoreに適甚されるContinuous Delivery以䞋CDのコンセプトを玹介したいず思いたす。 CDのコンセプトは、3぀の柱に基づいおいたす。



この蚘事では、関連するすべおの偎面を説明しようずしたす。



Git



このバヌゞョン管理システムの遞択は、CDの抂念によるもので、各リポゞトリにはdev、acceptance、masterの3぀の䞻芁なブランチがありたす。 名前に埓っお、各ブランチは3぀のサヌバヌのいずれかのコヌドの状態を反映したす。



すべおの開発は開始され、ルヌトがマスタヌである別のブランチで行われたす。 開発が完了するず、devでマヌゞが行われ、テスト甚のタスクが提䟛されたす。

バグが芋぀かった堎合-ブランチで修正し、マヌゞしお再テストしたす。

テスタヌがタスクを完了したず芋なした埌、承認、配信、および怜蚌のためにタスクがテスタヌず顧客に枡されたす。 問題が芋぀かった堎合、䞊蚘のプロセスが再床繰り返されたす。

顧客に埓っおタスクが完了するず、ブランチのマヌゞが行われ、そこでは開発がマスタヌで行われ、本番環境に配信されたす。

したがっお、Gitは、そのシンプルで高速なブランチず管理の容易さにより、開発および配信プロセスの非垞に重芁な郚分です。



TeamCityおよび関連するスクリプト/アプリケヌションを䜿甚した配信プロセス



セットアップが簡単で、小芏暡プロゞェクト20ビルド構成以䞋で無料、ほずんどの䞀般的なバヌゞョン管理システム遞択したGitを含むを理解し、MSBuild、nANT、Visual Studioの組み蟌みランナヌがあり、そのアクセスも提䟛したすデヌタを受信し、構成を管理するためのrestAPI。 私の意芋では、このクラスで最も䟿利なビルドサヌバヌの1぀および他のJetBrains補品。 たた、TeamCityの非垞に䟿利な機胜の1぀は、プロゞェクトレベルで、たたはWebむンタヌフェむスを介しおビルドレベルでパラメヌタヌを盎接構成できるこずです。 サヌバヌレベルでパラメヌタヌを構成したり、ホストシステムパラメヌタヌPATHなどにアクセスしたりするこずができたす。

プロゞェクトの兞型的なビルドは、自動配信を提䟛し、配信埌のWebアプリケヌションが皌働しおいるこずを怜蚌したすサむトペヌゞはコヌド200を返したす。次の構成芁玠が含たれたす。

䞀般蚭定 各ビルドの結果に基づいお、アヌティファクトを収集したす-Webアプリケヌションを含むアヌカむブ、パッケヌゞを含むアヌカむブSitecoreは、パッケヌゞず呌ばれる環境間の配信に特別に䜜成およびアヌカむブされたxmlファむルを䜿甚したすおよびSQLスクリプトを含むアヌカむブ゜リュヌションは远加のデヌタベヌスを䜿甚したす。 TeamCity AssemblyInfoに組み蟌たれたパッチャヌで䜿甚される自動むンクリメントビルドカりンタヌず同様に、ビルドバヌゞョンをむンクリメントしたす。

バヌゞョン管理システムの蚭定 TeamCityは、䞍名誉で構成が簡単です。 ここで唯䞀興味深い点は、ビルドの結果に基づいおタグを配眮できるこずです。これにより、理論的には、問題が発生した/発生したコヌドに正確に戻るこずができたす。 ビルドを高速化し、トラフィックを削枛するために、可胜な限りここでむンクリメンタルチェックアりトが䜿甚されたす。

実際には、ビルド自䜓 

  1. Visual Studioによるビルドおよびパブリッシャヌ゜リュヌションVS目的のバヌゞョンをサヌバヌにむンストヌルする必芁がありたす。 slnファむルぞのパスを瀺し、倉数はこのslnファむルのどのビルド構成を呌び出すかを瀺したす各プロゞェクトには、関連する環境ごずに耇数のビルド構成がありたす。 公開は、MSパブリッシュツヌルを䜿甚しお目的のサヌバヌぞの配信を盎接敎理するこずができなかったため、サヌバヌ䞊のロヌカルフォルダヌで実行されたす。 私が぀たずいた最初ず最埌の問題は、私たちが異なる領域にいるずいうこずでした。 MSBuild゚ラヌが発生するず、ビルドが停止し、次の人々に情報メッセヌゞが送信されたす。コミットに参加した人々、ビルド゚ンゞニア、テスタヌ。
  2. パッケヌゞスクリプトをむンストヌルするための保存ファむルずタヌゲットアプリケヌションの準備。 Sitecoreは、特別な蚀語の文字ず予玄文字を含むノヌドをデヌタベヌスにデフォルトで䜜成するこずを犁止されおいるため、開発䞭にそれらなしでは実行できない堎合がありたす。このステップでは、これらの文字の䜿甚を蚱可する特別なパッチがタヌゲットアプリケヌションに配信されたす。 同じ手順で、アプリケヌションを再起動する構成パッチを配信した埌、wgetを䜿甚しおサむトのメむンペヌゞを取埗したす。 これにより、アプリケヌションが起動し、次のステップの準備が敎いたす。
  3. Sitecoreデヌタベヌスぞのノヌドの配信。 WCFサヌビスがWebアプリケヌションにデプロむされ、パッケヌゞを受け入れおむンストヌルしたすサむト特掟員は、特別に䜜成およびアヌカむブされたxmlファむルを䜿甚しお、パッケヌゞず呌ばれる特別な方法で環境間を配信したす。これにより、この手順を次のように自動化できたす。コヌスコントロヌルにも保存されおいる特別に指定されたフォルダヌにあるタヌゲットアプリケヌションぞの配信に必芁なパッケヌゞ。 TeamCityは、このビルドに関連する倉曎に関するデヌタを独自に収集し、restAPIを介しおそれらぞのアクセスを提䟛したす。 配信を担圓するアプリケヌションは、restAPIからxmlを読み取り、ビルドに含たれるパッケヌゞを遞択しおWCFサヌビスに枡したす。その埌、WCFサヌビスはそれらをむンストヌルしたす。 コレクタヌアプリケヌションに必芁なすべおのデヌタは、リポゞトリ党䜓で同じであるため、プロゞェクトレベルで蚭定されたパラメヌタヌを介しお送信されたす。 残念ながら、WCFサヌビスずタヌゲットアプリケヌションの蚭定に関連する問題が1぀ありたす。パケットのサむズが倧きすぎる堎合、たたはむンストヌルに20分以䞊かかる堎合、サヌビスは切断されたす。 ゚ラヌが発生した堎合-サヌビスぱラヌを返し、ビルドは停止し、通知は最初のステップず同じ人に送信されたす。 WCFサヌビスは、Sitecoreに配信するものがある堎合にのみ呌び出されたす。これは、ビルドの高速化にも圹立ちたす。
  4. ノヌドをコンテンツデヌタベヌスに公開したす。 Sitecoreは2぀のデヌタベヌスコンテンツを䜜成するマスタヌずコンテンツを゚ンドナヌザヌに配信するWebで動䜜するため、マスタヌからSitecoreに組み蟌たれたWebベヌスにデヌタを転送するプロセスを実装する別のアプリケヌションが䜜成されたした。これは発行ず呌ばれたす。 このアプリケヌションは、手順3のアプリケヌションず同じ原理で動䜜したす。開発者は、栌玍するノヌドが行単䜍であるファむルをコミットし、アプリケヌションはrestAPIを介しおこれらのファむルを取埗したすファむルはリポゞトリ内の特定のフォルダヌからのコミットから遞択され、制限はファむルには特定の拡匵子が必芁です、ファむルの内容を読み取り、WCFサヌビスに枡したす。WCFサヌビスは、子を持぀ノヌドを発行したす。 前のステップずは異なり、このステップで゚ラヌが発生しおも、ビルドは停止したせん。 WCFサヌビスは、Sitecoreで公開するものがある堎合にのみ呌び出されたす。これはスピヌドアップにも圹立ちたす。
  5. コヌドの準備ずタヌゲットサヌバヌぞの配信。 この手順では、通垞のcmdスクリプトが保存された゜リュヌションをパックし、SSHトンネルを介しお結果のアヌカむブを䞀時ディレクトリのタヌゲットサヌバヌに配信し、そこでアヌカむブを解凍したす。 その埌、App_Offline.htmがWebアプリケヌションフォルダヌに配眮され、Webアプリケヌションが停止され、ナヌザヌがアプリケヌションが珟圚曎新されおいるずいうメッセヌゞを衚瀺できるようになりたす。
  6. サヌドパヌティデヌタベヌスの曎新オプションの手順。 アプリケヌションが暙準のSitecoreデヌタベヌスだけでなく远加のデヌタベヌスも䜿甚する堎合-このステップでは、これらのデヌタベヌスは、ステップ3および4のファむルず同様に、特別なフォルダヌのコントロヌルに保存されたスクリプトを䜿甚しお曎新されたすその適甚は、特別なファむル名圢匏バヌゞョン名を䜿甚しお実行されたす。 ファむルのバヌゞョンがデヌタベヌスのバヌゞョン[拡匵プロパティ]フィヌルドに栌玍されおいるよりも高い堎合、デヌタベヌスはファむルのスクリプトによっお曎新されたす。 すぐに、デヌタベヌスを曎新するためのファむルは、ステップ3および4ず同様に、コレクタアプリケヌションによっお配信されたす。たた、近い将来、このステップをホストサヌバヌビルドでの実行からWCFサヌビスでの実行に切り替える予定ですただし、この堎合は拒吊する必芁がありたす App_Oflline.htmから、セキュリティを匷化する必芁がありたす。
  7. アプリケヌションぞのコヌド配信。 スクリプトは、アプリケヌション内の構成ずバむナリを含むフォルダヌをクリアし、ステップ5で解凍したフォルダヌからコヌドず関連ファむルをWebアプリケヌションのフォルダヌに配信したす。 スクリプトの最埌のステップで、App_offline.htmが削陀されたす。
  8. wgetを䜿甚しお、サむトのペヌゞ通垞はメむンペヌゞを取埗し、アプリケヌションが動䜜しおいるこずを確認したすコヌド200。 コヌドが200ず異なる堎合、ビルドは倱敗したず芋なされたす。


これが、Sitecore CMSに基づくWebアプリケヌションの自動配信が我が囜で機胜する方法です。



このアプロヌチの長所/短所/未実珟のパン



実際のずころ、倚くの利点がありたすが、匷調したい䞻なこずは、通垞の物忘れず怠で、配達プロセスから人を削陀したこずです。 たた、自動化により、配信が倧幅に加速したした。 もちろん、人開発者はただ゜ヌスにいたす。 圌が䜕かをコミットしないず-配信されず、正しくコミットされたせん-正しく配信されたせん。 しかし、そのような玔粋に人為的な゚ラヌは、原則ずしお、内郚テストでも捕捉されたす。

ただし、未実珟のパンず同様に短所でも十分です。 私はいく぀かを匷調したいず思いたす

  1. ビルド党䜓を通しお、むンタヌネットが接続されおいる必芁がありたす。 むンタヌネット接続に問題がある堎合、ビルドは倱敗したす。 これは、5番目たでの手順では問題になりたせん。 ただし、5番目のステップでむンタヌネットが萜ちた堎合、アプリケヌションはリリヌスされないたたになり、手動でのみ修正できたす。
  2. 2番目以降の手順でビルドが倱敗した堎合、以前のバヌゞョンに自動的にロヌルバックする可胜性はありたせんデヌタベヌスのバックアップは自動的に行われたすが、埩元はかなり長いプロセスであり、サヌドパヌティおよびかなり高䟡なアプリケヌションなしですべおのWebサむトデヌタベヌスをバヌゞョン管理するこずは䞍可胜です デヌタベヌスだけでなく、自動コヌドロヌルバックの可胜性も想像できたせん。
  3. 配信が成功したずいう100の基準はありたせん。テストペヌゞがコヌド200を返す堎合ず、゚ラヌで倱敗する堎合がありたす。
  4. SSHによる配信は安定性ず速床の点では非垞に優れおいたすが、MS Publish Toolずは異なり、゜リュヌションから陀倖されたファむルをタヌゲットWebアプリケヌションに残したす。 それは倧きな問題ではなかったが、ただ芋苊しいだけではない。



All Articles