はてなブログを複数人で運用しているとレビューどうしようってなる。
GithubだとPR作成して1行1行でコードがいじれるからめっちゃ便利!
とはいえPR通った後は手動ではてなブログへ移す?
CircleCIとは?
https://circleci.com/
知らない方は下記が参考になりそうです
http://www.slideshare.net/mogproject/circleci-51253223
CircleCIはサーバー上で一通り遊べる環境が整っている
- Ruby, node.js, Python, PHP, Java, Scala, Clojure, Haskellと色んな言語をサポートしている
- 他にはsolr, elasticsearch, cassandra, neo4j
- databaseはmysqlとかmongodb、redisとかmemcachedだってサポートしてる
- 足りなければ自分でインストールだってできる
dependencies:
pre:
- sudo apt-get update; sudo apt-get install git
自由!
sshでログインすることもできるからデバックも楽ちん
ここは結構重要でローカルではできてるけどCIでこけてて原因がどうしてもわからないときとかに
サーバーにログインして確認できる
そして作ったはてなブログへCicleCIから自動投稿プログラム
イメージ
使用した主なコード
対象ファイルの抽出
一番キモなのはどうやってCircleCI上で記事ファイルを認識させるか。
これはgit logからとってくる
git log --name-status -p -1 | egrep "^[AM]\s+\"?articles\/.*\.md" | awk '{print $2}' | head -1 | sed -e 's/^\"//g' | sed -e 's/\"$//g'
egrep "^[AM]\s+\"?articles\/.*\.md"
で各行を精査して対象記述を取り出す
[M] articles/hoge.md
といった具体で1行取得できるのでawk '{print $2}'
これで空白区切りの2番目のファイルパスをとってくる
記事の投稿
対象ファイルが判明すればCircleCIはrubyやpythonが動くのでお好きな言語ではてなapiをたたけば良い。
rubyにはhatenablogというはてなブログのapiをラッパーしたものがあるので、これを使う。
画像に関してはgemとかはなかったので、こちら を参考にしながら実装
トークンなどの大切な情報はgit上で管理はさせずにCircleCIのenvironment variablesで!
circle.yml
運用イメージとしては、masterからブランチ切り出して
PRつくってレビューしていって最終的にマージしたら記事を投稿したいので、
設定に関してもmasterのみでコマンドが実行されるようにしてある。
machine:
timezone:
Asia/Tokyo
ruby:
version: 2.2.3
deployment:
production:
branch: master
commands:
- 記事アップロードするスクリプトを記載
感想
意外と難しくない。
誰でも使えるようにリポジトリつくったのでforkするなどすると使える
https://github.com/hatappi/circleci_to_hatenablog