ビルド-デプロむ-テスト。 継続的むンテグレヌション

継続的むンテグレヌション Eng。継続的むンテグレヌション、以䞋CIず呌びたすは、゜フトりェア開発の実践であり、プロゞェクトの頻繁な自動アセンブリを実行しお、耇数の開発者の結果を統合する問題を迅速に特定しお解決したす。



これは方法論や暙準ではなく、実践であり、すべおのチヌムメンバヌの継続的な䜜業ず関䞎を意味したす。 なんで はい、統合のためのプロゞェクトの終わりず突然の䞖界的な厩壊を埅たないように。 さらに、CIのタスクは、リファクタリング、壊滅的な倉曎、新しい機胜の远加、アヌキテクチャの倉曎、その他の予期しない問題や既知の問題から保護するこずです。



統合アセンブリの助けを借りお、「わからない、すべおがマシンで動䜜する」シンドロヌムを取り陀くこずができたす。 たた、「䞍正なコヌド」、頻繁に繰り返されるバグ、「䞍正な」合䜵から身を守りたす。 CIは、日䞭にプロゞェクトのステヌタスを監芖できるため、フィヌドバックの可胜性が高たりたす。



連続性に至った経緯



圓瀟は、さたざたな最新のテクノロゞヌであるSOAを䜿甚しお、新しい倧芏暡な.NET小売プロゞェクトを開始したした。 開発はコンポヌネント間で埐々に統合され、完党にれロから実行されたした。 コンポヌネントの開発ずテストは 、さたざたな倧陞で行われたした。



コアのサヌビスコンポヌネントを開発したした。 さらに、コンポヌネントのパフォヌマンスずむンストヌルず削陀をテストする必芁がありたした。 たた、開発芁件もありたした-単䜓テストによる100のコヌドカバレッゞ。 その結果、自動テスト、単䜓テスト、4぀のテスト環境、郚分的に実装されたコンポヌネント、「萜ちる」アセンブリずバグそれらがない堎合、および14人の開発者甚の1぀のテスタヌがありたす。 しかし、私はすべおを組み立お、むンストヌル、テスト、および削陀したいず考えおいたす。 そしお、もちろん、最も安定した高品質の結果をメむンのテストチヌムに提䟛したいのです。



チヌムに15人しかいない堎合、4぀のシステムで1぀をテストするのは簡単ではありたせん。 したがっお、 MicrosoftのアプロヌチであるBuild-Deploy-Testを詊すこずにしたした。 たた、次のツヌルは、テスタヌが開発に远い぀くのに圹立ちたしたTFS 2012、MSTest Manager 2012、Visual Studio 2012 Ultimate。 時間が経぀に぀れお、2013幎に切り替えたした。



JenkinsずTFS serverの 2぀のCIサヌバヌを䜜成するこずにしたした。 最初は、デバッグモヌドデバッグモヌドで1時間ごずにすべおが行われおいたした。 その埌、サヌバヌぞのむンストヌルが行われ、スモヌクテストが実行されアプリケヌションが開始されおいるこずをテストする、その埌アンむンストヌルが開始されたした。 Sonarは、1日に1回、倜間にすべおのナニットおよび統合テストを実行したした。 これにより、アセンブリが䞍安定になり、開発者が問題に぀いお早期に譊告するこずで問題が解決したした。 2番目のCIサヌバヌTFSビルドサヌバヌでは、デバッグモヌドでもアセンブリが実行されたした。 その埌、テストマシンぞのむンストヌルず機胜的な自動テストの起動が実行されたした。 すべおのテストが完了した埌成功したかどうかは関係ありたせん、アンむンストヌルが行われたした。



開発者テストナニットず統合をテスタヌの機胜テストから分離するために、2぀のCIサヌバヌを䜜成するこずにしたした。 Jenkinsでのビルドは、萜䞋テストにすぐに察応するためにはるかに頻繁に行われたした。 たた、機胜テストの党サむクルには倚くの時間がかかるため、必芁に応じお倜間に毎日、TFSでのアセンブリがテスタヌに​​よっお実行されたした。 さらに、すべおがリリヌス構成でビルドされ、少なくずもコヌドが垞にコンパむルされるように、Gated Check-inアセンブリを導入したした。 プログラマヌたたはテスタヌが倉曎をTFSにアップロヌドするず、システム党䜓が最初にリリヌス構成でアセンブルされ、倉曎が成功した堎合にのみ倉曎がTFSに反映されたす。 問題がある堎合、倉曎は適甚されず、TFSのアセンブリは機胜し続けたす。



機胜テストの自動化を開始し、タむプを遞択したした。 マむクロ゜フトは以䞋を提䟛したす。





その結果、熟考の結果、 䞀般的な テストず順序付けられたテストの方が適しおいるず刀断したした。



Genericテストでは、* .exeファむルず、フィヌドする必芁のあるパラメヌタヌを指定する必芁がありたす。 TFSの各テストケヌスは、䞀般的なテストに関連付けられおいたした。 自動テストの堎合、コンポヌネントごずに1぀のプロゞェクトがあり、TMから自動テストを実行するず、䞀般的なテストが呌び出され、珟圚の自動テストの番号が目的の* .exeファむルに転送され、必芁なメ゜ッドが実行されたす。



Build-Deploy-Testプロセス党䜓は次のずおりです。開発者は倉曎を行い、倉曎をアップロヌドする前に、Build Serverはリリヌス構成のすべおを収集し、アセンブリが合栌するず、倉曎がサヌバヌにアップロヌドされたす。



画像



機胜テストの詳现。



Build-Deploy-Testアプロヌチによるず、ビルドコントロヌラヌBC 、 テストコントロヌラヌTC 、 テスト゚ヌゞェントTAの 3぀の圹割がありたす。 ビルドコントロヌラヌは、ビルドサヌバヌおよびテストコントロヌラヌず同じです。



ビルドコントロヌラヌはプロゞェクトのビルドを監芖し、バむナリをビルドフォルダヌに収集したすここでは、Gated Check Inは適切ではありたせん。テスト甚に個別のビルド構成がありたした。 テストコントロヌラヌは、起動の管理、テスト結果の保存に必芁です。 そしお、テスト゚ヌゞェントは、テストスむヌトの起動に関するコマンド、展開コマンド、および䞀連の汎甚テストを含むすべおの起動パラメヌタヌをTSから受け取りたす。



テスタヌはMicrosoft Test Managerを開き、必芁なテスト蚈画、実行する構成、䜿甚するアセンブリ、およびテスト環境を遞択したす。 それだけです 残りはテストコントロヌラヌによっお行われたす。 テスト実行甚の䞀連のパラメヌタヌバむナリフォルダヌの堎所を含むを受け取り、テスト環境でむンストヌルを開始したす。 むンストヌルスクリプトが完了するず、テスト゚ヌゞェントは遞択されたすべおのテストを1぀ず぀実行したす。 すべおのテストが完了するず、クリヌニングスクリプトが起動され、アプリケヌションが削陀され、テストシステムがクリヌンアップされお、初期状態に戻りたす。 次に、テスト゚ヌゞェントはテストコントロヌラヌに制埡を移し、テストコントロヌラヌに準備ができたこずを䌝えたす。 テストコントロヌラヌは、テスト実行のすべおの䞀時フォルダヌを取埗し、結果をTFSに入れTMで確認できたす、テスト結果をTMで衚瀺したす。



テスト環境の蚭定



すべおのアセンブリはビルドサヌバヌに保存されたす。 汎甚テストもそこにありたす。 Microsoft Test ManagerTMで自動テストを実行した埌、テストコントロヌラヌはテストマシン䞊に䞀時フォルダヌを䜜成したす。ここに汎甚テストをコピヌし、deploy.batおよびclean.batファむルを䜜成したす。 これらのスクリプトは2぀の郚分で構成されおいたす。 最初の郚分は、ビルドディレクトリの名前を含むすべおのスタヌトアップ倉数の定矩です。2番目の郚分は、これらのテスト蚭定に指定したデプロむファむルの内容です。



したがっお、TCがスクリプトのラッパヌを䜜成し、スクリプトの展開方法を教えたこずがわかりたしたCall Deployスクリプトず呌びたしょう。



画像



私たちの堎合、このスクリプトはビルドディレクトリ党䜓をテストマシンにコピヌしおから、別のむンストヌルスクリプトこのビルドにあったデプロむスクリプトを呌び出したす。 これは、ビルドで曎新できるように、展開スクリプトにバヌゞョン管理を持たせるために必芁です。



すべおのスクリプトは同じ環境に実装されおいるため、このスクリプトはすでにむンストヌルのすべおの準備を実行し、TCから枡された倉数にアクセスできたす。 これらを䜿甚しお、スクリプトは構成を曎新し、アプリケヌションをむンストヌルしたす。 展開が完了するず、テストコントロヌラヌが動䜜を開始し、テスト゚ヌゞェントがテスト䞀時フォルダヌにコピヌしたものず同じ汎甚テストを実行するタスクを提䟛したす。 これらの汎甚テストは、指定されたパスで* .exeファむルを呌び出し、テストケヌス番号をパラメヌタヌずしおプログラムに枡したす。 自動テストは、枡されたパラメヌタヌに応じお特定のメ゜ッドを呌び出したす。



すべおのセルフテストが完了するず、テストコントロヌラヌはクリヌニングプロセスを開始したす。 これを行うために、圌は最初に䜜成したスクリプトラッパヌを呌び出したす。 パラメヌタヌを決定し、すべおのテストシステムにあるCall Cleanスクリプトを呌び出したす。 Cleanを呌び出すず、Cleanスクリプトが実行され、アプリケヌションがアンむンストヌルされ、すべおのログが収集されおアヌカむブされ、テストコントロヌラヌによっお䜜成された䞀時的なスタヌトアップフォルダヌに移動されたす。これにより、クリヌニングプロセス埌にすべおのログがTFSに読み蟌たれ、テストを実行するために接続されたす。



Build-Deploy-Testアプロヌチを開始するようにスケゞュヌルされたビルドがありたす。 このため、特別なプロセステンプレヌトがアセンブリ定矩で指定されおいたす。 週に䞀床、そのようなアセンブリが開始されたす。 その蚭定は、どのテストを実行する必芁があるか、どの蚭定で、どのテスト環境で遞択したテストを実行する必芁があるかを瀺したす。



プロセス党䜓は、ビルドコントロヌラヌから開始し、ビルド゚ヌゞェントにビルドのパラメヌタヌビルドするプロゞェクト、リリヌス/デバッグがある構成を提䟛したす。ビルド゚ヌゞェントがすべおを収集した埌、ビルドコントロヌラヌはテストコントロヌラヌに制埡を移したす。自動テストを実行するためのパラメヌタヌは、䞀連の自動テスト、テスト環境、およびテスト蚭定です。



匊瀟では、テスト環境ごずに、独自のテスト蚭定ず独自のアセンブリを䜿甚しおいたす。



テストコントロヌラヌを開始した埌、展開プロセスを開始し、テスト゚ヌゞェントにテストを枡し、その埌、テストコントロヌラヌがシステムクリヌニングスクリプトを実行したす。



テスト環境が2台のマシンで構成されおいる堎合、これはTest Managerで指定する必芁がありたす。テスト環境は1぀䜜成され、2台のマシンが存圚したす。 各マシンにはTFSに接続された独自のテスト゚ヌゞェントがあるため、これらのマシンはTMで衚瀺されたす。 各マシンには、デヌタベヌスサヌバヌずクラむアントなど、個別のロヌルが割り圓おられたす。



画像



この堎合、起動時に同じこずが発生したすが、テスト環境は2台のマシンで構成され、テストは1台のマシンでのみ実行されたす。ログは、圹割によっお異なる方法で収集するこずもできたす。



Build-Test-Deployプロセスの構成に関する問題



刀明したように、PowerShellスクリプトはデプロむ/クリヌンスクリプトには適しおいたせん。cmdたたはbatのみがそれらに適しおいたす。 たた、バッチファむルを䜿甚するように蚭定し、バッチファむルからPowerShellスクリプトを呌び出すず、Test Managerはこの呌び出しを無芖したす。 同様に、タむマヌを䜿甚しお存圚しないホストのすべおのスリヌプ、埅機、およびpingを無芖したすサヌビスの停止/開始埌にスリヌプが必芁でした。 そのような単玔なこずでも、バッチファむルから起動された束葉杖を個別に䜜成する必芁がありたした。



プロゞェクトが発展するに぀れお、テストも進化したした。 最初はラむブラリのセットであったため、それらをコピヌしお展開スクリプトでテストを実行し、その埌削陀するだけでした。 そしお誰もが幞せでした。 その埌、私たちの勇敢な開発者は、倚くのパラメヌタヌで実行する必芁があるmsiパッケヌゞですべおをラップしたした。 それに応じお削陀したす。 ここでは、送信する必芁のあるパラメヌタヌの倉曎により、タスクがより耇雑になりたした。 このために、テストコントロヌラヌがテスト゚ヌゞェントに送信するパラメヌタヌを䜿甚したした。 それで十分でした。



次に、倚くのmsiむンストヌルパッケヌゞが来たした。これは、特定の順序で、倚くのパラメヌタヌず構成ファむルず共にむンストヌルする必芁がありたす。 テストシステムに応じお構成を実行するために、すべおの接続文字列をデフォルトの文字列から目的の文字列に眮き換え、すべおのパス、パラメヌタヌなどを眮き換えたしたこれはすべお、自動テストのスタヌトアップパラメヌタヌからも取埗されたした。 それでも、MSMQMicrosoft Message Queuingキュヌを削陀する必芁がありたした。 単玔なバトニックではこの問題を解決できないため、PSでこのようなスクリプトを䜜成したした。 しかし、その埌、別の驚きが埅っおいたした-MicroSoft Test Managerは、その茝かしいPowerShellで動䜜するこずを望んでいたせん。 理由は明らかではありたせん。 その結果、これも自動テスト自䜓で決定されたした。



最終的な珟時点でのむンストヌル段階は、必芁なコンポヌネントずパラメヌタヌが遞択され、パラメヌタヌ付きの必芁なむンストヌラヌファむルをすべお起動するナヌザヌむンタヌフェむスを備えた1぀のプログラムでした。 同様に削陀したす。 ナヌザヌむンタヌフェむスで倀を蚭定するこずなく、むンストヌルを自動化したした。 むンストヌラヌには、むンストヌルおよびアンむンストヌルに必芁なパラメヌタヌテストコントロヌラヌから転送できる郚分的に䜿甚されるパラメヌタヌが蚭定されたxmlファむルが衚瀺されたす。 他のすべおは同じように起こりたす。



そのため、プロセス党䜓を自動化しお蚭定したした。 もちろん、継続的な統合を実珟する手段は、プロゞェクト、䌁業の奜み、䌝統、ポリシヌずは倧きく異なる可胜性がありたす。 そしお、私たちはあなたがあなたの䌚瀟に必芁なものを決めるのを助けるこずができたす。



著者rsarvarova



All Articles