TD;LR
自分自身のブランチにhexo deployしないようにする。
さもないと設定ファイルが消える
例)
topic -> master -> (hexo deploy) -> gh-pages(公開用ブランチ)
もしくは topic -> develop -> (hexo deploy) -> master(公開用ブランチ)
経緯
- 最近nodejs書く機会が増えたので、nodejs製のブログシステムhexoを使ってみた。
- ついでに、masterにpushしたらCircleCI経由でGithub Pagesに公開されるように設定(よくあるやつ)
- そうしたら、hexoのGithub Pagesにdeployするコマンドが予想外の動きだったのでメモする
詳細
Hexoの使い方は日本語の記事がいくつかあるのでそちらを参照
- Hexo でブログをつくるまで · dev.shikakun.com
- 所要時間3分!? Github PagesとHEXOで爆速ブログ構築してみよう! | 株式会社LIG
- Hexoで始めるお手軽な静的ブログ -インストールと配備- - Qiita
__config.ymlでmasterブランチに公開するように設定し
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@github.com:kkanazaw/kkanazaw.github.io.git
branch: master
## ignore exchange
skip_render: README.md
masterにpushした時に、circleciでhexo deployを実行するようにしていたとする
machine:
timezone:
Asia/Tokyo
node:
version: 6.3.1
deployment:
production:
branch: develop
commands:
- git config --global user.email "hoge@example.com"
- git config --global user.name "Circle CI"
- git submodule init
- git submodule update
- ./node_modules/.bin/hexo clean
- ./node_modules/.bin/hexo generate
- ./node_modules/.bin/hexo deploy
この状態で、masterにpushすると、1度目は記事生成が行われる。
しかし、確認するとディレクトリ直下の設定ファイルがごっそり消える。(たぶん見えてもいいファイルだけ残すようになってるだと思う)
circle.ymlも消えているので、2回目以降のビルドは当然失敗する。
しかも、git push -f origin masterしているようで、git履歴も書き換わってしまう。
対策
公開用のブランチと記事のマスターは分けるようにする。
自分の場合、master公開ブランチに設定していたので、developブランチを新設した。
また、公開ブランチはビルドされないようにした。
topic -> develop -> (circleciでhexo deploy) -> master(公開用ブランチ)
general:
branches:
ignore:
- master
machine:
timezone:
Asia/Tokyo
node:
version: 6.3.1
deployment:
production:
branch: develop
commands:
- git config --global user.email "hoge@example.com"
- git config --global user.name "Circle CI"
- git submodule init
- git submodule update
- ./node_modules/.bin/hexo clean
- ./node_modules/.bin/hexo generate
- ./node_modules/.bin/hexo deploy
記事作成手順はこうなる。
1. developからトピックブランチつくって、記事を書く
2. developにプルリクエストする。
3. developにマージすると、circleciが走りhexo generagte;hexo delopy
4. masterブランチに生成ファイルpushされる
終わりに
生成したhtmlファイルだけ追加でpushしてくれるかと思っていたから、理解するまで時間がかかった。問答無用でgit push -fはワイルドすぎる。
(もしかしたら設定で挙動変更できるかも)