継続的デプロイメント

GitHub にコンテンツを push すると、 hugo を使ってサイトをビルドし、 その結果を Firebase Hosting にデプロイする。

Firebase 設定方法

Firebase でホスティング先を作成する

Firebase コンソール

  1. プロジェクトを追加
  2. プロジェクト内で Hosting を追加。

Git リポジトリに Firebase ホスティング情報を登録

Firebase CLI をインストールしておく。

blog のトップディレクトリで firebase の設定ファイルを作成。

firebase login
firebase init

これで次のファイルがローカルに作成されるので、 git リポジトリに追加する。

.firebaserc

{
  "projects": {
    "default": "blog-hugo-issei"
  }
}

firebase.json

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

コマンドラインから firebase deploy --non-interactive と実行することで、 public ディレクトリ以下をデプロイできることを確認しておく。

Buddy 設定方法

Webから対話的に設定できる。

  1. Buddy から GitHub リポジトリへのアクセスを許可する。
  2. プロジェクトを新規作成し、Git Hosting Provider として先に登録した GitHub、その中のリポジトリとしてこのブログの blog-hugo を選択する。
  3. Pipeline に Hugo でのビルドプロセスを登録する。
    1. Actions に Hugo を追加。
    2. Environment タブを開き、hugo のインストールスクリプトを編集。新しいバージョンをインストールするように。
    apt-get update && apt-get install -y wget
    wget -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.82.1/hugo_0.82.1_Linux-64bit.deb
    dpkg -i hugo.deb
    rm hugo.deb
    
    1. Run タブを開きビルドスクリプトを編集する。デフォルトだと hugo だけなので、コマンドラインオプションを追加して不要なファイル削除とミニフィケーションを有効に。二行目はこのブログの RSS の URL が途中で変わったことに対する対応なので、通常は不要。
    hugo --cleanDestinationDir --minify
    cp public/index.xml public/feed.xml
    
  4. Pipeline に Firebase へのデプロイプロセスを登録。
    1. Actions に Firebase を追加
    2. Firebase アカウントを登録(コマンドラインツールを使ってアクセストークンを取得して登録)
    3. Firebase project に blog-hugo-issei を設定

GitHub Actions 設定方法(停止中)

設定ファイル の作成、動作確認済み。

有効にすると GitHub リポジトリへの push イベントをトリガーとして、 仮想マシンで Hugo を使ってサイトをビルド後、 Firebase と、 GitHub アカウント isseis-gh を使用してプロジェクトページの gh-pages ブランチの2箇所にデプロイする。

GitHub Actions for Hugo

仮想マシンに Hugo をインストールする GitHub Action。 使用するバージョンを指定するか、 あるいは最新版を常に使う場合には latest としておく

このサイトでは SCSS を使っているので、 SCSS 対応の hugo バイナリをインストールするために extended: true と指定しておく。

Firebase Hosting GitHub Action

仮想マシンから Firebase にファイルをデプロイする GitHub Action。 Google 公式ではないが、Google の有志がメンテしている

  1. GitHub から Firebase プロジェクトにアクセスするためのサービスアカウントを作成し、 アカウントの JSON キーを GitHub リポジトリの encrypted secret に登録する。 firebase CLI で次のコマンドを実行するだけで、一連の処理をしてくれる。
    firebase init hosting:github
    
  2. firebase CLI の出力メッセージに従って firebasesServiceActount を設定。
  3. 合わせて projectId を Firebase でホスティングするプロジェクトの ID にし、 channelId: live として本番環境へのデプロイを指示

再開方法

  1. GitHub Actions - Select workflow
    Enable workflow
  2. GitHub Pages - Setting - Pages
    Source: Branch gh-pages