Continuous Integration – Benefits Over Make

continuous integrationJenkins

We are evaluating and setting up Continuous Integration for our PHP project. Each of the Continuous Integration tools has their own proprietary "build language" which will run many commands and check the return status of these commands.

Here is an example of a .travis.yml configuration:

language: php

php:
  - "5.3"
  - "5.4"
  - "5.5"

script: phpunit test

notifications:
  email:
    - sourcespeak@phor.net

A Jenkins configuration will be in XML and is too long to paste here.

Here is an example of a circle.yml configuration:

dependencies:
  override:
    - bundle install:
        timeout: 240
        environment:
          foo: bar
          foo2: bar2
        pwd:
          test_dir

My question is: what is the benefit of using all these popular, proprietary configurations languages for CI instead of using a Makefile to set up your test environment and have whatever CI server just run make test?

Best Answer

What proprietary "build language" in Jenkins? Saying that Jenkins's "build language" is an XML file is like saying your makefile's "build language" is machine code. Not quite, but the gist is the same.

You need not concern yourself with how Jenkins stores it's configuration no more than you would concern yourself with the resultant machine code after your makefile runs. You will never be modifying Jenkins's XML by hand.

Jenkins is a web-based GUI (with cli and web APIs to complete it). The "build language" of Jenkins is whatever you want, from Maven to Ant to Shell and many more in between. It is further augmented with a multitude of plugins that allow you to customize the build flow just as you want it.

And at the end of the day, in Jenkins, your build step will be "Execute Shell" where you will write make test just like you did on command line. The benefits of Jenkins is not executing your build (any scheduler can do that), but organizing and putting everything together, and keeping it accessible to your team through the web.

I can go on listing all the great things that Jenkins will keep track of for you (SCM changes, console logs, test results, artifacts, emails, etc, etc), but you will get a far better overview from any Google search on the benefits/features of Jenkins.

Late edit:
A more elaborate answer on the topic

Related Topic