Circle CIでHugoのビルド・デプロイを実行する

この記事で書くこと
- 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で管理することによって履歴が分かるようになること、ブラウザベースで記事を修正できるようになることも狙いの1つです。
Circle CIとは
自分のCircle CIの認識は、継続的インテグレーション(CI)を実現するためのSaaS型のWebサービスです。同様のCIサービスには、TravisCIや、Weckerがあります。各サービスごとに、細かい違いはあるようですが、そのなかでも人気がありそうなCircle CIを選びました。
How どうやって実現するか
- Circle CIからGitHubを連携させる
- circle.ymlに処理を記述する
- 対象リポジトリに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の定期実行
Related contents

TECH
2016.09.08

TECH
2017.01.14

TECH
2016.09.06

TECH
2016.08.11

TECH
2016.04.17

TECH
2023.02.03

TECH
2022.09.03

TECH
2022.08.29