CentOSでgitとmkdocsを連携させる

ようやく、目標の1つを達成かな? こんばんわ、Web担当 神凪です。
Jenkinsはどうなったーと言われそうですが、サーバが小さいため使うリソースが少ないならそれに越したことはないのです。個人で使う分にはこれで十分ですが、Jenkinsは応用けっこう効きますので、あれはそのままだったりします。
むしろ、この方法だと/var/www/htmlの所有者変更や権限変更が必要ですので、Jenkinsを通したほうがよい場合もあります。一長一短。

ともあれ、Sandbox的にはこれくらいでいいや、と思える構成になりました。見ていきましょう。

目標

  • GitとMkdocsを連携させ、pushを受け取ったら自動でbuildさせる。
  • buildでできるファイルは/var/www/htmlに保存する

環境

  • CentOS
  • MkDocs version 0.16.3
  • git version 1.8.3.1
  • gitリポジトリとして/opt/git/sitedocs.git/hooks/が作成されている。
  • mkdocsプロジェクトとして/opt/sitedocs/が作成されている

準備

  • CentOS初期設定が完了していること
  • MkDocsインストールが完了していること

手順

gitとmkdocsの連動

git hookに含まれる「post-update」を使用します。
hookは特定のコマンドが実行された場合に動作するスクリプトです。

今回のpost-updateであればすべての参照が実行された後にリモートで実行されるスクリプトです。
すべての処理の後なので、ここでビルドを仕掛けます。

vi /opt/git/sitedocs.git/hooks/post-update

このファイルを以下の通り変更します。

post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

tmpdir=`pwd`

mkdir -p /tmp/git && cd /tmp/git/ && git clone /opt/git/sitedocs.git
\cp -rf /tmp/git/sitedocs/* /opt/sitedocs
\rm -rf /tmp/git

cd /opt/sitedocs
mkdocs build

cd $tmpdir
exec git update-server-info

gitコマンドは特定のディレクトリで動いているようで、tmpdirで回避。
tmpディレクトリにgitクローンして引き取ったファイルをMkDocsディレクトリににコピー。
MkDocsでビルドして元のディレクトリに戻る。
そんな動きをさせます。

MkDocsとApacheの連動

連動というより、単に出力先だけの話ですが。

まずは設定ファイルmkdocs.ymlから1行編集します。

vi /opt/sitedocs/mkdocs.yml

site_dirを以下の内容に変更します。

site_dir: /var/www/html

こうすることでMkDocsのビルド結果を/var/www/htmlに変更します。

ファイル/ディレクトリ所有者の変更

ビルドもpost_updateで動きますので、gitプッシュしたユーザでの動作になります。
そのため、関連するディレクトリに権限を与えないとファイルの書き込みなどに失敗します。
そのための対策。

正直、もっと賢いやり方があるだろうとは思います。
実験場で使う分にはこれで十分だったため、この形になりました。

usermod -G git (git pushするユーザアカウント)
chown .git -R /var/www/html
chmod 775 /var/www/html
chown .git -R /opt/sitedocs
chmod 775 /opt/sitedocs
rm -rf /var/www/html/*
cd /opt/sitedocs
mkdocs build

以上で git>mkdocs>apacheの連動体制が整いました。
クライアントからgit pushを仕掛けると、HTTPサーバ側のファイルも更新されるようになり、かつバージョン管理もgitで出来るようになりました。

おわりに

最後のApache連動部分が少々醜いですね。あと融通が利かなさすぎます。
ですが、ごく小規模の団体、グループであればこの方法でも十分に活用できます。
問題は、だれがpushしたのかわからなくなるところですかね・・・。インフラ的魔法の言葉、「運用で回避します!」は全力で回避したいので、他の方法、Jenkinsを通した連携も今後進めていきますよっ!

Special Thanks!

CloudGarage Dev Assist Program協力のもと、NCEでSandbox、実験場を作成しました。\
試せるシステムに限りはありますが、ぜひお試しくださいませ

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください