DIY連続統合システム

こんにちは、 %username%



継続的インテグレーションについてはこちらをお読みください。おもしろくなったら、一般的にこのテーマに関する文献を探してください。 CIを使用するメリットをすべて実感している場合は、引き続きアイデアを発展させていきます。 最も人気のある継続的インテグレーションシステム:Hudson、TeamCity、CruiseControl。 これらのすべてのシステムでは、ビルド構成は通常UIを介して行われます。 ブラウザウィンドウで実行する必要があるものを選択します。ビルドは自動化されます(もちろん、独自のスクリプトを作成して実行することもできます)。 豊富な設定とあらゆる種類のローション。 そして、これらのシステムの作成者は何をしたのだろうと思いました。 そして、開発者がこれらのことに時間を費やさないように、さまざまなビルダー、コンパイラ、テスト、その他のツールのチームを作りました。 システムとコマンドを書くのに時間がかかりますか?



小規模なプロジェクトでは、いくつかのツールのみを使用します。



必要なツールのコマンドラインオプションを調べて、いくつかのスクリプトを記述し、プロセス全体を自動化してみませんか。 これが最良のソリューションであると言っているのではなく、CIと呼ばれるこの素晴らしいバイクを発明したかっただけです。

多かれ少なかれ深刻なアプリケーションを開発する場合、まともな企業はバージョン管理システムを使用します 。 そしてそれらのほとんどにはフックがあります-リポジトリイベントハンドラー。 私が最初に思いついたのは、この自動化方法でした。



VCSとしてsvnを使用します(実際、他のシステムではフックの違いは最小限であるか、まったくありません)。



1.リポジトリを作成します。

2. hooksフォルダーに移動して、そこにpost-commit.batを作成します。 このバッチファイルでは、各コミット後に実行する必要があるコマンドを記述します。

3.リポジトリからチェックを行います。 ルートディレクトリが乱雑にならないようにCIフォルダーを作成します。 CIフォルダーでRun.batファイルを作成します。このファイルにはプロセス全体が記述されています。

4. post-commit.batでRun.batを実行します-これがすべて自動化です



post-commit.bat:

D:\ Work \ SomeProject \ CI \ Run.bat



開発中のプロジェクトは、特定のテストセットを備えた.NETのクラスライブラリです。



そのため、CIシステムの機能を定義します



  1. リポジトリからソースコードを取得する
  2. コミット後のクイックビルドとビルド後の単体テストの実行
  3. ビルド結果通知




もちろん、これはCI機能の完全なリストではありませんが、すべてのプラットフォームを網羅し、すべての開発方法論の詳細を考慮しようとはしていません。



1.リポジトリからソースコードを取得する



これを行うには、svn updateコマンドを実行するだけです。 変更のたびに、更新には最小限の時間がかかります(オプションとして、フォルダーを完全にクリアしてチェックアウトを実行できます)



2.コミット後の高速ビルドとビルド後の単体テストの実行



これらの目的のために、msbuildスクリプトを使用します。

<?xml version = "1.0" encoding = "utf-8" ?>

<Project DefaultTargets = "Test" xmlns = " schemas.microsoft.com/developer/msbuild/2003" >

<!-MSBuildタスクのインポート->

< プロジェクトの インポート = "$(MSBuildExtensionsPath)\ MSBuildCommunityTasks \ MSBuild.Community.Tasks.Targets" />

<PropertyGroup >

<構成 条件 = "'$(構成)' == ''" >デバッグ</ /構成>

<ClassLibraryOutputDirectory > bin \ $(構成) </ ClassLibraryOutputDirectory >

<ProjectDir > SomeSolution \ SomeProject </ ProjectDir >

<ProjectTestDir > SomeSolution \ SomeTests </ ProjectTestDir >

<ProjectFile > $(ProjectDir)\ SomeProject.csproj </ ProjectFile >

<TestProjectFile > $(ProjectTestDir)\ SomeTests.csproj </ TestProjectFile >

</ PropertyGroup >



<!-VSによって生成されたプロジェクトファイルを呼び出してプロジェクトをビルドする->

<ターゲット = "ビルド" >

<MSBuild プロジェクト = "$(ProjectFile)" />

<MSBuild プロジェクト = "$(TestProjectFile)" />

</ターゲット>



<!-単体テストの実行->

<ターゲット = "テスト" DependsOnTargets = "ビルド" >

<Exec コマンド = "" %PROGRAMFILES%\ NUnit 2.5.10 \ bin \ net-2.0 \ nunit-console.exe "$(ProjectTestDir)\ $(ClassLibraryOutputDirectory)\ SomeTests.dll / xmlConsole" />

</ターゲット>

</プロジェクト>


標準出力ストリームをファイルにリダイレクトすることにより、MSBuildの結果をCI \ Logsフォルダーに配置します



3.ビルド結果の通知



ほとんどのCIシステムには通知付きのレターを送信する機能がありますが、そのような控えめな目的のために、レターを送信してメールボックスを整理したくなかったため、ICQへのメッセージ送信に制限することにしました。 NOscarライブラリを使用して、柔軟に構成され、uinsのリストにメッセージを送信する小さなコンソールアプリケーションを作成しました。 以前に受け取った文字列「ビルド成功」のビルドログでの検索に基づいてメッセージを生成します。



すべてのステップはうまくいっているように見えますが、それらを順番に実行することは残っています。



CI \ Run.bat:

cd / d ...

REM 1.最終ソースの取得

svn update

REM 2.ユニットテストのビルドと実行

" windir \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe" Master.build> CI \ Logs \ build.log

REM 3.通知を送信する

「メッセージ =ビルドに成功しました」を設定します。

「ビルドに成功しました」を見つけます。 CI \ログ\ build.log> NUL

errorlevel equ 1 set "Message = Build failed。"の場合

CI \ Notifier \ ICQSender.exe " メッセージ "




その結果、使用するツールをより詳細に研究することで簡単かつ有益に拡張できる、かなり軽量な自動CIシステムが完成しました。 そして、重要なことに、ディレクトリのクリーンさにより、プロセスがより視覚的になります(使用しないユニバーサルスクリプトのパックはありません)。



ご清聴ありがとうございました。



PS:そのようなスクリプトを生成するための一種のファクトリーを書くという考えがあります。 スクリプトが必要でした-サイトにアクセスしました-有用なヒントとコツを備えた2、3の連続したページ-ダウンロードするスクリプトファイルを取得します-それをフォルダーに入れました-完了です。 もちろん、既存のサーバーの1つを最新のサーバーの容量で配置する方が簡単ですが、それでもフォルダーに余剰がない場合はより快適になります。



All Articles