Powershell の psake でビルドスクリプト書いてみた

昨年から .Net なプロジェクトに携わっているんだが、ビルドスクリプトをなにで書けばいいかなーとか思ってたら Powershellpsake というのがよさそうだったので色々調べたのでメモっておく。

参考: http://84zume.wordpress.com/2011/12/14/first-psake/

今回は Powershell 2.0, psake 4.1.0 で試した。
環境は以下。

Powershell のインストール

2008 にはデフォルトでインストールされているが、XPは入っていなので以下を入れる
http://www.microsoft.com/ja-jp/download/details.aspx?id=16818

psake インストール

https://github.com/psake/psake からダウンロードし適当な場所に解凍する。解凍フォルダにPATHを通しておく。

こんなのかいてみた

だいたいこんな雰囲気の "build.ps1" を書いてみた。

import-module build-functions.ps1 #自作util

property {
  $env = $parameters.env
  import-module $env.ps1 #パラメータ読み込み

  $slnFilePath = path¥to¥Hoge.sln

  $compiledDir = compiled
  $zipFIlePath = path¥to¥Hoge.zip
}

task package -depends clean, compile, zip

task compile {
  msbuild $slnFilePath /Configuration=Release
}

task zip {
  zip $compiledDir $zipFilePath
}

task clean {
  remove-item $compiled -force -recurse
  write-host "$compiled Deleted."
}

package タスクをコマンドプロンプトから動かすときはこんなかんじ。

> psake build.ps1 -framework 3.5 -parameters @{env='test';hoge='fuga'} package

コマンドラインパラメータをスクリプトから参照するには $parameters.env といった感じでアクセスできる。

ついでに zip/unzip 使えるようにしてみた

標準だと zip 使えないようなので、調べてみたら Ionic.Zip.dll でできるらしい。
ので、 zip と unzip の function を作ってみた。