最近新しく鉄道関連用のブログをGitHub Pagesに作った。
このブログの本文は全てMarkdownで書いていて、GithubにpushしたらTravis CIで自動的にサイトを生成してデプロイするようになっている。
サイトを作った時のメモ適当に。
GitHubでリポジトリを作る
自分はリポジトリ名をblogにして作ったので、ここではリポジトリ名をblogで説明します。
hugoでサイトを作る
公式のドキュメントを読んでhugoをインストールする。テーマなどもドキュメントを読めば大体書いてあるのでインストールしておく。
テスト用に記事を作ってhugo server
で確認しておくと便利。
ここで一回commitをしておく
git add . git commit -m "First commit" git push origin master
gh-pagesブランチを切る
先に切っておかないと不便なのでブランチを切って適当なコミットをする
git symbolic-ref HEAD refs/heads/gh-pages rm .git/index git clean -fdx echo "blog" > README.md git add . git commit -m "First commit" git push origin gh-pages
Travis CIの設定をする
.travis.yml
を書いて自動デプロイするようにする。
GitHubのトークンを取得する
curlでトークンを取得する。USER
は置き換えてください。出てきたトークンはメモしておく。
curl -X POST -u USER -H "Content-Type: application/json" -d "{\"scopes\":[\"public_repo\"],\"note\":\"token for pushing from travis\"}" https://api.github.com/authorizations
暗号化してTravisCIに渡すために、RubyGemsからtravisをインストールする
gem install travis
暗号化をする。USER
はGithubのユーザー名、REPO
はリポジトリ名、TOKEN
は先ほど取得したトークンに置き換えてください。
travis encrypt -r USER/REPO GH_TOKEN=TOKEN
実行して出てきた結果は保存しておく。
デプロイするシェルスクリプトを書く
.travis.ymlに一行ずつ書いてると骨が折れるので単一のファイルにまとめて書く。
${USER}/${REPO}
は置き換えてください。
script/deploy.sh
#!/bin/bash set -eu # hugo関係のファイルを置く場所。 HUGO_DIR=./hugo echo "HUGO_DIR : ${HUGO_DIR}" # hugoのバイナリファイル HUGO_BIN="${HUGO_DIR}/hugo" echo "HUGO_BIN : ${HUGO_BIN}" # サイトを生成するディレクトリ DIST_DIR=./public echo "DIST_DIR : ${DIST_DIR}" # hugoのファイルがなかったらダウンロード if [ ! -e "${HUGO_DIR}" ];then echo "Download hugo bin" HUGO_PACKAGE=hugo.tgz echo "HUGO_PACKAGE : ${HUGO_PACKAGE}" echo "Create '${HUGO_DIR}'" mkdir ${HUGO_DIR} cd ${HUGO_DIR} wget -O ${HUGO_PACKAGE} https://github.com/spf13/hugo/releases/download/v0.16/hugo_0.16_linux-64bit.tgz tar -xvf ${HUGO_PACKAGE} cd .. fi # DIST_DIRが無かったらGitHubからclone if [ ! -d "${DIST_DIR}" ];then echo "Clone via GitHub" echo "Clone to '${DIST_DIR}'" git clone https://${GH_TOKEN}@github.com/${USER}/${REPO} ${DIST_DIR} --depth 1 --branch gh-pages > /dev/null 2>&1 fi # サイトを生成 echo "Compile site" ${HUGO_BIN} # 変更があったらcommit cd ${DIST_DIR} git add . d=`date +"%Y/%m/%d %k:%M:%S"` git diff --cached --exit-code --quiet || git commit -m "Update blog at ${d}" # GitHubにpush echo "Push to GitHub" git push origin gh-pages > /dev/null 2>&1 echo "Successfully deployed."
.travis.ymlを書く
以下のは最低限。必要な場合は自分で追加してください。
language : bash script : - bash ./script/deploy.sh env: global: secure: "travis encryptで出てきた値"
適当にコミットしてテストする
適当なファイルに空行を入れるなりしてTravis CIを走らせる。
設定を変更
デフォルトの設定だとURLが長くなったりサマリーが省略されなかったりで不便なので色々設定する。