以前から興味があったmiddlemanを使ってGitHubにホストした自分のページを作りました。
その中で、Travis CI経由でGitHub Pagesにデプロイする方法を見つけたので試してみたときのメモです。
やりたいこと
https://github.com/kimihito/kimihito.github.io にコードは置く。
develop
ブランチではmiddleman build
する前のコードがあってほしい。master
ブランチはmiddleman build && middleman deploy
された後のコードが置いてあって欲しい。Travis CI側で、
develop
ブランチにpushしたら自動的にmiddleman build && middleman deploy
してmaster
ブランチにPushしていてほしい
やったこと
Middleman Blog を Travis-CI で GitHub Pages に継続デプロイ - Atsushi Nagase
の手順と同じように、
1. Travis CIにリポジトリを登録
2. GitHubでPersonal access tokensを生成
3. travis より暗号化されたキーを取得
--add
オプションをつけることで自動で .travis.ymlに追加される
$ travis encrypt -r kimihito/kimihito.github.io "GH_TOKEN=GitHubのPersonal access tokens" --add
4. .travis.yml を書く
今回はdevelop
ブランチにPushされたときにmiddleman deploy
が行われるようにする
language: ruby
script: bundle exec middleman build
env:
global:
- GIT_COMMITTER_NAME='TravisCIでのユーザ名@travis-ci'
- GIT_COMMITTER_EMAIL='メールアドレス'
- GIT_AUTHOR_NAME='TravisCIでのユーザ名@travis-ci'
- GIT_AUTHOR_EMAIL='メールアドレス'
- secure: "(3 で取得した secure の値)"
after_success:
- '[ "$TRAVIS_BRANCH" == "develop" ] && [ $GH_TOKEN ] && bundle exec middleman deploy >/dev/null 2>&1'
5. config.rb
にデプロイ設定を記述
activate :deploy do |deploy|
deploy.method = :git
deploy.branch = 'master' # master ブランチにデプロイするように設定
deploy.remote = "https://#{ENV['GH_TOKEN']}@github.com/kimihito/kimihito.github.io.git" # GitHubのリポジトリ情報を入れる
deploy.build_before = true #デプロイするときにビルドするように設定
end
これでdevelop
ブランチにpushするとmaster
の方にビルドされたものがforce-pushされます。
ハマったところ
ここで述べられているように、middleman deploy
で作られる master
ブランチへのコミットが、ビルドしてしまうので、middleman deploy
の際に入るコミットメッセージに[ci skip]を追加しました。