NSEG #39で「おひとりさま環境での Chef-solo 使用例」を発表した時に
- Vagrant
- Jenkins
- PowerShell
を使いましたが、いくつかハマった点があったため、メモを残しておきます。
Jenkinsの実行ユーザーの指定
自分のユーザーでJenkinsを実行させたかったため、Jenkinsサービスのログオンの指定を「Local System」から「自分のユーザーアカウント」へと切り替えます。
(サービスのログオンタブにて、「●アカウント」とし、自分のアカウントを指定)
PowerShellをJenkinsで実行させるには
セキュリティポリシーの変更
何もしていない状態だと、PowerShellファイル(*.ps1)は実行することができません。そのため、セキュリティポリシーを変更し、実行できるようにします。
なお、64bitOSの場合、PowerShellはx64版とx86版がありますが、Jenkinsはx86版を使用していました。
参考:
環境変数の追加
JenkinsでVagrantを便利に実行するため、以下の環境変数を設定します。
VBOX_USER_HOME
Jenkinsで作成した仮想マシンは、デフォルトでは以下のディレクトリに作成されるようです*1。
C:\Windows\System32\config\systemprofile\VirtualBox VMs
上記は、Local Systemアカウントのプロファイルの場所のようです。
参考:windows server 2008 - Where does the LOCAL SYSTEM account store its "personal" files? - Server Fault
ただ、Cドライブの下にできるといろいろと不都合であったため、場所を移動します。
場所を移動するには、環境変数「VBOX_USER_HOME」を設定すれば良いようなので、適当なところ(「D:\vms」など)を指定しておきます。
参考:
PowerShellの記述
PowerShellからコマンドプロンプトを起動する
PowerShell上では「git clone」などは大丈夫だったのですが、「knife solo prepare」などが動作しませんでした。
そのため、一度コマンドプロンプトを起動してから、「knife solo prepare」を引数渡しで実行することにしました。
cmd /C "knife solo prepare vagrant@192.168.33.11 -P vagrant"
参考:PowerShell – DOS コマンドを実行する | ITLAB51.COM
エラー対応とか
ERROR: Errno::ECONNRESET: An existing connection was forcibly closed by the remote host.
「vagrant halt」で仮想マシンを停止しない状態で、再度同じJenkinsのジョブを実行したところ、発生しました。
一度仮想マシンを停止させるか、仮想マシンを削除すると、問題なく動作しました。
同じVagrantfileで仮想マシンを作ろうとしたのが原因かと思います。
「knife solo init」でコケる
今回の範囲外ですが、knife-soloを0.3.0.pre3にして「knife solo init」したところ、エラーで落ちました。
必要なものがrequireされていなかったようなので、knife-solo.rbの先頭に、「require 'pathname'」を加えます。
ショートカット: knife solo init で起こるエラー uninitialized constant KnifeSolo::Pathname (NameError)
*1:ドキュメントが見当たらなかったので、Everything search engine を使って実際の出力先を調査