13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jenkins CIAdvent Calendar 2013

Day 3

ALMiniumをVirtualBox上のCentOSにインストールするのにJenkinsを使ってみたお話

Last updated at Posted at 2013-12-03

Jenkins アドベントカレンダー 2013 の12/3の分として参加させていただきます。
とは言いながら、Redmine絡みのお話で申し訳ありません…。

お話の流れはこんな感じです。

  • お話のきっかけ
  • 最初は手で仮想マシン作成からALMiniumセットアップ…
  • こんな構成でJenkinsを使ってインストール用ジョブを作成
  • ジョブのステップの一部 (shell)
  • セットアップログのキャプチャ
  • ジョブをJenkinsでCIしてみる
  • インストール完了時のキャプチャ
  • せっかくだから、Serverspec とブラウザ表示(Selenium) のテストもしてみよう!

Qiitaの投稿としては長くて申し訳ないですが、何かの参考になれば幸いです。


お話のきっかけ

Redmineの関係でALMiniumのお世話になったことがあり、ALMiniumのissuesをウォッチしていたのですが、うまくセットアップできないとのチケットが登録されてきました。

実は最近、Vagrant + VirtualBoxでの仮想マシンのセットアップと、Chefに興味を持っていたところだったので、本当に失敗するのかCentOS6.4上でクリーンインストールしてみることにしたのが始まりです。


最初は手で仮想マシン作成からALMiniumセットアップ...

作業してみた環境は、下記の通りです。

  • ホスト(作業用)OS: MacOS
  • ゲスト(仮想環境/ALMiniumインストール用): VirtualBox上のCentOS 6.4

ゲストOS作成に当たっては、Vagrantを使い、イメージもVagrantbox.esにあるものを利用しました。
『イメージCDを使って最初からのOSインストール』といった手間が省けるだけでも、かなり楽ではあります。

が、やってみるとやっぱりissueに上がっている通り、ALMiniumのインストールに失敗してしまいました。一番の原因は、どうやら RubyForgeが利用できなくなっており、Redmineのソースが取得できなくなっていることのようでした。

Redmineも新バージョンがリリースされていたので、ALMiniumのソース中の、RedmineのダウンロードURLを修正したのはいいのですが、それでもまだ失敗。なんとなく、rubyをインストールするところで失敗しているのは分かったのですが、一回だけでは原因が掴めません。
途中で失敗した環境ではなく、あらためて新規で綺麗な環境で、数回セットアップを試したい…。

今やVagrantを使えば仮想マシンの作成自体、コマンドラインでできてしまうので、『 3回以上やるならJenkins! 』のマイルールで、Jenkinsを使って仮想マシンの作成 〜 起動 〜 ALMiniumのインストールシェルの実行を試すことにしました。


こんな構成でJenkinsを使ってインストール用ジョブを作成

ということで、早速Jenkinsのジョブを作成。

試行錯誤をしつつ、ALMiniumのソースのclone自体は、仮想環境の中ではなく、ホストOS側で行い、Vagrantの機能を使ってホストOS側のフォルダをゲストOS側にマウントさせることで対応してみました。

理由は、ソースの微調整をして、コミットする可能性があるからです。

※ゲストOS側にcloneしてしまうと、gitの設定や自分のアカウントすら作られていない状態のため、コミットしたらrootもしくはvagrantアカウントでのコミット記録になってしまいます。また、変更をリモートリポジトリにpushしようにも、githubに対するssh / gitconfigの設定がありません。

ということで、やってみたのが下記のような構成です。

ALMinium install with Jenkins.png


ジョブのステップの一部 (shell)

Vagrantは使いたてであまり良くわかっていないのですが、こんな感じでシェルを設定しました。

cd VM/${VM_NAME}
vagrant halt
vagrant destroy -f
BUILD_ID=dontKillMe vagrant up
wait

export LANG=ja_JP.UTF-8
rm -fr ALMinium/*.installed
vagrant sandbox on
vagrant ssh -c "cd /vagrant/ALMinium && sudo bash ./smelt"

セットアップログのキャプチャ

本来は対話式で進むのですが、Jenkinsで回すとデフォルト値で勝手に処理が進みます。

ALMinium-setup-with-vagrant.png


ジョブをJenkinsでCIしてみる

さて、Jenkinsから継続的にクリーンなOSの起動 〜 ALMiniumのインストール実施が出来るようになりましたが、最初から上手くインストールが完了したわけではありません。

1. インストールできたんだけど凄く時間がかかる!

ビルドの実行結果が語っているとおり、インストール完了までに53分かかり、これはいくらなんでも遅すぎ!
なんとか処理を早くしたいと思い、Vagrantfileに下記の設定を追加しました。

    vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]

2. 設定を変えていないのに失敗する!

上記の対応で、少しは早くインストールが完了するようになりましたが、なぜが失敗するケースが出てきました。
どうも、passenger のビルド中に、メモリが足りなくて失敗してしまっている模様…。

VirtualBoxのデフォルトだと、仮想OSに割り当てられるメモリは、たしか256MBくらいです。これではあんまり少なすぎなので、Vagrantfileを修正して、2GBまで上げて、Jenkinsのジョブを再実行。

    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]

その他のエラーも、Jenkinsのログを見ながら、ALMiniumのソースを修正したり、Vagrantfileを調整したりして数回試し、ちゃんとセットアップが安定して出来るようになりました!


成功するまでのJenkins側の記録

ALMinium-setup-with-vagrant-2.png


インストール完了時のキャプチャ

ALMinium-setup-with-vagrant-3.png


せっかくだから、Serverspec とブラウザ表示(Selenium) のテストもしてみよう!

そんなこんなでうまくALMiniumが入るようになりましたので、ついでにセットアップが成功したら、Serverspec とSelenium でのブラウザテスト(Redmineの画面が表示されているか)もJenkinsで試してみました。

  • Serverspecの結果
  • 雛形作成で提供される、80番を叩くだけのもの + redmine.conf があるかどうかのチェック。

ALMinium-setup-with-vagrant-4.png

  • Seleniumでのテスト
    • 80番で"ALMinium" というタイトルでページが表示されるか
  • adminでログインできるか

ALMinium-setup-with-vagrant-5.png


まとめ

なんとなく思いついて設定してみましたが、ソフトウェアというよりはOSのセットアップ作業も、Jenkinsが大変役に立ってくれました。
特に、処理時間の記録/ログの保存という点が大きいです。

また、ALMinium のインストールを通して、やってみたいな〜と思っていたServerspecも試すことができたのも、良い機会でした。

ちなみに、今回試してひっかかった点は、ALMiniumのリポジトリにフィードバックさせていただきました:)
この次は、Ubuntuでも試してみたいなと思っています。

補足:Vagrant boxに関して

最初、CentOS6.4は、Chef+ruby入りのboxをVagrantbox.esから取って来て試してみました。また、smelt というインストールのコマンドの実行も、ssh で記載せずに、簡単なcookbookを作って仮想マシン内でALMiniumのソースをClone 〜 インストールコマンドの実行を試していました。

でも、ALMiniumがruby2.0を入れようとするところでうまく行かず、Chefもrubyも入っていない、minimalのboxを利用しています。
この辺りも、簡単に作成/実行/ログ記録が出来るようになったおかげで気がついたことです。

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?