Windows Server 2012にjenkins slaveを動かし、asp.net mvcのプロジェクトをbitbucketのプライベートリポジトリから取得して、ビルド、テスト、azure websitesにデプロイしてみる。
ロジェクトを発行してazureにデプロイできる前提です。
1. ノードの追加
=========================
jenkinsはlinuxサーバー上にあるので、ノードの管理>新規ノード作成からwindows server 2012のサーバーを追加
* JNLP経由でスレーブを起動するよう設定
* ここのツールの設定は設定しなかった。
2. jenkinsのシステム設定
=========================
jenkinsの設定>システムの設定>Gitに対象のサーバー用のgitを追加。
:Name: git
:Path to Git executable: C:/Program Files (x86)/Git/cmd/git.cmd
git.cmdの中身はこんな感じ
[powershell]
@echo off
set HOME=C:\Users\Administrator
set PATH=C:\Program Files (x86)\Git\bin;%PATH%
git %*
[/powershell]
このjenkinsのスレーブはAdministratorで動かすので、HOMEにC:\Users\Administratorを設定する。
C:\Users\Administrator\.sshを作って、ssh-keygenで鍵を作り、公開鍵をbitbucketに登録する。
3. ジョブの追加
=========================
ジョブを追加して設定を開く
ソースコード管理: Git
—————————
* Repositories: git@bitbucket.org:xxxxx/yyyyyyy.git
* Credentials: なし
* Git executable: 2で追加したgit
ビルド・トリガ
—————————
* SCMをポーリング: H/15 * * * *
ビルド
—————————
ビルド->テスト->デプロイのイメージ。全部Windowsのバッチ処理。
1. restore nuget packages
ビルドするときにも復元してくれるけど、先にやらないとビルドが成功しない・・・。放置。
.nuget\nuget.exe restore xxxxx.sln -ConfigFile -NonInteractive
2. ビルド
“C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” xxxxx.sln /t:build /p:Configuration=”Release”
3. テスト
“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe” xxxxx.unittests\bin\release\xxxxx.unittests.dll
4. デプロイ
“C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe” xxxxx.sln /p:DeployOnBuild=true /p:PublishProfile=”xxxxx” /p:Password=yyyyy /p:AllowUntrustedCertificate=true
:xxxxx: 発行のプロファイルの名前
:yyyyy: Azureから取得した発行プロファイルの中にあるパスワード
NuGet.exeでパッケージの復元でエラー
============================================
リモートサーバーに接続できないようなエラーがでていたので、確認してみるとファイアウォールに引っかかって失敗していました。
NuGet.exeの通信を許可するよう設定したところうまくいくようになった。
その他
===========
あとはメール通知をしたりして終わり。
そういえば
============
* MSBuildのプラグインがあったけど、以前はうまく動作させることができず、Windowsバッチにしていた。今度暇があれば試してみよう。
* VisualStudioOnlineってこういうことできるのかなぁ。
* デプロイしたサイトに対してseleniumを走らせて、問題なければプロダクション環境の切り替えがしたいなー。
* jenkinsの本を買おうかなぁ。こういうこと書いてるかなぁ・・・。