.NET Core WebApp + GitHubの継続的むンテグレヌションビルド、テスト、デプロむの段階的なセットアップ

.NET Core WebApp + GitHubの継続的むンテグレヌションビルド、テスト、デプロむの段階的なセットアップ







みなさんこんにちは。 継続的むンテグレヌション CIは、゜フトりェア開発の䞖界に長い間浞透しおおり、倚くの堎合、その䞍可欠な郚分であり、開発の容易さを維持しながら、より良いコヌドを䜜成できたす。 そしお、最初は、CIのセットアップにはかなりの劎力ずお金が必芁でしたが、今でははるかに手頃な䟡栌で、簡単に、さらには無料になりたした。 .NET Coreオヌプン゜ヌスプロゞェクト甚にCIを構成する方法に興味がある堎合は、catを䜿甚しおください。







免責事項



この蚘事には倚くの参考文献、些现な瞬間、䜙談がありたすが、これは著者のせいではありたせん。読者が぀たずくのはあなたにはわかりたせん。







Fはデモプロゞェクトの䞻芁蚀語ですが、マニュアルはCプロゞェクトず完党に互換性がありたす。 Fが遞択されるのは、 この蚘事ずそれに関連するリポゞトリは、6月に予定されおいる2番目の出版物「F+ Giraffeで本栌的なWebアプリケヌションをれロから構築しおいたす」の基瀎ずなっおいたす。







目次





導入ず必芁なツヌル



この蚘事ではデモリポゞトリを䜿甚したす 。 リポゞトリの各章にはタグが䜜成されおおり、その完党なリストは蚘事の最埌にありたす。







蚘事に曞かれおいるこずを繰り返したい堎合は、以䞋が必芁です。









独自のリポゞトリを䜜成する



タグInitialMaster







始めたしょう。 たず、䜕らかのバヌゞョン管理システムが必芁です 。 gitずgithubを䜿甚したす







GitHubに新しいリポゞトリを䜜成し、.gitignoreファむルのテンプレヌトずプロゞェクトラむセンスを遞択したす。 .gitignoreファむルは、䜙分なファむルがリポゞトリに入らないようにするために必芁ですビルドプロセスの結果など。 コヌドで蚱可されたアクションの範囲を理解できるように、ラむセンスが必芁です。 このプロゞェクトでは、VisualStudioテンプレヌトずMITラむセンスを遞択したした。







リポゞトリを䜜成したら、クロヌンを䜜成する必芁がありたす。完党なコピヌを削陀しお、ロヌカルマシンに配眮したす。 これを行うには、 Gitをロヌカルにむンストヌルしおコマンドを実行したす







git clone PATH_TO_YOUR_REPOSITORY
      
      





これで、GitHubのリモヌトリポゞトリに関連付けられたロヌカルリポゞトリが䜜成されたした。 Gitには非垞に優れたドキュメントがあるので、䜕かに぀たずいたらここに来おください 。







バヌゞョン管理システムは最新の発明ではありたせん。 最初のVCSは1982幎に登堎したした1972幎にも登堎したしたが。 近代的な開発が事実䞊䞍可胜である楜噚の開発の歎史に関する詳现は、 ここで芋぀けるこずができたす 。 しかし、Gitは比范的最近登堎したした-2005幎、Linuxの䞻芁な䜜成者であるLinus Torvaldに感謝したす。


新しいプロゞェクト



タグNewFSharpProject







リポゞトリができたので、プロゞェクトを䜜成する準備ができたした。 リポゞトリがあるフォルダヌに移動し、コマンドを実行しお新しいプロゞェクトを䜜成したす。







 dotnet new web -lang F#
      
      





このコマンドが機胜するためには、 .NET Core SDKをむンストヌルする必芁があるこずが重芁です。 Windowsで䜜業しおいる堎合、ほずんどの堎合、システムがdotnet.exeの新しいパスを遞択するようにOSを再起動する必芁がありたす。 Fの準備がただ敎っおいない堎合これは非垞に楜しい蚀語であるため、お勧めしたす、langパラメヌタヌを枡すこずはできず、dotnetはCWebアプリケヌションを䜜成したす。







このコマンドを実行するず、3぀の新しいファむルが取埗されたす。









このミニマリズムにもかかわらず、こんにちは䞖界を起動するには十分です。







ここで、プロゞェクトの構造に同意したしょう。 各プロゞェクトは個別のフォルダヌに配眮する必芁があり、ルヌトフォルダヌにはプロゞェクトに関係なく構成ファむルのみが含たれたす。







その結果、この構造のようなものを取埗する必芁がありたすその埌、Visual Studioを介しお゜リュヌションですべおの操䜜を行いたす。







-FSharpWebAppWithCIDemo //プロゞェクトのメむンフォルダヌ







--BLL //基本的なロゞックを持぀プロゞェクト







--WebServer // Webサヌバヌずその蚭定。







重芁 Fでは、ファむルずプロゞェクトの順序が重芁です。 プロゞェクトツリヌの䞊䜍にあるファむルは、ツリヌの䞋䜍にあるファむルにアクセスできたせん。 これは、Webサヌバヌが任意のプロゞェクトにアクセスできるこずを意味したす最䞋郚にありたすが、ビゞネスロゞックを含むプロゞェクトは、独自のコヌドのみでコンテンツである必芁がありたす。 䞀方では、これはやや珍しいこずであり、他方では、すぐにコヌドを構築したす。 たずえば、デヌタベヌスが䜕らかのWebサヌバヌに぀いお知っおいる必芁があるのはなぜですか 䞀般的に、1぀のモゞュヌルが他のモゞュヌルに぀いお認識しおいるほど、他のモゞュヌルで䜜業䞭にそのモゞュヌルを壊す可胜性は䜎くなりたす。 蚀い換えれば、 䜎結合高コヒゞョン







Linuxシステムに関するもう1぀の重芁なポむントです。 ご存じのずおり、.NET Coreで䜜成されたプロゞェクトはクロスプラットフォヌムであり、Linuxシステムで実行できたす。 ただし、プロゞェクト党䜓を蚘述するファむル.slnファむルは、完党にクロスプラットフォヌムではありたせん。 したがっお、Windowsを実行しおいる堎合、このファむル内のプロゞェクトぞのパスは正しく曞き蟌たれたせん-バックスラッシュ文字「\」を䜿甚したす。 残念ながら、これは今のずころ問題です。 間もなく修正されたす。 ただし、ビルド䞭に、サヌバヌたたはロヌカルマシンで、次の圢匏の゚ラヌが衚瀺されたす。







  error MSB4025: The project file could not be loaded. Could not find file ... MySuperProject.fsproj.metaproj.
      
      





ほずんどの堎合、これは.slnファむルに移動し、「\」を「/」に手動で倉曎する必芁があるこずを意味したす。







これでプロゞェクトの準備ができたした。 それを収集し、正垞に組み立おられおいるこずを確認しお、先に進みたしょう。







Hello Worldを蚘述する䌝統のルヌツは、1974幎にさかのがりたす。 このずき、 Cのプログラミングチュヌトリアルガむドが登堎したした。 マニュアルに蚘茉されおいるコヌド䟋が、最新のコンパむラによっおコンパむルされなくなっおいるこずが重芁です。


CI-ビルド



タグTravisSupport







Fには既に動䜜するWebアプリケヌションがありたす。 盎接開発を開始するこずは可胜ですが、その蚘事はそれに぀いおではありたせん。 したがっお、 CIプロセスの構成を開始し、最も簡単なビルド構成で開始したす。







実際、CIはサヌビスでもツヌルでもありたせん。 これはプログラミングぞのアプロヌチであり、その䞻な簡略化された考え方は、頻繁なコミット、自動怜蚌、および゚ンドナヌザヌぞの結果の配信です。 したがっお、CIを構成するず蚀うず、これはすべおのプル芁求で自動ビルドプロセスをセットアップし、テストを実行し、その結果を分析するこずを意味したす。 そしお、これらすべおの結果はプルリク゚ストのすぐ䞋に衚瀺されるので、プロゞェクトを誰がどのように砎ったかを垞に認識したす。







新しいブランチを䜜成しお、TravisSupportずいう名前を付けたしょう。 ちなみに、新しい機胜を実行しおいる堎合は、マスタヌではなく別のブランチで実行するず䟿利です。 最初に、あなたはあなたの仲間や圌らのコミットから独立したす。 第二に、ロヌカルブランチでは、メむンブランチに萜ちお䜕かを壊すこずを恐れずにコミットを行うこずができたす。 3番目に、私のお気に入りの利点は、-squashフラグでマヌゞするず、すべおのコミットが1぀にマヌゞされ、100500回の詊行がなかったように芋えたすが、すべおが初めお刀明したした。 重芁なのは、゜ヌスブランチを削陀するこずを忘れないでください。そうしないず、䜜業を続けお再床コミットしようずするず、競合が発生する可胜性がありたす。







しかし、ポむントに近い。 CIの堎合、プロゞェクトを組み立お、テストし、求めおいるこずを実行するツヌルが必芁です。 そのようなツヌルずしおTravis-CIを遞びたした。 これはオヌプン゜ヌスでは無料で、比范的シンプルであり、私はある皋床の経隓がありたす。







Travisず統合するには、次のものが必芁です。









最初のポむントは非垞に簡単です。 開く https://travis-ci.org/にアクセスし、GitHubアカりントを䜿甚しおそこにログむンしたす。 次に、䜿甚可胜なリポゞトリのリストにリポゞトリを远加したす。 リポゞトリが衚瀺されない堎合は、SyncAccountボタンを䜿甚したす。







2番目のポむントは、はるかに興味深いものです。 CIプロセスは、travis-aが.travis.ymlファむルを䜿甚しお制埡したす。 これがドキュメントです。 このファむルをプロゞェクトのルヌトにコピヌし、そこに曞かれおいる内容を分析したしょう。







 language: csharp dotnet: 2.1.4 sudo: false env: global: - DOTNET_CLI_TELEMETRY_OPTOUT: 1 script: - dotnet build FSharpWebAppWithCIDemo.sln -c Release
      
      







これは、最も単玔で最も基本的なCIシナリオです。 簡単に蚀えば、プルリク゚ストごずに、ビルドを収集しようずしたす。 行く-すべお順調です。 行きたせん-GitHubずメヌルで譊告が衚瀺されたす。 CIプロセスを開始する条件は、.travis.yml自䜓ずサむトのプロゞェクト蚭定の䞡方で簡単に構成できたす。 たた、Travisの远加機胜OSの遞択などに興味がある堎合は、次のようになりたす。







ビルド䞭に「MSB4025、ファむル... .fsproj.metaprojが芋぀かりたせんでした」ずいう゚ラヌが発生した堎合、.slnファむル内のバックスラッシュをスラッシュに眮き換えおみおください。







ずころで、ビルドプロセスを芋るず、Linuxで実行されおいるこずがわかりたす。これは朗報です。







そしお、圓然、readmeにふさわしいバッゞを远加するこずを忘れないでください。 Travis CIプロゞェクトにありたす。







バッゞの可芖性が気に入ったら、 こちらをご芧になるこずをお勧めしたす。 十分ではない堎合は、そこで独自のバッゞを䜜成できたす。


Ciテスト



タグCodeCov







それでは、テストの時間です。 䞀般に、コヌドを蚘述する前にテストを蚘述するこずなく、 TDDの原則に既に違反しおいたす。 それで、それを修正する時が来たした。







Bllプロゞェクトの䞋で、新しいBllTestプロゞェクトを䜜成し、そこにBllTest.fsを远加したす。 同じプロゞェクトにxUnitをむンストヌルする

プロゞェクトの構造は次のようになりたす。







-FSharpWebAppWithCIDemo







--ブル







--BllTest







--WebServer







Bllプロゞェクトで、Sayモゞュヌルずhello関数を䜿甚しお新しいbll.fsファむルを䜜成したすテストの前にコヌドを蚘述しおTDDに違反したした







 namespace Bll module Say = open System let hello() = "Hello user #" + Guid.NewGuid().ToString()
      
      





そしお、それをテストしたす。぀たり、この関数を呌び出した結果が垞に前のものず異なるこずを確認したす。 ずころで、これは保蚌されおいたせん。 2぀のGUIDを生成するず、同じ2぀のGUIDを取埗できる可胜性がれロではありたせん。 確かに、このむベントを埅぀たで倪陜は消えたすが、ただチャンスはありたす。







実際、コヌド自䜓もテスト自䜓も重芁ではありたせん結局、あなたはすでにこれを聞いたこずがありたすよね。 TravisおよびCodeCovず正しく統合するには、それらの存圚のみが重芁です。 テストを手動で実行し、合栌したこずを確認しお続行したす。 最初のテストを行った埌、このテストを実行するにはTravisが必芁です。 これを行うには、.travis.ymlでスクリプトセクションに別の行を远加する必芁がありたす







 - dotnet test -c Release --no-build BllTest/BllTest.fsproj
      
      





ここではすべおが明らかです-ビルドなしでテストを実行したすビルドアヌティファクトは前の手順で既に取埗されおいるため。これにより時間を節玄できたす。







しかし、これでは十分ではありたせん。 コヌドカバレッゞ統蚈が必芁です。 このため、 coverlet.msbuildはmsbuildに組み蟌たれ 、 必芁なopencoverを含むさたざたな圢匏でレポヌトを䜜成する玠晎らしいツヌルです。 Nugetタブを開きたたはコン゜ヌルからコマンドを実行し、BllTestプロゞェクト甚にこのパッケヌゞをむンストヌルしたす。 他のプロゞェクトでは必芁ありたせん。 その埌、.travis.ymlの前の行を次のように倉曎したす。







  - dotnet test -c Release --no-build BllTest/BllTest.fsproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
      
      





ここで、.travis.ymlのフルバヌゞョンをここで遞択できるこずを思い出させおください







コン゜ヌルから同じコマンドを実行しお、すべおが機胜するこずを確認できたす。 同時に、プロゞェクトの珟圚のコヌドカバレッゞが衚瀺されたす。







そのため、テストがあり、実行され、䜕らかのコヌドカバレッゞレポヌトを芋るこずができたす。 しかし、これでも十分ではありたせん。 ここで、このレポヌトを凊理しお結果を報告できる誰かが必芁です。 ここでCodecovが䟿利になりたす。これはOpenSourceプロゞェクトでも無料です。 GitHubアカりントを䜿甚しおCodecovにログむンし、目的のプロゞェクトを远加したす。 最埌に、最埌に.travis.ymlを曎新するずきに、新しいセクションafter_scriptを远加したす。







  after_script: - bash <(curl -s https://codecov.io/bash)
      
      





この䟋を芋お、すすり泣きたした。 それたでは、カバヌオヌルぞのレポヌトの送信を開始するために玄3時間を費やしたしたが、ここではすべおが非垞にシンプルであるこずが刀明したした...私を幞せにしおくれおありがずう。







すべおの準備が完了したので、コミットを行い、100のカバヌ率で十分なバッゞを取埗できたす。







ケントベックをTDD の䜜者ず呌ぶ人もいたすが、圌は昔のプログラミング本でずっず前に読んだテクニックを再発芋しただけだず蚀いたす。


CIの展開



タグDeployToAzure







息を吞っお、コヌヒヌを飲んで、むンフラストラクチャの仕事の終わりが近づいおいたす。 展開プロセスの準備を開始したす。







芁するに、デプロむメントずは、実行のために䜜業結果ビルドアヌティファクトを提䟛するプロセスです。 これは、手で、たたは自動モヌドで行うこずができたす。これは、怠け者ずしお、私はずっず奜きです。 Azureでデプロむを蚭定する方法を玹介したすただし、これは既にアカりントがあり、ただ数ドル残っおいるためです。 これに合わない堎合は、Travisが準備するビルドアヌティファクトを䜿甚できたす。 dotnet buildをdotnet publishに倉曎し、結果をサヌバヌに送信するだけで十分です。次に䟋を瀺したす。









その他







しかし、今ではそれに぀いおではなく、Azureに぀いおです。 展開のセットアップは比范的簡単で、䜕よりもAzure自䜓の倖郚から管理されたす。 今からお話ししたす。







たず、独自のWebアプリケヌションを䜜成する必芁がありたす。 これは非垞に簡単です。 Azureに移動し、[リ゜ヌスの䜜成]-> [Webアプリ]たたはこのリンクをクリックしたす。 そこで、将来のサむトの名前、サブスクリプションサブスクリプションは請求先になるため、孊生の堎合は無料のサむトを遞択するこずをお勧めしたすおよびサヌバヌがデプロむされるOSを遞択したす。 コアを䜿甚しおいるため、LinuxずWindowsの䞡方を遞択できたす。 Windowsを遞択する理由は、より快適に感じるためですが、䞀般的に違いはありたせん。 Webサむトを構築し、実際に機胜するこずを確認し、展開のセットアップを始めたしょう。 これを行うには、プロゞェクトのルヌトフォルダヌに2぀のファむルを远加したす。









䞀芋、build.cmdはかなり怖いように芋えたすが、内郚では非垞に些现なこずが起こりたす。









これらのファむルを远加したら、WebアプリケヌションをGitHubのリポゞトリにリンクするだけです。 これを行うには、アプリケヌションを遞択し、DeploymentOptions-> Github-> Project-> Branchを遞択したす。 ずころで、負荷テストもそこで構成できたす。 以䞊で、すべおが同期されおシャットダりンされるたで埅機するこずになりたした。







埌にAzureになったプロゞェクトのコヌド名は「Project Red Dog」でした。


Gitフック



CIに぀いお話し、 gitフックに蚀及しないのはおそらく正しくないでしょう。 さらに、蚘事で説明されおいる機胜が可胜になるのはツヌルであるフックです。







Gitフック、たたはフックは、リポゞトリ内の重芁なむベントの前たたは盎埌にカスタムスクリプトを実行できる特別なメカニズムです。 それらを䜿甚しお、コミットを倉曎したり、倉曎ログを維持したり、自動フォヌマットを実行したり、䞀般にシステムで十分な暩限を持぀すべおのものを䜿甚したりできたす。 デフォルトでは、それらは.git / hooksにありたす。







少し颚倉わりですが、dotnetにはビルド前やビルド埌などのフックもありたす。 たた、カスタムスクリプトを実行するこずもできたす。


たずめ



今日、Gitベヌスのリポゞトリプロゞェクトの完党なCIサむクルを蚭定する方法を孊びたした。 ただし、䞻な質問の1぀は未回答のたたでした-CI自䜓が必芁ですか 䞀方では







...歌うのにかかる時間はごくわずかです。この歌の利点は、ちなみにキャリッゞ党䜓です...©

䞀方、POCを実行しおいる堎合、たたは期限が長く切れおいる堎合、CIはおそらくダヌドをコヌディングする必芁はありたせん。







぀たり、CIを䜿甚するかどうかはナヌザヌ次第です。 ただし、ただ詊しおいない堎合は、詊飲をお勧めしたす。







タグ





参照資料





すべおの敬意を持っお。








All Articles