📝

新しくなったGitHub ActionsでHugoブログのデプロイをしてみた

4 min read

はじめに

CI/CD 機能が付いて新しくなった GitHub Actions が使えるようになったので、Travis でビルド/デプロイしていたブログを Actions に移行してみました。

GitHub Actions のベータプログラムには下記サイトから応募できます。

https://github.com/features/actions

前提

今まで利用していた Travis の設定ファイルはこちら。

notifications:
  email: false

sudo: false
dist: trusty
language: go

env:
  - HUGO_VERSION=0.51

go:
  - "1.10"

install: true

before_script:
  - wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb
  - sudo dpkg -i hugo_${HUGO_VERSION}_Linux-64bit.deb

script:
  - git submodule update --init
  - hugo -v

deploy:
  provider: pages
  local-dir: public
  skip-cleanup: true
  github-token: $GITHUB_TOKEN
  keep-history: true
  on:
    branch: master

Hugo のインストールとビルドを行い、pagesの provider を使ってgh-pagesブランチにデプロイしています。(Go と Hugo のバージョンが古いですね...むしろ Go はいらないんじゃないような...)

移行

GitHub Actions の作成

Actions を使いたいリポジトリのタブの部分に Actions というメニューが生えているため、そこをクリックします。

まだ Actions が設定されていない場合は、Workflow のサンプルがいくつか表示されています。
自分は何も分からなかったので右上の Set up a workflow yourself のボタンを選択しました。

すると、 .github/workflows/main.yml というファイルにサンプルのワークフローの定義ファイルを作成する画面に移ります。CircleCI の設定ファイルによく似てますね。

右ペインに簡単な説明が書かれているのでそれを見たり、ドキュメントを見たりしながら編集していきます。

完成品 (main.yml)

とりあえず動くものが出来ました。

name: Deploy Pages

on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1
      - name: Build and Deploy
        uses: JamesIves/github-pages-deploy-action@master
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          BRANCH: gh-pages
          FOLDER: public
          HUGO_VERSION: 0.57.2
          BUILD_SCRIPT: |
            wget https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb
            dpkg -i hugo_${HUGO_VERSION}_Linux-64bit.deb
            git submodule update --init
            hugo -v

Build and Deploy というステップで、JamesIves/github-pages-deploy-actionという他の人の作った GitHub Pages をデプロイする Actions を使っています。CircleCI で言うところの Orb でしょうか(あまり知らない)。

Secrets

env: ACCESS_TOKEN: のところで secrets.ACCESS_TOKEN と言う変数を使っていますが、これはリポジトリの Settings メニューから設定できる変数を使っているようです。
Settings > Secrets > Add a new secretを選択し、変数名とその値を入れると Actions の定義ファイル(main.yml)でその変数を使えるようになります。

詳しくは公式ドキュメントを。

微妙な点

このステップの BUILD_SCRIPT のところで Hugo でのビルドを行っているのですが、ここで Hugo のインストールまでここでやっているのがちょっと微妙です。別のステップを作って、その中で Hugo のインストールを行ってみたりしたのですが、hugoコマンドが見つからないと言うエラーとなり、別のステップでの変更は持ち込めないようでした。
なんかやり方あるのかな?

動作確認

コミットを契機にビルドが開始される設定となっているので、.github/workflows/main.yml をコミットすると、Actions が開始されます。結果は Actions タブから確認できます。ビルドログも見れます。

おわりに

深くは使ってないので判断はできませんが、GitHub だけで完結できるのは楽ですね。

今年の初めぐらいにTravis が Idera に買収されたり、Travis のエンジニアが解雇されたりと Travis 周りはキナ臭い話が多く、それを機に CircleCI に移行するプロジェクトも多かったと思いましたが、そこでビッグウェーブに乗らずに移行しなかったために難なく GitHub Actions に移れてよかったです。果報は寝て待てですね(動きが遅かっただけ)。

Discussion

ログインするとコメントできます