以前github pagesでoctopressを使用してみてはいたのですが、ビルドした際に実際に表示されるhtmlファイルをバージョン管理はできているけども、ビルドする元ファイル、markdownやテーマの設定ファイル群のバージョン管理がしづらかったのですがjenkinsを使う事で簡単に運用して行く事ができたので設定方法をまとめてみます。
以前までの問題点
- sourceのバージョン管理
- ビルド時間
sourceのバージョン管理
octopressをgithub pagesの設定にしている時は
source/_posts/
のディレクトリにmarkdownだったりhtmlファイルを置いて
rake generate
コマンドでビルドすればpublic/
ディレクトリ下にビルドして作成されたhtmlファイル群が変更されて、
_deploy/
ディレクトリ下にも同じファイルが作成されてgit管理されるかと思います。
rake deploy
をすればgithubのリポジトリにpushされてgithub pagesに変更分が反映されるようになっていると思うのですが、
そうなると_deploy/
ディレクトリはバージョン管理ができている状態なのですが、ビルドする元ファイル郡source/_posts/
やテーマの設定ファイルのバージョン管理ができていません。手元にあるファイルがなくなったら更新すげー面倒。
しかし、回避策はすでに用意されていて
github pagesをデプロイ先に選んでいればsource
リポジトリがすでに作られているのでコミットを行ってgit push origin source
をすればgithubのリポジトリに変更分が反映されるようになっています。
でもgit push origin source
は記事の公開と関係がない部分なので忘れそう、面倒くさい。
ビルド時間
ビルドするときには過去の記事も一からビルドし直すので記事が多くなればなるほど時間かかります。(新規ページだけビルドする設定とかあったんでしたっけ?)
これらの解決策としてjenkinsを使うという案。
目標
- sourceブランチをコミット、プッシュでビルドして反映
記事を作成、コミットをすればページが作成されて反映されていればよい。
それをjenkinsでやろうという目標
jenkinsの設定
すでにoctopressを使ってgithub pagesでブログを作成済みでsourceリポジトリをpush済み前提
- 鍵登録
- プラグインインストール
- ジョブの作成
鍵登録
jenkinsサーバーにssh接続
cd /var/lib/jenkins
sudo -u jenkins -H ssh-keygen -t rsa
.ssh/id_rsa.pub
の中身をgithubに登録する
sudo -u jenkins git ls-remote -h git@github.com:<自分のgithubリポジトリ>.git HEAD
でknown_hostsに登録しておく
プラグインインストール
Git plugin
,rbenv plugin
のインストール
Jenkinsの管理
➡ Git plugin
Global Config user.name Value
, jenkins
Global Config user.email Value
, some@emai.com
に設定
ジョブの作成
フリースタイル・プロジェクトのビルド
でジョブの作成
ジョブの設定
ソースコード管理
Gitにチェック
Repositoriesに git@github.com:<自分のgithubリポジトリ>.git
の設定
Branches to buildに source
SCMをポーリング
*/5 * * * *
rbenv build wrapper
にチェック
ビルド手順の追加
シェルの実行を追加
実行内容
bundle install --path vendor/bundle
# 初回のみコメンアウトを外す
#git clone git@github.com:<自分のgithubリポジトリ>.git _deploy
bundle exec rake gen_deploy
初回のみgit cloneを実行してください。
これで完了。sourceリポジトリで記事を作成してコミットすれば反映されます。