やりたいこと
(追記)
ビルドが成功したあとで実行される deploy
イベントで対応してるプラットフォーム(GitHub PagesやAWS S3など)にデプロイするのであればそちらを使ったほうが楽
https://docs.travis-ci.com/user/deployment/
仕様
- デプロイする専用ブランチ release を作っておく
- Travis CI で master ブランチのビルドが成功した場合、release ブランチにマージ push
- 前提条件としてプルリクエストもTravis CI で ビルドが成功したものだけマージするようにしておく
- Travis CI で release ブランチのテストは除外しておく
- Netlify では release がデプロイされるようにしておく
ソース
SSH鍵を入れないように .gitignore
に記載しておくこと
(追記)
プルリクエストの場合、 opensslコマンドが使えずエラーが起きる。
今回の場合 master ブランチでビルドが成功した場合のみ git コマンドを使うので条件分岐を追加。
id_rsa
id_rsa.pub
language: ruby
rvm:
- 2.3.3
before_install:
- 'if [ "$TRAVIS_BRANCH" == master ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then bash ./script/before_install.sh; fi'
before_script:
- chmod +x ./script/cibuild # or do this locally and commit
script: ./script/cibuild
# blocklist
branches:
except:
- release
after_success:
- '[ "$TRAVIS_BRANCH" == master ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && bash ./script/deploy.sh'
env:
global:
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
sudo: false # route your build to the container-based infrastructure for a faster build
#!/bin/bash
openssl aes-256-cbc -K $encrypted_xxxx_key -iv $encrypted_xxxx_iv -in travis_key.enc -out id_rsa -d
cp id_rsa ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo -e "Host github.com\n\tStrictHostKeyChecking no\nHost github github.com\n\tHostName github.com\n\tIdentityFile ~/.ssh/id_rsa\n\tUser git\n" >> ~/.ssh/config
git config --global user.email "example@example.com"
git config --global user.name "example user"
SSH鍵の部分などは以下を参考に
- https://www.tam-tam.co.jp/tipsnote/program/post11795.html
- http://qiita.com/aqz/items/937129667bb606d876ee
「Please add the following to your build script (before_install stage in your .travis.yml, for instance):」とあるので before_install に入れましょう。
script で実行してるのは Jekyll のテストで中身は以下を参考に。
- http://jekyllrb.com/docs/continuous-integration/travis-ci/
- http://qiita.com/gatespace/items/ba124b991c622dc633df
after_success では master ブランチかつプルリクエスト以外で deploy.sh が実行されるようにしておく。
#!/bin/bash
git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git config core.filemode false
git fetch
git checkout -b release origin/release
git merge origin/master
git push git@github.com:example/example.git release
git config
してる理由は以下を参照に。(git fetch
だけではあかんよってことです)
git config core.filemode false
で before_script
でのパーミション変更を無視するようにしてます。
GitHubの設定でmasterブランチへのマージを制限したりreleaseブランチを削除しないように保護しておくとベスト。
現場からは以上です。