Travis,是否可以结合 cron 计划的构建和检查 github 更改?

Travis, is it possible to combine cron-scheduled builds and checks about github changes?

也在 Travis forum 之后尝试 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

这并不完美,因为无论如何都会启动整个 VM 及其环境,并且 Travis 日志显示该事件而不将其与任何其他构建区分开来。但是,在我找到更好的解决方案之前,至少这比每天无所事事地构建(或一天构建多次,即使是最小的更改)要好。