November 08, 2013

Middleman の記事更新を Travis-CI でする

プログラミング
Middleman
TravisCI

Middleman 静的ファイルのデプロイ

このサイトは Middleman + github.io でできていて,デプロイ時には middleman build && middleman deploy とします.

これはそんなに面倒じゃないんですが,↓の記事に倣って自動化させてみました.

利点

それほど積極的な利点じゃないですが,web ブラウザで GitHub リポジトリの記事を直接更新した時にもデプロイされます.

端末が使えないけど更新したい時とかあるかわかりませんが,便利といえば便利です.

違い

で,ちょっと違う点があって工夫が必要だったので,その点だけ,残しておきます.

gh-pages ブランチを使用していない

この点が違うところで,ブランチ構成を次のようにしています.

  • master # 生成された後の静的ファイル
  • source # 実際に作業しているブランチ

なので,source に push したら,build して,master へコミットしないといけません.

それ自体は大したことがないのですが,困るのは master に push するので,Travis さんが master のビルドをしようとしてしまいます.

ということで,master に push する際に master ブランチでビルドしない設定の .travis.yml を生成して対応することにしました.

ついでに,ビルドしたいのは source ブランチに push した時だけなので,`source` ブランチの .travis.yml にも追加.

......
  after_success:
    - cd build
    - echo -e "---\nbranches:\n only:\n - source" > .travis.yml
    - git add -A
    - git commit -m 'Update'
    - '[ $GH_TOKEN ] && git push --quiet https://$GH_TOKEN@github.com/OWNER/REPO.git 2> /dev/null'
  branches:
  only:
    - source

gh-pages 運用で問題が起きない理由

Travis さんは Configuring your build#White- or blacklisting branches にあるように, gh-pages が更新された際にはビルドしないんですねー.

残された問題点

手動で更新した際には, master もビルドされてしまう.

対応策は, middlemana build で, .travis.yml を置くようにするか,コミットメッセージに [ci skip] を入れるようにするか,くらい?