M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Visual StudioソリューションをTravis CIでビルド&テストする

Travis CIはGitHub上のGitリポジトリでバージョン管理されているプロジェクトのコードに対して、PushやPullリクエストをトリガーにして自動的にビルドやテストを実行して結果をログしてくれるサービスです。OSSのプロジェクトに対しては無償、それ以外のプロジェクトに対しては有償でサービス提供しています。Travis CIについてはまだ日本語ドキュメントは少ないようですがその概要や利用方法はこちらのページなどで取り上げてくれています。

今回、これまでこのブログ上で紹介してきたいくつかのC#プログラムのGitリポジトリをこのTravis CIに接続してみました。その手順をメモしておきます。

NOTE: Travis CIはビルドの実行にDebianLinux仮想マシンを利用しているようです。当然ビルドはMonoにより行われます。よってWindows OSの.NET Frameworkでしかビルドできない構成のソリューションはTravis CI上でビルドできないはずです。Xamarin StudioやMonoDevelopにより作成・メンテ・動作確認されているVSソリューションであれば問題ないと思いますが、VSにより作成・メンテ・動作確認されているものの場合はビルドできない可能性があると思います。

#1. Travis CIにサインアップする

Travis CIのサインインはGitHubアカウントを使ったOAuth認証で行われます。トップページの[Sign Up]をクリックすると、GitHubOAuth認証・認可ページに遷移します:

f:id:m12i:20161228095313p:plain

[Review permissions]欄でTravis CIに許可される機能をチェックしてください。[Organization access]欄にあなたが参加している組織リポジトリの一覧が表示されている場合は、ここで同じようにTravis CIのアクセスを許可するかどうかを選択できます。[Authorize application]ボタンをクリックすると認証・認可が実行されます。

#2. 対象リポジトリをアクティベートする

OAuthの認証・認可が終わるとTravis CIのページに戻されます。この記事を書いている現在(2016年12月)ではサインイン後のトップページは以下のような画面になっています。あなたがGitHub上で管理しているリポジトリが左側のペインに表示され、右側には個々のリポジトリのステータスが表示されるレイアウトです(各リポジトリ=プロジェクトのビルド結果次第で表示カラーやテキストは変わってきます):

f:id:m12i:20161228095812p:plain

左側のペインでTravis CIで継続的インテグレーションの対象にしたいリポジトリ名を選択(クリック)します。すると右側のペインにそのステータスが表示されます。

この表示の右上に[More options]というドロップダウンリストがあります。このリストから[Settings]を選択(クリック)します(ドロップダウンリストから選ばなくても、ステータス表示画面のタブのなかに[Settings]が存在するかもしれません):

f:id:m12i:20161228100602p:plain

設定画面が表示されるので[General Settings]で以下の項目をONにしておきます。画面での変更は即座に保存されるようです。これでアクティベートは終わりです:

  • Build only if .travis.yml is present
  • Build pushes
  • Build pull requests

f:id:m12i:20161228100650p:plain

#3. プロジェクトに.travis.ymlファイルを追加する

Travis CIに対してプロジェクトで使用している言語やビルド前後に実行させたいスクリプトを指定するため、 .travis.yml というファイルを作成してプロジェクトのルートに保存します。このファイルにはCIのために用意された仮想環境(DebianLinuxみたいです)のシェルで実行させるコマンドを記述できます。

数年前までC#Travis CIでサポートされておらず、このymlファイルの中でオープンソースCLR実装であるMonoをインストールするコマンドまで記述する必要があったようです。が、現在はさすがにそこまでする必要はなく、ただNUnitなどテストランナーの準備についてだけ特別な考慮が必要という状態のようです(こちらの記事にそのような記述がありました)。

ともかくも、Visual StudioC#プログラムのソリューションをTravis CI上でビルド&テストさせるため、こちらのブログ記事 "Setup Travis CI to compile a C# project and run NUnit tests" を参考に.travis.ymlファイルを作成します:

language: csharp
script:
  - xbuild /p:Configuration=Debug (ソリューション名).sln
before_install:
  - sudo apt-get install nunit-console
before_script:
  - nuget restore (ソリューション名).sln
after_script:
  - nunit-console (テストプロジェクト)/bin/Debug/(テストアセンブリ).dll

参考までに、 "Tac.MetaServlet.Client" のために作成したymlファイルの内容を掲載しておきます。このソリューションには3つのテストプロジェクトがあるので、yml末尾のテストコードを含むアセンブリの記載が複数行になっています:

language: csharp
script:
  - xbuild /p:Configuration=Debug Tac.MetaServlet.Client.sln
before_install:
  - sudo apt-get install nunit-console
before_script:
  - nuget restore Tac.MetaServlet.Client.sln
after_script:
  - nunit-console Test.Tac.MetaServlet.Rpc/bin/Debug/Test.Tac.MetaServlet.Rpc.dll
  - nunit-console Test.Tac.MetaServlet.Client/bin/Debug/Test.Tac.MetaServlet.Client.dll
  - nunit-console Test.Tac.MetaServlet.V56.Client/bin/Debug/Test.Tac.MetaServlet.V56.Client.dll

ymlファイルができたら手元のリポジトリにCommitして、GitHub上のGitリポジトリにPushします。

#4. ビルドステータスをチェックする

.travis.ymlをPushしてしばらくすると、Travis CIが自動的にこれを検知して、ymlに記述された設定・手続きでビルドを開始します。ビルドが開始されるとTravis CI上当該プロジェクトの表示がイエローになり、ビルドが成功の場合はグリーンになります:

f:id:m12i:20161228102821p:plain

プロジェクト名の右側に表示されているアイコン(上手では「build passing」)をクリックすると、README.mdなどに貼り付けてプロジェクトのステータスを示すためのバッジのコードを入手できます。