GitHub Pagesの更新をCIで自動化した

2017-12-07#meta

GitHub Pagesの管理が煩雑だったため、Circle CIで自動化した。

これまではGitHub Pagesのリポジトリ管理リポジトリのサブモジュールとして管理していたが、サブモジュールはいろいろと作業が面倒だった。サブモジュールと本体の両方をgitでコミットするのがとにかく面倒だった。

最近、仕事でCircle CI 2.0の対応をしているため、このブログの更新もCIに任せることができそうだと思い、さっそく設定をした。以下、ハマったところとか工夫したところとか。

- run:
    name: SSH settings
    command: mkdir ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config

config.ymlは今のところ以下のようになっている。npm installでキャッシュを使っていないけど、そこらへんは徐々に最適化していきたい。

version: 2
jobs:
  build:
    docker:
      - image: circleci/node
    steps:
      - run:
          name: SSH settings
          command: mkdir ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
      - run:
          name: Clone GitHub pages
          command: |
            git clone git@github.com:naoty/naoty.github.io.git .
            git config user.email "naoty.k@gmail.com"
            git config user.name "Naoto Kaneko"
          working_directory: ~/naoty.github.io
      - checkout
      - run: npm install
      - run: npm run build
      - run:
          name: Publish GitHub pages
          command: |
            cp -pr public/* ~/naoty.github.io/
            cd ~/naoty.github.io
            git add .
            git commit -m "Publish naoty/homepage@${CIRCLE_SHA1}"
            git push origin master