Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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を利用しています。
この辺りも、簡単に作成/実行/ログ記録が出来るようになったおかげで気がついたことです。

akiko-pusu
コツコツと学習しながらのメモを書いています。Redmineのプラグイン開発に関連するものが多めです。記事にご興味を持っていただけたら嬉しいです!
https://daily-postit.hatenablog.com
crowdworks
21世紀の新しいワークスタイルを提供する日本最大級のクラウドソーシング「クラウドワークス」のエンジニアチームです!
https://crowdworks.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした