読者です 読者をやめる 読者になる 読者になる

うにだよのBlog

C#関連のことを書きます

Windowsにjenkinsを入れてみる その3

※2015/5/16追記:Jenkinsジョブを実行するスクリプトが間違っていたため修正

※2015/5/23追記:妥協してVisual Studio外からコミットする方法を追記

やりたいこと

Visual Studio上からGitにコミットをすると、Jenkinsで自動でビルド、テスト実行を行う

環境

Windows

Jenkinsはローカルインストール

GitHub利用

Visual Studio 2013Comunity標準のコード管理機能利用

結果

Visual Studioのコード管理のコミットからのJenkins起動はできない。

Visual Studio上からではなく、コマンドラインやGitGUIからコミットをすればJenkinsジョブを起動できる

 

GitコミットとJenkinsの連動の流れ

1.Gitフックを利用してコミット時にスクリプトを実行

2.スクリプトからJenkinsジョブを起動

 

Gitフック

Gitの特定のアクションに対してスクリプトを実行できる

大きく分けて「クライアントサイドフック」(commitなどを検知)、「サーバサイドフック」(pushを検知)がある。

ローカルリポジトリ\.git\.hooks

に、任意の種類のフックスクリプトを配置すればスクリプトを実行してくれる。

今回は「クライアントサイド」の「pre-commit」フックを使用するので、hooksディレクトリにpre-commitという名前のファイルを配置する。

Git - Git フック

Gitのフックの説明と挙動の検証 - Qiita

 

スクリプトによるJenkinsジョブの実行

Jenkinsを呼び出すスクリプトの書き方は以下 

#!/bin/sh

wget --spider http://ホスト名/job/プロジェクト名/build

(Jenkinsのセキュリティが有効化されている場合は、認証トークンを発行して、Jenkinsジョブ呼び出しURLを<http://あなたのホスト/jenkins/job/プロジェクト名/build?token=認証キー>に変更)

Building a software project - 日本語 - Jenkins Wiki

Gitプッシュ時にJenkinsで自動ビルド - Devlog

シェルスクリプトWindows上で動くのか疑問でしたが動作します。おそらくGit\bin\sh.exeがあるから動くのではないかと思います。

 

Visual Studioはクライアントサイドフックをサポートしていない

Visual StudioのGitによるソース管理は、直接Gitを使わずlibgit2を介して行っている。

そのためクライアントサイドフックをサポートしていない。

(調べてみるとGitHub for Windowsからも同様みたいです)

多数の言語に対応したGitライブラリ·libgit2 MOONGIFT

Enable Client-side Hooks When Committing Code to a Git Source Control Instance – Visual Studio

git - GitHub for Windows Pre-Commit Hook - Stack Overflow

 

直接GitでコミットすればGitフックを起動できる

コマンドラインやGitGUIからのコミット時にはクライアントサイドフックが起動する。Visual Studioのチームエクスプローラの「操作」からコマンドラインもフォルダも開くことができるので、そこまで手間ではない。

私はGti詳しくないのでGitGUIでコミットしている。

 

おまけ:Gitフックからbatファイル実行

 任意のGitフックスクリプトに以下のスクリプトを書く

#!/bin/sh

cmd.exe /c "C:\path\to\somebatch.bat"

相対パスでバッチファイルを指定する場合、カレントディレクトリはリポジトリのルートであることに注意(.gitフォルダのある階層)

msbuild - how do I run cmd from the git post-commit hook - Stack Overflow

 

雑感

プライベートで一人でコードを書くときにはビルドとテストは確認してからコミットするので、調べたはいいけどあまり使用してないです。

でも使う前と比べてJenkinsのありがたみは分かってきました。もともとそれが目的だったので問題なし。

Windowsにjenkinsを入れてみる その2

今回はビルド後にテスト実行するようにしてみた。

 

手順

1.プラグインをインストール

MSTest plugin

MSTestRunner plugin

2.「Jenkinsの管理」→「システムの設定」からMSTestの設定

3.既存ジョブの設定画面を開き、ビルド手順の追加で「Windowsバッチコマンドの実行」を選択。TestResultsディレクトリ作成。

4.続けて、ビルド手順の追加で「Run unit test with MSTest」を選択。ビルド後のテストのパス、テスト結果ファイルを設定。

5.ビルド後の処理で「Publish MSTest result report」を選択、テスト結果ファイルを設定。

 

 参考サイト

JenkinsとMSTest | HOS Co.,Ltd.

 

 

頑張った結果

f:id:unidayo:20150320233049j:plain

 

なんか天気悪いな~~(棒)

 

つまづいたところ

1.よく分からずサイト通りにTestResultsを相対パスで指定 → Windowsバッチ実行はカレントディレクトリ(jenkinsのワークフォルダ)で空のTestResultsフォルダをお掃除、Test実行後のTestResultsはソリューションファイルと同じ階層に作られている、という状態に。とりあえず絶対パス書いて何も考えない作戦。

 

2.手順4のTest Filesの項目に、ビルド後のテストされる側を設定するのだと勘違いしてました。設定するのはテストする側のdllです。入力欄の横の「?」押して出てくる説明にもSpecify the path to your MSTest compiled assemblies. と書いてあります。よく見よう。

 

雑感

こんな簡単にテスト結果がブラウザ上から見れるようになると、なんか楽しいですね。

次はGitHubとの連携やります。

Windowsにjenkinsを入れてみる その1

CIというのがなんか大事らしい

→ Jenkinsが何か分からない。。。

Linuxも分からんちん

WindowsにとりあえずJenkinsを入れてみよう

 

ざっくりとした手順

1.Jenkinsをインストール

2.ポート変更

3.MSBuildプラグインのインストールと設定

4.手動実行でC#のソリューションをビルドするだけのジョブを作成

5.ジョブ実行

 

下記サイトを参考にして進めました。まずは動かすためにと、色々簡略化してます。

Windows7に、一人で使うためのJenkinsを入れてみた - メモ的な思考的な

.NET開発者のためのJenkins入門 − @IT

JenkinsとMSBuild PluginでVisual Studioのプロジェクトをビルドしてみたよ。 - 大人になったら肺呼吸

 

つまづいたところ

1.プロジェクトの設定でMSBuildVersionを選択する際に、(Default)を選択するとMSBuild.exeが実行できない

(Default)の設定が原因だと気付かず、5回もビルドを失敗させてました。

下記のMSBuild.exeのパス入力のミスをビルド失敗の原因だと疑っていたこともあり、余計に混乱してました。

2.MSBuildプラグインの設定でMSBuild.exeのパスを入力する箇所

実行パスを入力すればよいのですが、

マスター上のC:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exeはディレクトリではありません(スレーブにはあるかもしれません)。

というメッセージが表示され、不安になりディレクトリ指定にしていました。

ちゃんと解説通りにやって、一か所ずつ手さぐりで変えていった方がよいですね。

 

雑感

今のところは「これがどうありがたいのだろう。。。」という感じ。

GitHubとの連動、テスト実行なども試してみよう。