LoginSignup
1
1

More than 5 years have passed since last update.

hexoをcircleci経由でdeployする時に気をつけること

Posted at

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の使い方は日本語の記事がいくつかあるのでそちらを参照

__config.ymlでmasterブランチに公開するように設定し

__config.yml
# 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を実行するようにしていたとする

circle.yml
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

image

この状態で、masterにpushすると、1度目は記事生成が行われる。
しかし、確認するとディレクトリ直下の設定ファイルがごっそり消える。(たぶん見えてもいいファイルだけ残すようになってるだと思う)

image

circle.ymlも消えているので、2回目以降のビルドは当然失敗する。
しかも、git push -f origin masterしているようで、git履歴も書き換わってしまう。

対策

公開用のブランチと記事のマスターは分けるようにする。
自分の場合、master公開ブランチに設定していたので、developブランチを新設した。
また、公開ブランチはビルドされないようにした。

topic -> develop -> (circleciでhexo deploy) -> master(公開用ブランチ)
circle.yml
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はワイルドすぎる。
(もしかしたら設定で挙動変更できるかも)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1