LoginSignup
91

More than 5 years have passed since last update.

GitHubで記事管理、レビューしてCircleCI使ってはてなブログへ自動投稿する

Last updated at Posted at 2016-02-25

はてなブログを複数人で運用しているとレビューどうしようってなる。
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から自動投稿プログラム

イメージ

Untitled (1).png

使用した主なコード

対象ファイルの抽出

一番キモなのはどうやってCircleCI上で記事ファイルを認識させるか。
これはgit logからとってくる

shell
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のみでコマンドが実行されるようにしてある。

circle.yml
machine:
  timezone:
    Asia/Tokyo
  ruby:
    version: 2.2.3

deployment:
  production:
    branch: master
    commands:
      - 記事アップロードするスクリプトを記載

感想

意外と難しくない。
誰でも使えるようにリポジトリつくったのでforkするなどすると使える
https://github.com/hatappi/circleci_to_hatenablog

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
91