1. SIS Lab
  2. >
  3. Blog
  4. >
  5. Circle CIでHugoのビルド・デプロイを実行する

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

更新日:2021.01.30 作成日:2016.08.15
Circle CIでHugoのビルド・デプロイを実行する https://farm5.staticflickr.com/4388/36747233782_a795b7ff4b_b.jpg

この記事で書くこと

  • 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とは

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の定期実行

改訂新版Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
出版社:技術評論社
著者:佐藤 聖規和田 貴久河村 雅人米沢 弘樹山岸 啓川口 耕介佐藤 聖規
発売日: 2015/06/10

B! Pocket
スポンサーリンク

Related contents

TECH

2016.09.08

Circle CIでテストを定期実行する

TECH

2017.01.14

CircleCIでMeCabを利用してHugoビルドする

TECH

2016.09.06

Hugoで人気記事を表示するためJSONを返すAPIサーバを作りData-driven Contentを試してみた

TECH

2016.08.11

Hugoで関連記事を表示する方法

TECH

2016.04.17

Hugo-ZenをベースにHugoのデザインを変えてみた

TECH

2021.02.11

Git pre-commitフックでFrontmatterの「更新日時」を自動更新する

TECH

2021.01.24

「Hugoで始める静的サイト構築入門 静的サイトジェネレーターで作る自作サイト」を出版しました

TECH

2021.01.09

GitHub Actionsのスケジューラ実行を利用して定期的にビルドする