どのようにはまったかをざっくりと
- featureブランチのビルドでは 成功 してPull Requestビルドのでは 失敗 するという事態が起きました
- featureブランチについては git-flowの5つのブランチモデル を参照
- Pull RequestビルドはPull Requestがあったらそのブランチに対してテストして、Pull Requestしたコードの影響がないかどうかを知ることができます
- コードは同じなのになぜかPull Requestビルドだけ失敗するという状況でした
前提
- bundlerのcacheは有効
- ビルドするブランチの対象はdevelop,featureブランチ
- Pull Requestは有効
違いが出た原因は
- Gem自身がDBのレコードを保持するようなGemを使っていて、bundlerのcacheを有効にしていたため、そのcacheを利用するビルドはそのDBのレコードを既に持っている
- 詳細は書きませんが、"DBのレコードを既に持っている"がビルド失敗の原因でした
- それはさておき、肝心なcacheの扱いについてです
cacheの扱い
- 以下は 私のところのでの TravisCIの仕組みの話です
- featureブランチのビルドでは、初回のcacheは使われず、2回目以降は該当するfeatureブランチのcacheが使われる
- Pull Requestビルドでは、初回にdevelopブランチのcache、2回目以降は該当するPull Requestのcacheが使われる
TravisCIのコンソールログから学んだこと
- TravisCIのcacheは以下のようにSTEP1、STEP2と捜索していくわけです
- 上で、"私のところでの"といったのは、ビルド対象にmasterを選択していないからです
- なので、実質developまで探してなかったら"ナイ"と判断されます
feature | Pull Request | develop | |
---|---|---|---|
STEP1 | featuresample-branch | PR.467 | develop |
STEP2 | (master) | develop | (master) |
STEP3 | - | (master) | - |
TravisCIのコンソールログ
### featureブランチビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.06s$ Installing caching utilities
0.67sattempting to download cache archive
fetching featuresample-branch/cache--rvm-default--gemfile-Gemfile.tgz
fetching featuresample-branch/cache--rvm-default--gemfile-Gemfile.tbz
fetching master/cache--rvm-default--gemfile-Gemfile.tgz
fetching master/cache--rvm-default--gemfile-Gemfile.tbz
could not download cache
### Pull Requestビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.07s$ Installing caching utilities
0.90sattempting to download cache archive
fetching PR.467/cache--rvm-default--gemfile-Gemfile.tgz
fetching PR.467/cache--rvm-default--gemfile-Gemfile.tbz
fetching develop/cache--rvm-default--gemfile-Gemfile.tgz
fetching develop/cache--rvm-default--gemfile-Gemfile.tbz
found cache
### developブランチビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.06s$ Installing caching utilities
4.09sattempting to download cache archive
fetching develop/cache--rvm-default--gemfile-Gemfile.tgz
found cache
~ただの宣伝~
- 全国のSeleniumer必読
- Selenium, SauceLabs, TravisCI, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください