前回のエントリでHugoの記事編集はWindows端末上で完結して行えるようになった以上、後続の手順であるHugoのプレビューやビルド及びGutHubへのデプロイについてもFreeBSDにログインすることなく実施できるようにしたくなったのでメモ。

Hugoのプレビュー

Hugoの環境自体はFreeBSDのJail上で動かしているので、単純にnohup付きでバックグラウンド実行しておけばOKかなと。ただデフォルトだとlocalhostでしかリッスンしないので、--baseURLオプションでリッスンするIPアドレスを指定する。後はキャッシュがプレビュー時の悪さをする可能性があるので--ignoreCacheも一応付けておく。

nohup hugo server -D --baseURL http://<JailのIPアドレス>/ --ignoreCache

これをJailの起動時に自動実行できるようにしたいのだけど、Jail内のcronに@rebootで登録しても上手いこと動かないので考え中。Jailの場合は指定方法が異なるのかもしれないけどそれらしき情報が出てこない。まあJailの起動停止とか基本的にはメンテナンスのタイミングでしか実施しないから手動対応でも問題はないかな。。

Hugoのビルド及びGitHubへのデプロイ

公式サイトにそのものズバリなスクリプトがあるのでshebangとかビルド対象ディレクトリを書き換えた上で流用すればOKですが、都度都度GitHubのユーザ名/パスワードを入れるのが手間&自動化において支障になるため、SSH鍵をGitHubに登録して対応することにした。詳細は以下サイトを参照。

GitHub に SSH で接続する - GitHub Docs

Git リポジトリ URL を書き換える git-config の設定 "insteadOf" と "pushInsteadOf" - kakakakakku blog

実行は最初Windows端末からリモートで叩くことも考えたけどそれだとFreeBSDにログインする手間とあまり変わらないので、定期的にcronで動かしてしまうことにした。変更なければgit commitとかgit pushも空振ってくれるしね。こちらは問題なくcron経由で定期実行できています。

スクリプト

ほぼ公式サイトの通りだけど、cronからの実行を想定してshebang変えたりPATH通したり1、Hugoのサイトディレクトリにcdしてるあたりが主な変更点。あと、Hugoビルド先のディレクトリをdocsに変更しているのでその点も変更しています。

#!/usr/local/bin/zsh

export PATH="$PATH:/usr/local/bin"

echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"

# Go to hugo site folder
cd <Hugoのサイトディレクトリ>

# Build the project.
hugo # if using a theme, replace with `hugo -t <YOURTHEME>`

# Go To docs folder
cd docs
# Add changes to git.
git add .

# Commit changes.
msg="rebuilding site `date`"
if [ $# -eq 1 ]
  then msg="$1"
fi
git commit -m "$msg"

# Push source and build repos.
git push origin master

  1. 通す必要ないかもしれないけど念のため ↩︎