C#でもUbuntu+Docker+Jenkins+GitBucket+MonoでCIしたい(CI編)
はじめに
前回はJenkinsとGitBucketの環境を構築しました。 今回は実際にJenkinsでビルドとテストを実行させてみましょう。
プロジェクトの作成
まずはCIをブンブン回すプロジェクトを作成します。
テストの実装及びJenkinsでのテストの実行のために
NUnit
NUnit.Runners
をNuGet経由でインストールし、リポジトリ直下のnuget
ディレクトにNuGetの実行ファイルを突っ込んでおきます。
というわけで今回使ったのがこちら。
なお、弊社はなんとなくGitHubのリポジトリが不用意に増えるのが嫌なのでGitHubに上げてるのは汎用リポジトリに突っ込んじゃってますが、今回の内容ではHelloMonoCi
が独立したリポジトリだと思って下さい。
GitBuckerリポジトリの作成
とりあえずリポジトリを作成して、先程作成したVisual Studioプロジェクトを突っ込んでおきましょう。
Jenkinsビルドジョブの作成
ジョブの作成からフリースタイル・プロジェクトのビルド
を選択します。
設定画面ではとりあえずこんな感じに設定します。
名前は自由で構いません。
Monoはスレーブノードにしか(今回の構成では)インストールされていないので、スレーブノードで実行されるように実行ノードの制限はかけておきましょう。
この辺は特にこれと言った注意点はありません。
あとでweb hookを引っ掛けるので、Build when a change is pushed to GitBucket
のチェックを入れておきましょう。
この辺は好みでどうぞ。
ビルドの最初のステップでNuGet経由でライブラリを復元します。
mono nuget/nuget.exe restore HelloMonoCi/HelloMonoCi.sln
リリースビルドを実行します。
xbuild /p:Configuration=Release HelloMonoCi/HelloMonoCi.sln
後続のテストリザルドパブリッシャー殿がNUnit3形式だと『無☆理』と言って死ぬので--result:TestResult.xml;format=nunit2
を指定します。
mono HelloMonoCi/packages/NUnit.ConsoleRunner.3.4.1/tools/nunit3-console.exe \ HelloMonoCi/HelloMonoCi.Test/HelloMonoCi.Test.csproj \ "--config=Release" "--result:TestResult.xml;format=nunit2"
テストリザルドファイルを指定します。
サーバのローカルアドレスが192.168.0.10
だとかGitBucketのユーザがurikk
だとかどうでもいい情報を全世界に垂れ流しつつ、とりあえずJenkinsはこれでokです。
GitBucker Web Hook
GitBucketのリポジトリに戻ってweb hookの設定をします。
Payload URLにはhttp://192.168.0.10:8090/gitbucket-webhook/
を指定して、あとはデフォルトで大丈夫です。
ここまで来ればもう終わり。あとはGitBuckerにプッシュするだけで優秀な執事がビルドとテストを回してくれます。
おわりに
まぁ、ふつーにWindowsでビルドサーバーを立てるかAppVeyorを使ったほうが圧倒的に楽ですね。 公開前に読み返して『これ何かの意味があるのかなぁ?』と頭を抱えています。
あと、全く関係がないのですが弊社は.NETの単体テストライブラリはMSTestしか使ったことがなく、またMSTestで事足りてたので他のライブラリを使うという発想自体がなく今までNUnitを触ったことすらなかったのですが、NUnitって良いですね。
特にTestCase
によるパラメータ化テストはMSTestには無い*1のでそのうち追加されたらいいな〜とおもいました。
おわり
*1:外部ライブラリを導入すれば同じようなことはできるっぽい