ALMiniumによる yggdrasilサーバの構築
Yggdrasil( https://github.com/tkusukawa/yggdrasil/wiki )はLinuxサーバの設定ファイルをSubversionで管理する試みです。
最小限の構成はRubyとSubversionがインストールされていれば動作するのですが、
多数のLinuxサーバを管理する場合はRedmineとJenkinsとを組み合わせて運用するととても便利です。
このSubversion、Redmine、Jenkinsのシナジー効果は本当に素晴らしいので、
多くの人に是非一度使ってみて欲しいところなのですが、
RedmineとJenkinsはRuby,Java,DB,メール等いろいろあってインストールが難しく、
なかなか「気軽にやってみて!」というわけにいきませんでした。
それが、ALMiniumによって、
Subversion、Redmine、Jenkinsが全てきちんと連係された形でインストールできるようになりました。
ALMiniumはRedmineを含む開発環境インストーラであり、
shinagawa.redineの第2回勉強会で紹介して頂いて知ってはいたのですが、
Jenkinsが含まれていることを知りませんでした。勿体ない。orz
早速ALMiniumをインストールしてYggdrasilサーバを設定してみたところ、
簡単に構成出来てしまいました。
Subversionのリポジトリ作成やそのユーザ管理もRedmineから設定出来る等、
ツール構成の利便性も抜群です!
自分で一から構築していては、この完成度には到達できないでしょう。
ということで、そのときの手順メモを下記に共有します。
●CentOS 6.2 を用意 サーバとして使うのでIPアドレスはDHCPではなく、固定にしておきます。 ここでは192.168.1.73にしました。 一応、yum updateをかけておきます。 ● ALMiniumのインストール Redmine+Subversion+Jenkinsが一気に入って超絶便利です。 # yum install git # cd /root # git clone https://github.com/alminium/alminium.git # cd alminium # ./smelt いくつか質問に答える。 → ホスト名:192.168.1.73 → メールシステム:自分のgmailアカウントを使いました。 → httpsにする?:しない → jenkins入れる?:もちろん → SELinux切るけどいい?:いいよ ● Redmineの設定 0.ログイン http://192.168.1.73/ にアクセス 右上の「ログイン」から ID/PW=admin/admin でログイン 1.全体設定 左上メニュー「管理」→「設定」→「リポジトリ」 →「参照用キーワード」に「*」のみを設定 (これでコミットメッセージに#数字があるだけでチケットとリンクします) 2.ユーザ作成 左上メニュー「管理」→「ユーザ」→「新しいユーザー」で必要なだけユーザを追加 リポジトリ読取用にユーザ「yggdrasil」を作成しておく(メール通知:通知しない) 3.Redmineプロジェクトの作成 左上メニュー「プロジェクト」→「新しいプロジェクト」 → 名称:yggdrasil → 識別子:yggdrasil → SCM:Subversion → モジュール:リポジトリ、Hudson で「作成」 4.Redmineプロジェクトの設定 「設定」→「メンバー」 → 「新しいメンバー」の中からメンバーとロール「開発者」を選んで「追加」ボタン押下 ● yggdrasilのセットアップ 1.gemでインストール # gem install yggdrasil 2.yggdrasilサーバをjenkinsユーザで起動 # vi /etc/passwd → jenkinsの行の最後(ログインシェル)を/bin/bashに変更して保存 # su - jenkins $ yggserve init --port 4000 --repo 'http://192.168.1.73/svn/yggdrasil/{host}' --ro-username yggdrasil --ro-password ******** $ yggserve daemon $ pgrep yggserve ←プロセス番号が返ってくればOK $ exit <以下のyggdrasilの設定は各サーバで実行> 3.subversionがパスワードを記憶しないように設定(お好みで) # svn --version # rm -fr ~/.subversion/auth/svn.simple # vi ~/.subversion/config → [auth]の中の store-auth-creds = no の行のコメントを外す 4.yggdrasilクライアントの初期化 # ygg init --server 192.168.1.73:4000 ホスト名のフォルダを作るか聞いてくる→ 「Y」 ID/PWはRedmineに登録したものが使えます RedmineのYggdrasilPJのリポジトリでフォルダが作成されていることを確認 5.チェッカースクリプトの設定(お好みで) チェッカースクリプトはサーバの状態変化を検知するためのもので、 スクリプトの実行結果(標準出力)がSubversionに登録され、 履歴管理されます。 例えば、過去何月何日にマウント状態はどうだった、とか、 gem のバージョンは何だったか、等を調べられるようになります。 (ちゃんとコミットされていれば) 【初回のみ】# svn mkdir http://192.168.1.73/svn/yggdrasil/_checker -m 'mkdir _checker' # cd ~/.yggdrasil/checker # svn co http://192.168.1.73/svn/yggdrasil/_checker . 【初回のみ】# vi mount 下記を記入 mount | grep -v '(.*soft.*)' | grep -v '(.*bind.*)' | egrep -v '^sunrpc' | LC_ALL=C sort 【初回のみ】# vi chkconfig 下記を記入 LC_ALL=C chkconfig --list 【初回のみ】# vi gem_list 下記を記入 gem list 【初回のみ】# vi route 下記を記入 route 【初回のみ】# vi rpm 下記を記入 rpm -qa | LC_ALL=C sort 【初回のみ】# chmod +x mount chkconfig gem_list route rpm 【初回のみ】# svn add * 【初回のみ】# svn ci -m 'add checker scripts' 6.コミット漏れチェックの定期実行 これによってチェック結果がyggdrasilサーバに通知されるようになります # crontab -e 下記を追記(@@は00~59に間で適当に散らして設定) @@ 4 * * * /usr/bin/ygg check --non-interactive >/dev/null 2>&1 7.各種設定ファイルをyggdrasilに登録# cat <<EOF | while read f; do ls $f >/dev/null 2>&1 && ygg add $f ; done /etc/aliases /etc/auto.automnt /etc/auto.master /etc/auto.misc /etc/auto.net /etc/cron.deny /etc/crontab /etc/exports /etc/fstab /etc/group /etc/gshadow /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/inittab /etc/login.defs /etc/logrotate.conf /etc/modprobe.conf /etc/ntp.conf /etc/nscd.conf /etc/nsswitch.conf /etc/passwd /etc/resolv.conf /etc/shadow /etc/sudoers /etc/syslog.conf /etc/wgetrc /etc/xinetd.conf /etc/yum.conf /etc/chroot_list /etc/rc.local /etc/shadow-sudoers.asc /etc/pam.d/* /etc/sysconfig/i18n /etc/sysconfig/network /etc/sysconfig/static-routes /etc/sysconfig/iptables* /etc/sysconfig/network-scripts/ifcfg-eth? /etc/sysconfig/network-scripts/ifcfg-bond? /etc/sysconfig/network-scripts/route-eth? /etc/sysconfig/network-scripts/route-bond? /etc/sysconfig/rhn/systemid /etc/postfix/main.cf /etc/postfix/master.cf /etc/rc.d/rc /etc/rc.d/rc.local /etc/rc.d/rc.sysinit /etc/rc.d/init.d/* /etc/ssh/sshd_config /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf /etc/vsftpd/chroot_list /var/spool/cron/* /etc/logrotate.d/* /etc/php.ini /etc/php.d/*.ini /etc/snmp/snmpd.conf /etc/modprobe.d/* EOF8.コミット# ygg ci -m 'add config files'9.コミット漏れチェック # ygg c 試しに登録されている設定ファイルを修正して このコマンドを実行してみることで、 どのような振る舞いになるのかが理解できると思います。 10.コミット内容の確認 Redmineのリポジトリブラウザ http://192.168.1.73/projects/yggdrasil/repository でコミット内容を確認できます。 履歴や差分表示もサポートしていて、 Subversionに不慣れな方にも解りやすく、非常に便利です。 ● Jenkinsの設定 1.ログイン http://192.168.1.73/jenkins/ にアクセス。 PW/ID=admin/admin 2.ジョブ作成 左メニュー「新規ジョブ作成」 → ジョブ名:yggdrasil → 「フリースタイル・プロジェクトのビルド」にチェック 3.ジョブの設定 左上の表示が「Jenkins」→「yggdrail」になっていることを確認し、 左メニューの「設定」 → プロジェクト名:yggdrasil → Assign Redmine project: yggdrasil → ソースコード管理:なし → ビルド・トリガ:「定期的に実行」 → → スケジュール:「30 5 * * *」 → ビルド「ビルド手順の追加」→「シェルの実行」 →→ シェルスクリプトに下記を記入 ------------ #!/bin/bash echo date # 監視ノード数の確認 mv -f /var/lib/jenkins/.yggdrasil/results_list /var/lib/jenkins/.yggdrasil/results_list.last ls /var/lib/jenkins/.yggdrasil/results/ | sort > /var/lib/jenkins/.yggdrasil/results_list cnt=`wc -l < /var/lib/jenkins/.yggdrasil/results_list` echo '監視ノード数: '$cnt echo /usr/bin/yggserve results --expire 180 > /var/lib/jenkins/.yggdrasil/jenkins.out ret=$? sed -n -e '/^########/,/^\s*$/p' < /var/lib/jenkins/.yggdrasil/jenkins.out | sed -e 's/########/\n########/' > /var/lib/jenkins/.yggdrasil/jenkins.summary cat /var/lib/jenkins/.yggdrasil/jenkins.out echo echo '監視ノード増減:' diff /var/lib/jenkins/.yggdrasil/results_list.last /var/lib/jenkins/.yggdrasil/results_list | egrep '^<|^>' | sed -e 's/^</-/' | sed -e 's/^>/+/' echo echo '監視ノード一覧:' cat /var/lib/jenkins/.yggdrasil/results_list echo return $ret 2>&- || exit $ret ------------ 4.ジョブの実行確認 左メニュー「ビルド実行」を押下 → しばらくすると「ビルド履歴」に結果が表示される (初回はいくつかNo such file or directory が表示されますが問題ありません)
| 固定リンク
「プログラミング」カテゴリの記事
- ALMiniumによる yggdrasilサーバの構築(2013.09.22)
- TortoiseHGの3-Way Diffの設定(WinMerge, P4Merge)(2012.08.24)
この記事へのコメントは終了しました。
コメント