在SO上也在尝试,在 特拉维斯论坛.
我有一个相当大的项目,需要很长的时间来构建。正因为如此,我不希望每次Github推送的变更都要重新构建。同时,我希望每天都能自动构建它。但前提是自上次构建后,GitHub有变化。. 在Travis中安排每日重建似乎并不能达到这样的效果,反正每天都会重建repo,即使GH上的代码和前一天完全一样。白白重建一个大的没有变化的代码库并不是很好。
在Travis里有办法获得吗?要不要提交一个新的功能请求?
好吧,奇怪的是,这似乎不是一个有趣的问题,所以我不得不自己寻找某种解决方案。
据我所知,Travis不支持这样的功能(我不知道为什么,这对我来说很基本),但它提供了一个环境变量来知道是什么触发了构建。它可以和 git log
:
if [[ "$TRAVIS_EVENT_TYPE" == "cron" ]]; then
nchanges=$(git log --since '24 hours ago' --format=oneline | wc -l)
if [[ $(($nchanges)) == 0 ]]; then
cat <<EOT
This is a cron-triggered build and the code didn't change since the
latest build, so we're not rebuilding.
This is based on github logs (--since '24 hours ago'). Please,
launch a new build manually if I didn't get it right.
EOT
exit
fi
fi
这并不完美,因为整个虚拟机和它的环境无论如何都会被带起来,而且Travis日志显示的事件并没有将其与任何其他构建区分开来。但是,在我找到更好的解决方案之前,至少这比每天白白地构建要好得多(或者每天构建很多次,甚至是针对最小的变化)。