2013年5月31日金曜日

FxCopをWindows 2012 server にインストールする

 

いままでソースコード解析に使用していたFxCopが、なぜかそのままだとWindows 2012 serverにインストールできなかったので、試行錯誤の結果を備忘録としてまとめておきます。

 

FxCopとは

.NET のソースコードをチェックする、MS社謹製のツールです。

基本的にはMS社の『クラスライブラリ開発のデザインガイドライン』に則り解析をするようです。

FxCopのインストーラーは『Microsoft Windows SDK for Windows 7 and .NET Framework 4』に含まれています。

Windows 2008 standard 64bitはこちらでインストールが可能でした。

 

 

調べる

『FxCop Windows8』で調べると出るわ出るわ

どちらも解決方法が同じだったので、これらを参考に対処していきます。

 

 

ISOをダウンロード

下記サイトから、CPUアーキテクチャに合わせてISOをダウンロードします。

Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO)

 

 

インストール

ダウンロードしたISOを右クリックでマウントします。

CDドライブとしてマウントされたはずです。

 

先ほど参考にしたサイトの通り、ファイルを抽出します。

  1. CDのルート → Setup → WinSDKNetFxTools → cab1.cab をエクスプローラで開く
  2. cab1.cab内にある、『WinSDK_FxCopSetup.exe』から始まるファイル名のファイルを、適当なディレクトリ(デスクトップとか)にコピペする
  3. 拡張子をexeに変更し、実行する
  4. ウィザードに従って、インストールを進める

これで、FxCopがインストール出来ました。

スクリーンショット 053113 120349 PM

 

マイクロソフト様には、早めにWindows 2012対応のFxCopを出してほしいものです。

 

 

 

2013年5月28日火曜日

Jenkins Sounds Plugin を仕込んでみた

そこそこの人数でプロジェクトを回す際に、必要となってくるのがソースのバージョン管理と状態管理。

ということで、一年ほど前から継続的インテグレーションを実現させるために、Jenkinsを使用しています。

少人数(1〜3人くらい)で回している間は、なんかあったら『Jenkinsの結果見やがれ』で済んだんですが、今回人数がそこそこ入るプロジェクトにアサインされることになり、少々工夫をする必要が出てしまいました。

具体的には

  • コミットタイミングが開発者によってまちまちなため、ジョブのタイミングがわからない
  • ジョブの結果(success / fail / abort) が、瞬時にわからない

の二点です。

 

結果的に、

  1. 定期的にJenkinsの管理画面を確認し
  2. どのコミットでエラーが発生したかを確認し
  3. コミットの担当者を突き止め
  4. 修正させる

という、至極面倒くさいフローをたどることになります。

Redmineも併用しているため、Jenkinsからチケットを投げて、チケット管理させるという方法も考えたのですが、やはり能動的な通知が必要なのでは?と思い始めました。

 

前置きが長くなりましたが、ということで今回採用したのが、『Jenkins Sounds Plugin』です。

 

なにそれ?

Jenkinsのアクションごとに、指定の音声ファイルを再生するだけのプラグインです。

ジョブの結果ごとに、再生する効果音を指定出来ます。

 

インストールする

Jenkinsはすでにインストール済みである前提で進めます。

まずはJenkinsのダッシュボードから『Jenkinsの管理』をクリックし、『プラグインの管理』をクリックします。

スクリーンショット 2013 05 28 9 55 2

 

『利用可能』タブから、『Jenkins Sounds Plugin』にチェックを入れて、インストールボタンを押すだけ。はい簡単。

スクリーンショット 2013 05 28 9 58

 

 

設定をみてみる

インストールが正常に完了すると、Jenkinsのダッシュボードに以下のような『Sounds』という項目ができているはずです。

スクリーンショット 2013 05 28 10 25

とりあえず、これをクリックしてみましょう。

テスト用の画面が表示されます。

ここで重要なのは、『Sounds Output』に記載されている『(see http://127.0.0.1:8080/jenkins/sounds/jsonpdemo)』というリンクだけです。

あとは読み飛ばしましょう。

 

ジョブに通知音を仕込む

それではジョブに通知音を仕込んでみましょう。

今回はサンプルなので、通知音を鳴らすだけのジョブを新規に作成します。

スクリーンショット 2013 05 28 10 34

 

『ビルド後の処理』から、『Jenkins Sounds』を選択します。

スクリーンショット 2013 05 28 10 35

 

Jenkins Soundsの項目を追加すると、通知音の設定を追加できます。

何も考えず『Add sound』をクリック

スクリーンショット 2013 05 28 10 37

 

すると、ビルド結果の指定と、通知音を設定できるようになります。

スクリーンショット 2013 05 28 10 38

 

 

通知音を鳴らすタイミングは『On build result』で設定します。

設定できるタイミングは以下の5つ

  • Not build
  • Aborted
  • Failure
  • Unstable
  • Success

成功とそれ以外を知りたいので、とりあえずSuccessとFailureあたりを追加しておきます。

 

通知音の種類は『Play sound』で適当に選択します。

なんかたくさんあるので、適当なものを選択しておきます。

 

もう一つ準備

さて、ここまで来てふと『うちJenkinsは仮想サーバでスピーカーもついてねぇよ』とか、『スピーカーはついてるけど、Jenkinsさんがサーバー室に閉じ込められてるんだけど・・・』と思った人は、ここを読んでください。

開発する場所と、同じ場所にスピーカー設置済みのJenkinsを搭載したサーバがある人は読み飛ばしてください。

Jenkins Sound PluginはHTML5のWebAudio機能で、アクセスしているブラウザ上で通知音を再生することが可能です。

ダッシュボード → Jenkinsの管理 → システムの設定 からJenkins Soundsを探しだして、『Play through HTML5 Audio enabled browser』にチェックを入れてください。

スクリーンショット 2013 05 28 15 18

Jenkins Sound Pluginのバージョン0.4では標準でチェックが付いているようです。

 

先ほどのJenkins Soundsの管理画面で表示されていたURL http://[Jenkinsサーバアドレス]/sounds/jsonpdemo を別のタブにでも表示しておきましょう。

 

 

実際に音を鳴らしてみる

 

ここまで来たらあとは通知音を聞いてみましょう。

先ほど作成したジョブを流してみます。

スクリーンショット 2013 05 28 10 40

 

ビルド完了からしばらくおいて、通知音が流れたかと思います。

通知音が出なかった場合は、設定やスピーカーがミュートになっていないか確認してみましょう。

 

これでひとまず、ビルド結果に応じて、Jenkinsから能動的に通知が出来る状態になりました。

 

通知音を変更する

さて、ここまで来ると通知音を自分好みに変えたくなるのが人情というもの。

まずは、通知音の選定です。

ここで重要なのは

  1. 成功/失敗がチーム内でわかりやすい
  2. 成功時はスパっと短めに
  3. 失敗時は、失敗とわかりながらも重たくない音

この3つです。

1つめは言うまでもなく、コミットを行ったプログラマが『あ、今の失敗、俺のコミットかも!』と気がつけるように。

2つめは成功音を長いファンファーレなんかにすると、ビルドの度にファンファーレが鳴り響き、思わずスピーカーをミュートにしてやりたくなるので、短めに。

3つめですが、これが一番重要かと思います。

一時期失敗の通知音を某有名RPGの『冒険の書1が消えました』的な音楽にしてあったんですが、失敗する度に過去のトラウマを刺激され、ビルドする意欲が削られていったのを覚えています。

今は、

  • 成功→某有名RPGのレベルアップ音 or 某ヒゲの配管工がコインを取る音 
  • 失敗→某ヒゲの配管工がやられたときの音

と、比較的軽い音にするようにしています。

 

さて、実際の設定方法ですが

  1. 再生したいwavファイルを用意
  2. そのwavファイルをディレクトリを掘らずに、並列でzip圧縮
  3. jenkinsをホスティングしているサーバにzipファイルをアップロード
  4. Jenkinsダッシュボード → Jenkinsの管理 → システムの設定 → Jenkins Sounds内のSound archive location に先ほどアップロードしたzipファイルのパスを設定する

となっています。

上記手順が済んだら、ジョブを作成した際に出てきた『Play sound』に、アップロードしたファイルが表示されると思います。

あとはお好きなタイミングで、お好きな通知音を設定するだけ。

素敵なJenkinsライフをお過ごしください。

 

2013年5月9日木曜日

Vagrantをインストールしてみた

なんだか流行りっぽいのと、GW中にMacbookAirの大掃除をしてディスク容量に余裕ができたので、Vagrantを試してみた。

 

VirtualBoxとVagrantをインストールする

VMWare Fusion版もあるらしいのだけれど、そんなブルジョワなアプリを持っていないので、VirtualBoxで試すことにします。

とりあえず、Mac版のVirtualBoxをダウンロードしてきます。

 

Downloads – Oracle VM VirtualBox

 

インストールについては本筋ではないので割愛

 

続いてVagrantをダウンロードして、インストールを行います。

バージョンはよく分からないのと、新しいものは良い物なので、1.2.2を選択


Vagrant - Downloads

 

インストールは、インストーラーに従っていれば躓くところもないので、やっぱり割愛

 

 

インストールを確認

ちゃんとインストールできたかを確認するために、コマンドを発行して確認します。

$ vagrant -v
Vagrant version 1.2.2

バージョンが表示されればOK

 

 

Boxのダウンロード

vagrantではイメージファイルをBoxと呼ぶらしいです。

構築済みのBoxがダウンロード可能なようなので、まずはここからチョイスしてダウンロードを行います。

 

A list of base boxes for Vagrant - Vagrantbox.es


今回はベーシックに『CentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.8, Chef 11.4.0, Puppet 3.1.0)』を選びます。

URLの横のCopyをクリックし、URLをコピーしておきます。


ターミナルを開いて以下のようにコマンドを発行します。


$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130309.box
Downloading or copying the box...

Extracting box...te: 309k/s, Estimated time remaining: 0:00:01))
Successfully added box 'centos64' with provider 'virtualbox'!

 

vagrant box add に続いて、Box名、URLを指定します。

Box名は任意に命名できるようなので、自分が管理しやすい名前をつけます。

ダウンロードは時間がかかるようなので、じっくりと待ちます。

 

 

Vagrantfileを作成する

Vagrantfileはvagrantの設定ファイルのようです。

Vagrantfileを作成する前に、格納用のディレクトリを作成します。

自分はvagrantというディレクトリを作成後、Box名でディレクトリを作成する形式にします。このへんは各自の好みでいいと思います。

 

$ mkdir vagrant/centos64/

$ cd vagrant/centos64/

 

ディレクトリ作成後、vagrant init でVagrantfileを作成します。

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ ls
Vagrantfile

 

Vagrantfileの中身をみてみると、ごにょごにょといろいろ記載されていますが、コメントを除外すると

Vagrant.configure("2") do |config|

  config.vm.box = "base"

end

ここまでシンプルになります。

config.vm.box にvagrant box add で指定したBox名を指定するように編集します。

Vagrant.configure("2") do |config|

  config.vm.box = "centos64"

end

色々と設定できるようですが、最低限上記の設定があれば、起動はできるようです。

 

 

起動する

実際に起動してみましょう。

起動するためには、先ほどVagrantfileを作成したディレクトリで、vagrant up コマンドを発行します。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centos64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant

ターミナルが戻ってきたら、起動完了です。

さて、ターミナルが戻ってきただけで、ViatualBoxの画面が出てくるわけでもなし・・・。

 

 

vagrant ssh でssh接続する

Boxにssh接続を行う vagrant ssh なるコマンドがあるようなので、それを使用します。

$ vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]

これでBoxに接続出来ました。

抜けるときは通常のsshと同様に exit で抜けます。

[vagrant@localhost /]$ exit
logout
Connection to 127.0.0.1 closed.

これであとは煮るなり焼くなりお好きにBoxを調理してあげてください。

 

 

Boxをシャットダウンする

ここまで来たら、あとはシャットダウンさせるだけです。

シャットダウンは vagrant halt で行います。

$ vagrant halt
[default] Attempting graceful shutdown of VM...

 

あとはコンフィグファイルをいじり倒して、自分が使いやすい仮想環境にするだけです。

 

しかし、Macbook Air のメモリが4GBぽっちの環境じゃあんまり重たい処理はさせられそうにないです・・・。