SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
psakeちょこっとだけ
2015/05/09 (Sat)
第5回 PowerShell勉強会 @日本マイクロソフト 関西支店
@HIDARI0415
自己紹介など
• 井川 将(いかわしょう)	

• Twitter: @HIDARI0415	

• Facebook: 本名のほうで	

• 大阪市内でエンジニア(VC++6.0)	

• C#、CI(Continuous Integration)に興味があります
psakeとは?
psakeとは?
• Powershellで書かれたビルド自動化ツール
• psake (https://github.com/psake/psake)
• Home · psake Wiki (https://github.com/
psake/psake/wiki)
psakeとは?
• psake is pronounced sake – as in Japanese
rice wine. It does NOT rhyme with make,
bake, or rake. (https://github.com/psake/
psake/wiki/What-Is-psake%3F)
• 「酒(さけ)」で p は発音しないようですね
(よくわかってない。
psakeとは?
• Powershellの構文でビルドスクリプトを記述
• XMLのカギ括弧地獄から抜け出せる
• .NET Frameworkの力を享受
• AntやMSBuildのようにタスク、タスク同士の
依存関係を定義する
psakeを使うには?
psakeを使うには?
• psakeを以下のどちらかの方法で用意する
• Githubから git clone するかzipでダウンロード
• 現時点での最新はv4.4.1
• chocolateyで choco install psake する
• こっちはv4.3.2
psakeを使うには?
• psake.psm1 を Import-Module
• ビルドスクリプトを書く
• 以下のどちらかで実行する
• Invoke-psake .YourScript.ps1!
• .psake.ps1 .YourScript.ps1
psakeのビルドスクリプト
ビルドスクリプトの基本形
ビルドスクリプトの基本形
• Task <Name> -Depends <Task>, …{}	
• <Name>にタスク名
• <Task>に依存するタスク名
• Task関数にタスク名とスクリプトブロックを
渡す形で定義
ビルドスクリプトの基本形
# YourScript.ps1	
!
Task default -Depends Compile	
!
Task Compile -Depends Init, Clean {	
# Compile your project.	
}	
!
Task Clean -Depends Init {	
# Clean your project’s binaries.	
}	
!
Task Init {	
# Initialize your build process.	
}
ビルドスクリプトの基本形
• Invoke-psake .YourScript.ps1	
• [Init] > [Clean] > [Compile] の順で
実行される
パラメータとプロパティ
パラメータとプロパティ
• 実行時のパラメータ指定が可能
• -Parameter で連想配列で指定
• Invoke-Psake .YourBuild2.ps1 -
Parameters @{"param1"="Hoge";
“param2"="Fuga"}
パラメータとプロパティ
# YourBuild2.ps1	
!
properties{	
$param1 = $null	
$param2 = $null	
}	
!
Task default -depends AwesomePropertyTest	
!
Task AwesomePropertyTest{	
“param1: $param1”	
“param2: $param2"	
}
外部コマンドの実行
外部コマンドの実行
• Powershellの動きに引きずられる
• 外部コマンドの実行後には $LastExitCode
をチェックしないといけない
外部コマンドの実行
Task default -Depends MyAwesomeTask, MyNewAwesomeTask	
!
Task MyAwesomeTask{	
	 # これは停止しない	
cmd /c exit(1)	
}	
!
Task MyNewAwesomeTask{	
cmd /c exit(1)	
if($LastExitCode -ne 0){	
throw "Your command failed."	
}	
}
外部コマンドの実行
• ノイズが多すぎるのでexec関数が存在する
• exec関数には外部コマンドを実行するコード
を含むスクリプトブロックを引数として渡す
外部コマンドの実行
Task default -Depends TaskWithExec	
!
Task TaskWithExec{	
	 # これで停止するようになる	
	 exec{cmd /c exit(1)}	
}
例外でも処理を継続する
例外でも処理を継続する
• 逆に例外が投げられても処理を続けたい
• タスクの定義で -ContinueOnError スイッ
チを使う
例外でも処理を継続する
Task default -Depends TaskA	
!
Task TaskA -Depends TaskB {	
	 "Task A"	
}	
!
Task TaskB -Depends TaskC -ContinueOnError {	
	 "Task B"	
	 throw "I failed on purpose!"	
}	
!
Task TaskC {	
	 "Task C"	
}
例外でも処理を継続する
• [TaskC] > [TaskB] > [TaskA]
• TaskBは例外を投げてもTaskAが実行される
参考
• How can I force the build to fail if a command line program I run
from a task fails? (https://github.com/psake/psake/wiki/How-
can-I-force-the-build-to-fail-if-a-command-line-program-I-run-
from-a-task-fails%3F)
• The Exec Problem - James Kovacs' Weblog (http://
jameskovacs.com/2010/02/25/the-exec-problem/)
• How can I ensure my build script keeps running even if one of
my tasks throws an exception? (https://github.com/psake/
psake/wiki/How-can-I-ensure-my-build-script-keeps-running-
even-if-one-of-my-tasks-throws-an-exception%3F)

Contenu connexe

Tendances

Tendances (20)

Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
 
ドメイン『駆動』『開発』
ドメイン『駆動』『開発』ドメイン『駆動』『開発』
ドメイン『駆動』『開発』
 
iOSのCI as a Service事情
iOSのCI as a Service事情iOSのCI as a Service事情
iOSのCI as a Service事情
 
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
 
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
 
老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦老舗大企業からスタートアップへの挑戦
老舗大企業からスタートアップへの挑戦
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
難しいよね、コードレビュー
難しいよね、コードレビュー難しいよね、コードレビュー
難しいよね、コードレビュー
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論
 
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LTエンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
 
Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発Laravel5.1をつかったWebアプリケーション開発
Laravel5.1をつかったWebアプリケーション開発
 
How to develop a huge Single Page Application
How to develop a huge Single Page ApplicationHow to develop a huge Single Page Application
How to develop a huge Single Page Application
 
Java素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったことJava素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったこと
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
サービスを日々運用し続けながら最新版のRailsに追従させる極意
サービスを日々運用し続けながら最新版のRailsに追従させる極意サービスを日々運用し続けながら最新版のRailsに追従させる極意
サービスを日々運用し続けながら最新版のRailsに追従させる極意
 
窓辺に立つ執事
窓辺に立つ執事窓辺に立つ執事
窓辺に立つ執事
 
Laravel4で運用するサービス,そしてlaravel5へ
Laravel4で運用するサービス,そしてlaravel5へLaravel4で運用するサービス,そしてlaravel5へ
Laravel4で運用するサービス,そしてlaravel5へ
 

Plus de Hidari Ikw (6)

それでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShellそれでも僕はユニットテストを書きたい - Pester powered by PowerShell
それでも僕はユニットテストを書きたい - Pester powered by PowerShell
 
Windowsでの自動化の手段
Windowsでの自動化の手段Windowsでの自動化の手段
Windowsでの自動化の手段
 
Xmlシリアライズ
XmlシリアライズXmlシリアライズ
Xmlシリアライズ
 
若さゆえの継続的アクション
若さゆえの継続的アクション若さゆえの継続的アクション
若さゆえの継続的アクション
 
勝手に始めるというプラクティス
勝手に始めるというプラクティス勝手に始めるというプラクティス
勝手に始めるというプラクティス
 
Jenkinsからはじめた若者のための新ツール一歩目
Jenkinsからはじめた若者のための新ツール一歩目Jenkinsからはじめた若者のための新ツール一歩目
Jenkinsからはじめた若者のための新ツール一歩目
 

Psakeちょこっとだけ