You are on page 1of 4

Challenges of Implementing Continuous Integration (CI) at Scale

Precise adoption of automation techniques helps reduce manual processes, enforce


consistency, pave way for early identification of issues within the SDLC and further helps
to achieve continuous application delivery. In order to establish a Continuous Delivery
environment, the most important requirement is the implementation of an automated
Continuous Integration (CI) System. The CI process involves all stages right from code
commits to a version control system (done on the CI server) that serves as a kick off for
a build to compile, run tests, and finally package the code.

CI is an integral part of an agile software development setup. For every sprint, the
developer needs to deliver incremental features while focusing on the addition of new
features and handling code errors that creep in and render the software unusable. To
stop such errors from being integrated into the software configuration management
(SCM), a CI server acts as a gatekeeper that helps keep a tab on code quality. A CI server
performs an automated build that includes testing, reporting, and other actions each
time the code base changes. The above activities are performed using different CI
servers like Jenkins, Mojo, Hudson, QuickBuild, CruiseControl, Buildbot, etc. Some tools
like Puppet and Chef can also help with scripting the provisioning of new environments
and in creating additional CI server instances.

http://gallop.net/

Some significant challenges while implementing an effective CI:


Absence of a Central Build Server: There is a necessity for some kind of source code
management and some of the commonly used open source tools are Subversion, Git,
etc. If you are not currently using version control in your development environment,
then you should pay particular attention to repository layout and the subversion
workflow along with proper tagging and branching.

Lack of Maintenance of Proper Version Control: At many times lack of maintenance of


Version Control leads to variations and issues with software development. Primarily, a CI
server checks for code changes in version control, and then downloads that code to the
CI server to start off a build. The most common model of the CI server setup is the
version control system that notes code changes on a
pre-configured interval. It is very important to maintain version in the development
environment.

Lack of Proper Maintenance of Test Servers: If you are performing integration tests,
you may also have a set of test servers in which you deploy built artifacts like WARs,
JARs, and SARs, and execute your integration tests. Thus test servers play an important
role in implementing CI.

Broken Builds: The goal is that the application must be ready to be built, packaged, and
deployed on every committed change. It means that broken or untested code should
never be committed. Moreover, a code that is production ready, should be managed by
strict version control policies and the development team must practice agile
development and unit testing, further leading to a better and CI environment.

Strict Organizational Policies: Certain organizations still follow rigid rules with certain
internal policies wherein manual approvals and documentation is required before
software is deployed into production. This might act in the way of successful CI
implementation.

http://gallop.net/

Other factors like the type of CI server plugins installed, the storage of credentials such
that CI server can access the source version control can also impact the CI integrations.
In order to attain CI, a perfect version control methodology needs to be followed along
with taking up a build automation and dependency management strategy. Last but not
the least in order to achieve the goal of continuous delivery, it is very important to draw
a continuous integration methodology.

Top Continuous Integration Tools to Build Scalable CI


Jenkins: It is developed in Java and can be installed using the simple java command:
jar Jenkins.war. It is mainly used for building and testing software projects
continuously and monitoring externally run jobs. Jenkins supports a set of SCM tools like
Git, Mercurial, Subversion, etc. You can also build through Apache Ant and Apache
Maven based projects.

Buildbot: It is built based on twisted framework and a Python configuration script that
needs to be provided to the master for Buildbot configuration. It is highly useful for
mixed language applications or complex release tasks and allows installation to grow
with your requirements.

Travis CI: This is one of the simplest CI server to get started, and is available as open
source and free to host on your server. It is easy to link your Github account after
providing relevant permissions.

Go: It helps distribute builds across different systems and monitor them all at one place.
It is easy to perform regular tasks as they are added as pipelines.

Strider: It is written in Java and JavaScript and uses MongoDB as backing store. Strider is
extremely customizable through plugins.

http://gallop.net/

In conclusion, a CI approach is designed to effectively create an automation


environment, ensuring that every change to the application results in a reliable version,
and that any version can be built automatically with proper version control.

Get in touch with Gallops Agile Test Specialists today.


Tags: Agile development, agile software development, Agile testing, Automation Testing,

CI environment, Continuous Integration, continuous integration tools, Continuous


Testing, Gallop Solutions, integration testing, integration tests, Software Testing, Unit
Testing, version control system

http://gallop.net/

You might also like