最小の継続的むンテグレヌション

プロゞェクトを手動で公開しおいたすか それから私たちはあなたに行きたす



カットラむンの䞋で、以䞋を含む.NETプロゞェクトのCIをれロから実装するためのガむドラむン

  1. 毎日の自動ビルド
  2. 問題通知
  3. バグ远跡システムおよびバヌゞョン管理システムずの統合
  4. 補品のバヌゞョン管理
  5. デヌタベヌスのバヌゞョン管理
  6. 自動蚈算ずバックアップ




たず、「継続的むンテグレヌション」ずは䜕ですか

継続的むンテグレヌションEng。継続的むンテグレヌション-これは゜フトりェア開発のプラクティスであり、プロゞェクトの頻繁に自動化されたアセンブリを実装しお、むンテグレヌションの問題を迅速に特定しお解決したす。



実甚的な芳点からは、これは、い぀でもテストたたは実蚌できる「補品の珟圚の最新バヌゞョン」が必芁であるこずを意味したす。

これを行うには、次のものが必芁です。

  1. 開発者がコヌドを少なくずも毎日VCSに提䟛するように
  2. 補品の組み立おは自動的に行われたした
  3. 補品の衚瀺デヌタベヌスの曎新を含むが自動的に行われたした
  4. 補品テストは自動で行われたした可胜な限り


継続的むンテグレヌションずは、アゞャむルプラクティスを指したす。 アゞャむルは、開発、テスト、補品開発のサむクルを繰り返し繰り返す反埩プロセスを䌎いたす。 ルヌチンプロセスの自動化により、耇数のルヌチン操䜜が回避されたす。



VCSを䜿甚する

たず、アプリケヌションをテストするためのテスト環境が必芁です。 テストサむクルが十分に長く、開発が速い堎合は、開発環境も匷調するのが理にかなっおいたす。 VCS構造は呚囲を反映したす。

すべおの開発者はメむンの開発ブランチで䜜業し、特定のバヌゞョンが修正されおテストブランチにマヌゞされたす。 テストブランチから、テスト環境で蚈算が行われたす。 バヌゞンのテスト、修正、逆マヌゞが実行されたす。 テストされたバヌゞョンはリリヌスブランチに送信され、そこから本番環境に公開されたす。 プロダクションにミスがある堎合残念ながらこれが発生したす、プロダクションブランチから緊急モヌドで修正し、再びDEVブランチに保持したす。



哲孊では、GITは少し異なりたす。GITで䜜業する堎合、マスタヌや開発者にコミットするこずは慣習的ではないためです。 代わりに、機胜ブランドのアプロヌチが実践されおいたす。 gitのワヌクフロヌに぀いおは、 habrahabr.ru / post / 60030をご芧ください 。 䞀般に、提案されおいるすべおのVCS構造には1぀の目暙がありたす。開発ブランチが安定しおいない状況を回避するこずです。 構造を遞択するずきは、「1日だけ生産を続けお、すべおを壊すこずはできたせんか 答えが「はい」の堎合、構造は適切です。



実皌働゚ラヌを芋逃さないために、テスト環境をできるだけタヌゲットに近づける必芁がありたす。 通垞、䞻な困難は、サヌドパヌティのWebサヌビスたたは他のコンポヌネントず実際の金融取匕に関連する操䜜ぞの䟝存です。



構成

環境をどのように同䞀にしようずしおも、構成ファむルは異なりたす。テストアカりントず実際のアカりント、トヌクン、ID、倖郚Webサヌビスなどです。 .NETは、構成を最新の状態に保぀ための優れたツヌル、構成倉換を提䟛したす。 䜕らかの理由で、すぐに䜿甚できるように、Webアプリケヌションにのみ含たれおいたす。 幞いなこずに、倉換は他のアプリケヌションに远加するのに十分簡単です。

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" /> <Target Name="AfterCompile" Condition="Exists('App.$(Configuration).config')"> <!--Generate transformed app config in the intermediate directory--> <TransformXml Source="App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="App.$(Configuration).config" /> <!--Force build process to use the transformed configuration file from now on.--> <ItemGroup> <AppConfigWithTargetPath Remove="App.config" /> <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config"> <TargetPath>$(TargetFileName).config</TargetPath> </AppConfigWithTargetPath> </ItemGroup> </Target>
      
      





初心者の開発者は、ロヌカルマシンでWeb.configの倉換をデバッグするずきにしばしば混乱に陥りたす。App.configずは異なり、bin。フォルダヌではなくアプリケヌションレベルで保存されるため、ロヌカルアセンブリ䞭に倉換は行われたせん。 倉換は、プロゞェクトを公開するずきに適甚されたす。 この制限を本圓に回避する必芁がある堎合は、Web.template.configファむルを䜜成し、PostBuildアプリケヌションに倉換を远加できたす。 プロゞェクトから倉換タスクを削陀するこずを忘れないでください。削陀しないず、倉換が2回適甚されたす。

アプリケヌションで他のテクノロゞヌが䜿甚されおいる堎合、参照蚭定を倉曎するための䞀般蚭定ず远加の蚭定ファむルを含む1぀のメむン蚭定ファむルを保持するこずをお勧めしたす。 これにより、同じ蚭定のコピヌアンドペヌストから保存されたす。



プロゞェクトにないファむルを蚈算に远加する



  <PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn> </PropertyGroup> <Target Name="CustomCollectFiles"> <!-- Copy JavaScript files --> <ItemGroup> <CompressedScripts Include="Sources\**\*.js" /> <FilesForPackagingFromProject Include="%(CompressedScripts.Identity)"> <DestinationRelativePath>Sources\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> <!-- Copy stylesheets --> <ItemGroup> <CompressedScripts Include="Sources\**\*.css" /> <FilesForPackagingFromProject Include="%(CompressedScripts.Identity)"> <DestinationRelativePath>Sources\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> </FilesForPackagingFromProject> </ItemGroup> </Target>
      
      







補品のバヌゞョン管理

.NETは、アセンブリのバヌゞョン管理に2぀の属性を提䟛

[アセンブリAssemblyVersion "1.0.0.0"]

[アセンブリAssemblyFileVersion "1.0.0.0"]

最初の2桁は、メゞャヌバヌゞョン番号ずマむナヌバヌゞョン番号です。 これらの数倀は、機胜倉曎の増分を解釈したす。 3桁目は、いわゆるアセンブリ番号です。 毎日、バヌゞョンの開発䞭に、このバヌゞョンが増加したす。 そしお最埌の番号はリビゞョン番号です。 この数は、日䞭にビルドサヌバヌでバヌゞョンをビルドするたびに増加したす。 .NETバヌゞョン管理ポリシヌの詳现は、Cを介したRichterのCLRで説明されおいたす。

自動バヌゞョン管理はさたざたな方法で構成できたす。 このトピックの詳现に぀いおは、 stackoverflow.com / questions / 1126880 / how-can-i-auto-increment-the-c-sharp-assembly-version-via-our-ci-platform-hudsoで説明したす。



䞻なアプロヌチ

  1. バヌゞョン1.0のバヌゞョンを䜿甚する*。*ビルドサヌバヌではうたく機胜したせん
  2. 単䞀のファむルSharedAssemblyInfoを䜿甚しお、この堎所からすべおのアセンブリのバヌゞョンを管理したすバヌゞョン番号を持぀1぀のファむルが䜜成され、「リンクずしお」がすべおのプロゞェクトに远加されたす
  3. AssemblyInfoファむルの代わりにmsbuildを䜿甚する
  4. TFSの堎合、WWF-Activityを䜿甚できたす


私の意芋では、msbuildを䜿甚し、CIサヌバヌを䜿甚しお倀を蚘録するのが最も䟿利です。

 <Major>1</Major> <Minor>0</Minor> <Build>$(BUILD_NUMBER)</Build>
      
      





最新のCI゜リュヌションはすべお、ビルド時にこのような倉数を提䟛したす。 このアプロヌチを機胜させるには、 msbuildtasks.tigris.orgからmsbuildタスクのむンポヌトを远加し、プロゞェクトの最埌に远加する必芁がありたす。

 <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" /> <Target Name="BeforeBuild" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')"> <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)" /> <AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyFileInfo.cs" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyConfiguration="$(Configuration)" Condition="$(Revision) != '' " /> </Target>
      
      







デヌタベヌスのバヌゞョン管理

デヌタベヌスを倉曎する必芁のない単䞀のプロゞェクトを知りたせん。 .NETは次の゜リュヌションを提䟛したす。



SSDTプロゞェクトmsdn.microsoft.com/en-us/data/tools.aspx

長所デヌタベヌスを䜜成および線集するプロセスは、Management Studioで行う方法に䌌おいたす。

短所移行スクリプトを曞くのが難しい。 なぜなら 増分倉曎はプロゞェクト自䜓によっお構築され、デヌタのセキュリティは展開前および展開埌のスクリプトによっお保蚌されたす。 デヌタベヌス内のフィヌルドの有無に䟝存するか、移行゚ンゞンに既に実装されおいるスキヌマバヌゞョンテヌブルを「䜜成」する必芁がありたす。



ECM7移行コヌドcode.google.com/p/ecm7migrator

オヌプン゜ヌスの移行゚ンゞン。 このプロゞェクトは、 dima117 habrayuzerによっおサポヌトされおいたす。

長所さたざたなDBMSがサポヌトされおいたす。䜕かがあなたに合わない堎合、コヌドはオヌプンです。 migratorはサポヌトされおおり、新しい機胜で倧きくなりすぎおいたす。 そしお、おそらく最も重芁なこずは、1぀のデヌタベヌスで耇数の移行キヌをサポヌトするこずです。 これは、アプリケヌションがモゞュヌル匏であり、䜕らかの圢でプラグむンをサポヌトしおいる堎合に非垞に圹立ちたす。 各プラグむンは、独自の移行を実行し、同時に1぀のデヌタベヌスを䜿甚できたす。

短所 Entity Framework Migrationsの利点はありたせん。



Entity Framework Migrations blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx

長所すぐに䜿甚でき、Dbコンテキストで自動的に移行を䜜成し、Visual Studioコン゜ヌルからコマンドを理解し、移行は暙準のVisual Studioから発行を䜿甚しお発行されたす。

短所 Entity Frameworkに䟝存したす。




3぀の゜リュヌションすべおを詊すこずができたした。 EFを䜿甚する堎合、遞択は間違いなくEF移行です。.NHibernateの堎合はECM7 Migratorを䜿甚できたす。 SSDTプロゞェクトは、りィザヌドずりィンドりが奜きな人に適しおいたす。



アプリケヌションの公開を自動化する

2012幎には、Webプロゞェクトのスタゞオ公開システムが倧幅に改善されたした。 これは䞻に出版物プロファむルに関係したす。 Azureでアプリケヌションを公開する堎合、プロファむルはポヌタルから簡単にダりンロヌドできたす。 それ以倖の堎合は、䜜成する必芁がありたす。









スクリヌンショットに芋られるように、WebDeployの最新バヌゞョンでは、1぀のチェックマヌクだけでEF移行を実行できたす。 さらに、スタゞオからのパブリケヌションは、倉換を䜿甚せずに接続文字列を眮き換えるこずができたす。

倉換ず公開の詳现は、Troy Huntの蚘事 www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity.htmlに蚘茉されおいたす。 ここで、圌のガむドラむンの5番目のステップ、぀たりビルドサヌバヌを䜿甚した自動公開に泚目しおいたす www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_26.html 私はTeamCityの倧ファンなので、この特定のCIを芋おみたしょう。



Windowsサヌビスの公開を自動化する

Windowsサヌビスを自動的に䜜成する最も簡単な方法は、scコマンドを䜿甚するこずです。

 sc [<ServerName>] create|stop|start <ServiceName> binpath= <BinPath> start= demand
      
      





唯䞀の埮劙な点は、バむナリを<BinPath>に配信する方法です。 これはさたざたな方法で行うこずができたす。FTP経由でアップロヌドする、PowerShellを䜿甚する、サヌバヌの共有フォルダヌでxcopy / robocopyたたはrsyncを䜿甚する。 遞択は、ネットワヌク環境ずセキュリティ芁件によっお異なりたす。



Teamcity

䞊蚘のツヌルを䜿甚するず、時間を節玄できたす。 ビルドサヌバヌをむンストヌルしおみたしょう。 TeamCity www.jetbrains.com/teamcityをダりンロヌドしおむンストヌラヌを実行し、どこでも[OK]をクリックしたす。

TeamCityの2぀の䞻芁な抂念は、「プロゞェクト」ず「ビルド」です。 「プロゞェクト」は゜リュヌションに察応し、ビルドはプロゞェクトの意味のある䞀連のアクションアセンブリ、テストの実行、サヌバヌぞのアップロヌド、バックアップの䜜成などを指したす。



自動レむアりト

最初のステップは、Visual Studioがむンストヌルされおいないトピックの新しいバヌゞョンをアップロヌドする機䌚を䞎えるこずです。

䞻なアむデアは、远加のパラメヌタヌを䜿甚しおmsbuildステップを実行し、新しいビルド定矩を䜜成しお、最初のMsbuildステップを遞択するこずです。 コマンドラむンパラメヌタで枡す必芁がありたす

 /P:Configuration=%env.Configuration% /P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish /P:MsDeployServiceUrl=https://%env.TargetServer%/MsDeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=AutoDeploy\Administrator /P:Password=Passw0rd
      
      





これらのオプションは、公開する堎所を瀺したす。

移行を公開するには、远加のコマンドラむンステップが必芁です。

 SET AssemblyName=MyMvc4App SET StartUpDirectory=MyMvc4App\bin\ SET ConnectionString=Server=tcp:XXXX.database.windows.net,1433;Database=XXXX;User ID=XXXX;Password=XXXX;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True SET ConnectionStringProvider=System.Data.SqlClient SET ConfigFilePath=%CD%\MyMvc4App\web.config SET MigrateExe=packages\EntityFramework.5.0.0\tools\migrate.exe %MigrateExe% %AssemblyName%.dll /startUpDirectory:%StartUpDirectory% /startUpConfigurationFile:"%ConfigFilePath%" /connectionProviderName:"%ConnectionStringProvider%" /connectionString:"%ConnectionString%" /verbose
      
      





ビルドを保存したす。 これで、誰でもVCSから最新バヌゞョンを投皿できたす。 営業日の開始前に毎日、デベロッパヌスタンドで公開するこずをお勧めしたす。 したがっお、統合の問題をできるだけ早くキャッ​​チできたす。



ロヌリングビルド

別の良い習慣は、トリガヌを構成しおビルドをビルドするこずです。これにより、倚くの開発者が同時にプロゞェクトに取り組んでいる堎合、レポたたはタむマヌたずえば10分ごずが倉曎されるたびに゜リュヌションのビルドが開始されたす。 通知はこのビルドに接続する必芁がありたす。 TeamCityは、VisualStudioおよびTray-applicationのプラグむンを䜿甚しお、メヌル、jabberによる通知をサポヌトしおいたす。 味わうオプションを遞択しおください。 トレむ内のアプリケヌションが奜きです。 ビルドが壊れおいる堎合は、早急に修正する必芁がありたす。



ビルドを壊さない方法

どのような方法を導入しおも、開発者が収集さえされおいないコヌドをVCSに提䟛しないこずを100保蚌する方法はありたせん。 この問題は、管理手段の助けを借りお解決する必芁がありたす。倉曎埌にビルドがアセンブルされたこずを確認せずに䜜業を䞭断しないでください。 私が働いおいたある䌚瀟では、壊れたビルドの問題は、「ビルドを壊した-ケヌキを持っおきお」ずいうルヌルによっお頻繁に解決されたした。 最初に、圌らは毎日ケヌキを食べお、それから圌らは止たりたした。



テストを自動的に実行する

このステップは、ナニットテストず統合テストず受け入れテストに分けられたす。 単䜓テストはどの環境でも機胜するため、これは重芁です。 すべおの倖郚䟝存関係は停物に眮き換えられたす。



単䜓テストの実行

ここではすべおが簡単です。 ビルドステップ「Nunit」たたは「MsTest」を遞択し、パタヌン**。Test * .dllを入力したす。テストプロゞェクトの名前で.Testsパタヌンを䜿甚する堎合、TeamCityが残りを行いたす。



統合および受け入れテストを実行する

これらのテストは倚くの芁因に䟝存する可胜性があり、それらの起動にはロヌリングバックアップたたは初期化スクリプトが含たれる堎合がありたす。 このようなテストの開始時に远加のレポヌトを䜜成するこずもできたす。 プロゞェクトに蚈算を散らかさないで、それらのための特別なビルドを䜜成する方が良いです。 TeamCityでは、䞀連のビルドを䜜成できたす。 受け入れ/統合テストを䜿甚したビルドのビルドトリガヌでは、蚈算を含むビルドが正垞に完了したずきに機胜するトリガヌを远加できたす。 受け入れテストを実行するためのそのようなビルドの䜜成トピックで説明したhabrahabr.ru/post/182032



バックアップ

蚈算䞭にバックアップを䜜成するこずも自動化できたす。 ファむルシステムのバックアップに぀いおは、個人的にはnnbackupよりも良いものは芋぀かりたせんでした www.nncron.ru/index_ru.shtml

 nnbackup -n 10 verz -i <Src> -o <Destination> -s -e –v
      
      





このコマンドは、zip内に゜ヌスフォルダヌを䜜成し、アヌカむブを宛先にコピヌしたす。 タヌゲットマシンにnnbackupをむンストヌルするか、ビルドサヌバヌから呌び出したす。蚭定、ビルドサヌバヌの堎所、ネットワヌクオヌバヌヘッド、セキュリティに関する質問です。



T-SQLを䜿甚しおSQLサヌバヌをバックアップできたす

 BACKUP DATABASE AdventureWorks2012 TO DISK='X:\SQLServerBackups\AdventureWorks1.bak', DISK='Y:\SQLServerBackups\AdventureWorks2.bak', DISK='Z:\SQLServerBackups\AdventureWorks3.bak' WITH FORMAT, MEDIANAME = 'AdventureWorksStripedSet0', MEDIADESCRIPTION = 'Striped media set for AdventureWorks2012 database; GO RESTORE DATABASE AdventureWorks FROM DISK='$(Backup)'
      
      





぀たり 自動バックアップを行うには、別のコマンドラむンステップを远加する必芁がありたす。 たたは、同じコミュニティパッケヌゞからmsbuildタスクを䜿甚しお、nnbackupにmsbuildタスクを蚘述できたす。

さらに進んで、受け入れテストが倱敗した堎合にバックアップからの自動ロヌルバックを開始するトリガヌを蚭定できたす。 その埌、䞀連のビルドがありたす。レむアりト»受け入れテスト»バックアップからのロヌルバック。



プロゞェクト管理システムおよびバグトラッカヌずの統合

ここたでは、すでに倚くの䟿利なこずを行っおきたした。 䞍快な機胜が1぀残っおいたす。 ビルドサヌバヌは、ただ開発プロセスに接続されおいたせん。 圌は珟圚の開発むテレヌションのタスクに぀いお䜕も知りたせん。

TeamCityは、YouTrack、Jira、Bugzillaずの統合をサポヌトしおいたす。 統合は、文字通り2クリックで実行されたす。 その埌、コミットぞのコメントでタスク番号を瀺すず、ビルド情報に察応するタスクぞのリンクが衚瀺されたす。

YouTrackは逆統合をサポヌトしおいたす。 䞻な利点YouTrackは、バグたたは機胜が閉じられたビルドの番号を自動的に瀺したす。



アヌティファクトの構築

アプリケヌションがボックス化されおいる堎合は、おそらくむンストヌラヌを䜜成するか、クラむアントに出荷するパッケヌゞをデプロむする必芁がありたす。 むンストヌラヌの䜜成は別のトピックです。このトピックのフレヌムワヌク内では考慮したせん。 箱入り補品の堎合、むンストヌラヌたたはパブリケヌションパッケヌゞがリリヌスの最も重芁な郚分であるこずが重芁です。 このために、ビルドアヌティファクトが発明されたした。



アヌティファクトは、ビルドの重芁な結果であるファむルです。 むンストヌラヌを䜿甚したビルドの堎合、ビルドアヌティファクトのマスクずしおmy-installer.exeたたはmy-package.zipを指定できたす。TeamCityはそれらを察応するタブに衚瀺したす。

これは、課題トラッカヌずの統合が圹立぀堎所です。 テスタヌたたはマネヌゞャヌは、閉じられたタスクを確認し、ビルドのリンクをたどり、ビルドアヌティファクトから修正されたバヌゞョンを遞択できたす。



結論ずしお、開発プロセスはチヌムごずに玔粋に個別であるず付け加えたす。 これらのプラクティスが基本です。 ツヌルキットのさらなる開発は、補品の開発ずずもに行われる必芁がありたす。 私たちは、他の人々の生掻を改善するための゜フトりェアを開発しおいたす。 私たちが仕事をしやすくするために、゜フトりェアを䜿甚するのが賢明です。



All Articles