CI Engines



We covered Continuous Distribution in the second part of this series. In this part, let's have a look at what CI engines typically offer.

Typical features of CI engines



  • Access to popular online code repositories
    Most of the engines support online code repositories like GitHub, BitBucket etc. along with traditional repositories based on CVS, SVN and mercurial.
  • XML based build/distribution/deployment pipeline description
    They provide an easy mechanism to specify build specifics, generally in XML format.
  • Build triggers, schedulers
    Build triggers and other notifications are generally provided using web-hooks so that when fresh code is checked in, a build is automatically triggered. More traditional build scheduling is also supported by most of the engines.
  • Automated build and testing
    Build is started automatically once a code check-in is detected. Post a successful build, automated tests are started. Many engines also offer headless browser testing for the project which offer web browser based UI.
  • Clean build/test environment using VM
    Almost all CI engines provide support for VM based or Docker container based builds and post-build testing. Some CI engines can utilize ready-to-use containers available at container repositories such as DockerHub. This reduces repetitive and unnecessary builds of dependencies thereby reducing net build and test time.
  • Wide choice of database engines
    Many CI engines offer choice of current database engines which might be required for post-build testing. Upon request by the developer (through configuration XML file), a vanilla database instance is offered which can then be tailored as per needs by the developer.
  • Multiple mechanisms for status notifications
    Results of every stage of build process and testing can be communicated with concerned parties using different notification mechanisms such as email, twitter, SMS etc.
  • Report generation, publication and archival
    Build and test logs, statistics about time requirements, resource utilization etc. is generated by many CI engines. These results can be published and archived for future reference.
  • Multiple options for delivery/distribution/deployment
    Depending on requirement, the CI engines offer a wide choice of deployment options. The build artifacts can be uploaded to repositories (such as RPMs, Debian packages etc.) or where applicable can be deployed as service at portals like Heroku.
  • Dashboards
    For easy monitoring and control, almost all CI engines offer a dashboard where all the past and present activities can be seen along with their status and artifacts.


Virtualization support


As more and more developers are moving to virtual computing environments, CI engines are also supporting prominent technologies such as Virtual Machines and Docker containers.

Virtualization ensures that application gets uncontaminated, clean environment for building and testing. Every build and run-time dependency is satisfied by installing it every time a build is started. This ensures that only required and right dependencies are installed (which makes sure builds are self-contained). This happens each time, every time a build is initiated.

All leading CI engines offer virtualization support in some form such as VMs or docker containers. Containers can be pulled and pushed from DockerHub, containers can be chained together to provide required functionality etc.

In the next part, we will have a look at different types of CI engines.

Comments

Popular posts from this blog

Security in Linux Kernel - Part 2

Trusted Platform Module

Common Git Tips