Hugo を導入してホームページ更新は楽になりました。
ただ、「ビルド時の環境変数設定を忘れて Google Analytics のトラッキング ID が生成されてなかった」など凡ミスがあったり、生成したファイルをアップロードするのが面倒だったりと、まだ自動化の余地があります。
Netlify が使えれば超楽ですが、レンタルサーバーに配置してるので、ページの Markdown ファイルを編集して GitHub に push したら生成・公開してくれるとよいかなと。
自分のアカウントではすでに GitHub Actions が有効になっています。
ということで、以下のステップからなるワークフローを追加してみました。
- Hugo をインストール
- サイトのコードを theme 用の submodule を含めて clone
- hugo コマンドを実行して generate
- 成果物を upload-artifact で保存
- レンタルサーバーにアップロード
実際のワークフロー定義です。
name: Generate and publish site on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: install hugo run: | curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz sudo mv hugo /usr/local/bin/hugo env: HUGO_VERSION: 0.57.2 - name: checkout uses: actions/checkout@v1 with: submodules: true - name: generate run: HUGO_ENV=production hugo - name: archive uses: actions/upload-artifact@master with: name: public path: ./public - name: publish run: | pushd ./public find . -type f -exec curl --ftp-create-dirs -T {} ftp://${{ secrets.FTP_USER }}:${{ secrets.FTP_PASSWD }}@${{ secrets.FTP_HOST}}/${{ secrets.ROOT_PATH}}/{} \; popd
Hugo のインストールは、curl でバイナリをダウンロードして、/usr/local/bin に配置するだけ。超シンプルです。sudo が必要だったので Action は non-root ユーザーで実行されるようですね。
インストールする Hugo のバージョンは 環境変数 HUGO_VERSION
に設定してます。現状、環境変数は外部からは与えられないようです。
checkout action で submodules
を true にすれば、clone 時に submodules も更新してくれます。
レンタルサーバーにアップロードするための秘密情報は、リポジトリに設定された secrets に設定してます。
${{ secrets.NAME_OF_ENV }}
の形式で取得可能です。secrets を環境変数のように使えなくもないですが、一度設定してしまうと値を閲覧することすらできないのでやはり秘密情報専用に使う方がよいでしょう。
レンタルサーバが FTP しか受け付けないので、生成したファイルを curl で FTP アップロードするワンライナーを実行しています。
実行結果です。
うまくいきました。
これで、ホームページ更新のワークフローが自動化され GitHub リポジトリで完結するようになりました。