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 日志显示该事件而不将其与任何其他构建区分开来。但是,在我找到更好的解决方案之前,至少这比每天无所事事地构建(或一天构建多次,即使是最小的更改)要好。
也在 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 日志显示该事件而不将其与任何其他构建区分开来。但是,在我找到更好的解决方案之前,至少这比每天无所事事地构建(或一天构建多次,即使是最小的更改)要好。