はじめに

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 というメニューが生えているため、そこをクリックします。

スクリーンショット 2019-08-31 10.01.26.png

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

スクリーンショット 2019-08-31 10.05.34.png

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

スクリーンショット 2019-08-31 10.07.06.png

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

完成品 (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)でその変数を使えるようになります。

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

スクリーンショット 2019-08-31 10.29.54.png

微妙な点

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

動作確認

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

スクリーンショット 2019-08-31 10.33.42.png

おわりに

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

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

comments powered by Disqus