この記事で書くこと

  • Circle CIの設定
  • Circle CIからさくらVPS(CentOS 6.4)へのrsyncでハマったこと
  • circle.ymlのRuby, Pythonの設定

実現したいこと

Githubのリポジトリに、git pushした後、以下の作業をCIで実現したい。

  • (事前準備) TF-TDFに食わせるためのファイル生成
  • TF-IDFで関連記事生成
  • Hugo build
  • さくらVPSにrsync
  • 関連記事生成で変更分をgithubにコミット

目的

Hugo単体でbuild -> さくらVPSへ転送まではローカルで完結するため、あまりCIとかは必要ないと思っていた。しかし、PythonでTF-IDFによる文書推薦 - SIS Labで、TF-IDFによる関連記事生成のタスクを追加したことで、若干buildまでの時間が掛かるようになった。

そこで、githubにpushしたら、関連記事の生成からHugoビルド・デブロイまでCIで面倒を見てもらうようにしたい。

また、githubで管理することで履歴が分かるようになること、ブラウザベースで記事を修正することができるようになることも狙いの一つ。

Circle CIとは

CircleCI

自分のCircle CIの認識は、継続的インテグレーション(CI)を実現するためのSaaS型のWebサービスです。同様のCIサービスには、TravisCIや、Weckerがあります。各サービスごとに、細かい違いはあるようですが、そのなかでも人気がありそうなCircle CIを選びました。

How どうやって実現するか

  1. Circle CIからGithubを連携させる
  2. circle.ymlに処理を記述する
  3. 対象リポジトリにgit pushする

実際の設定自体は単純で、circle.ymlというCircle CI用の設定ファイルを作ってあげるだけで、Circle CIが動き出す。

ハマった点

  • Circle CIからさくらVPSへのrsync
  • githubへのコミット権限は、ユーザ定義を指定しなければならない

Circle CIからさくらVPSへのrsync

Circle CIで毎回生成されるコンテナ(Ubuntu)からブログ記事をホストしているさくらVPSへのrsyncを行うために、SSHの鍵を登録する必要がある。

1.さくらVPSで鍵を生成する

$ ssh-keygen -t rsa # 生成の際にパスワードは設定しない

2. 公開鍵をauthorized_keysに登録する

$ cat id_rsa.pub >> authorized_keys

3. CircleCIのプロジェクト設定のSSH Permissionsから秘密鍵を登録

「1.さくらVPSで鍵を生成する」で生成した秘密鍵 id_rsa をコピーして、Circle CIの「SSH Permissions」から登録します。

4. Circle CIのDebug Via SSHからSSHログインしてCircle CI側からさくらのレンタルサーバー側にログイン確認

$ ssh -p port番号 さくらVPSのユーザ名@さくらVPSのIPアドレス

CircleCI側のSSHキーをさくらのレンタルサーバー側に登録する - Qiita

githubへのコミット権限は、ユーザ定義を指定しなければならない

「Checkout SSH keys」で最初に作られているdeploy keyだとgithubにコミットができませんでした。

githubにコミットするためには、user keyを利用する必要がありました。

環境変数の設定方法

直接コードに埋め込みたくない値などは、Circle CIでも環境変数として定義することができる。

ここでは、さくらVPSのIPアドレス、ポート番号を環境変数として定義している。

Rake -qによるサイレント実行

せっかくあまり見せたくない変数をCircle CIの環境変数として定義したにも関わらず、Rakeの実行ログがCircle CIのビルド結果に残ってしまうのはあんまり意味がありません。

Rakeのオプションに -q, –quietがあったのでこのオプションを付けて実行します。

-q, --quiet   Do not log messages to standard output.

Mecabインストール

mecabインストールで参考にしたcircleci https://circleci.com/gh/bungoume/mecab-web-api/76#config

今後対応したいこと

  • TF-TDFのパラメータ調整
  • Textlintによる文章校正
  • Github Flowによる電子書籍作成
  • Circle CIの定期実行