Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Scheduling Regular Travis CI Builds With Cron Jobs

DZone's Guide to

Scheduling Regular Travis CI Builds With Cron Jobs

Scheduling a Travis CI cron job helps identify issues in your test environments and fix them before contributors run afoul with problems.

· DevOps Zone
Free Resource

Download “The DevOps Journey - From Waterfall to Continuous Delivery” to learn learn about the importance of integrating automated testing into the DevOps workflow, brought to you in partnership with Sauce Labs.

If you have a project of any complexity that is using Travis CI for testing, you’ve inevitably run into an issue where you make a minor change – maybe even just to a markdown file – and the tests that were passing before completely bomb. If this hasn’t happened to you, just wait, it will!

This typically happens because some dependency, such as a newer Ruby gem you depend on indirectly, is no longer compatible with your test environment. As an example, I updated my .travis.yml in a puppet module project, opened PR16, and suddenly all the previously green tests went red. The error NoMethodError: undefined method 'last_comment' for # was observed because the dependent gem rake was updated from v11 to v12, conflicting with the pinned version of rspec. Until this problem is fixed, every PR, no matter how simple or complex, is going to fail its test.

This puts a lot of burden on both the person submitting the PR who just wants their simple change to be approved and the project maintainer, who wants their build status to work. Neither is satisfied until the problem is tracked down and remediated, often in a separate PR. By that time, the contributor may not have the interest to update their PR and the maintainer has to decide if they want to fix it up or discard it. No one is happy. All because some upstream dependency changed and we weren’t aware of it until the moment a PR was submitted, even though it may have happened days or months ago.

Fortunately, Travis CI recently provided a way to help address this common issue! It’s called Cron Jobs and lets you schedule builds on a regular basis. If a project does not have PRs submitted against it on a very regular basis, it needs some other way to regularly validate the current test environment, including updated dependencies, in order to flag issues with it rapidly.

The documentation is pretty straightforward on how to implement the cron job. You can only add one cron job per branch, so my recommendation is to create a daily job against the default branch with the option to always run. There is the option Do not run if there has been a build in the last 24h, but that actually results in one run per 48 hours (runs at 0:00:00; when it runs at +1:00:00, it sees the job from 24 hours prior and skips; runs again at +2:00:00; skips +3:00:00; etc). Here’s what that looks like:

travis-cron-job-fig-1

Next, you want to ensure your cron jobs notify you if they fail. If you have not modified the email notification settings from the default, you’re going to get an email on every build anyway. If you have silenced emails entirely or in part, you want to make sure that on_failure is set to always. For me, this meant changing a few lines in .travis.ymlas seen in PR16:

diff --git a/.travis.yml b/.travis.yml
index cfaaa1c..f061c18 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,8 @@ language: ruby
 sudo: false
 cache: bundler
 notifications:
-  email: false
+  email:
+    on_failure: always
 branches:
   only:
     - master

You can read more about Travis’s email notification options here.

Scheduling a Travis CI cron job should help you identify new issues in your test environments and fix them before contributors run afoul with problems, which should be helpful for most projects and maintainers! You can also use this to automate nightly builds and plenty of other creative uses, as well.

Discover how to optimize your DevOps workflows with our cloud-based automated testing infrastructure, brought to you in partnership with Sauce Labs

Topics:
travis ci ,cron ,devops ,scheduling

Published at DZone with permission of Rob Nelson, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}