In the past few years, Agile software development has seen tremendous growth. There is a huge demand for software delivery solutions that are fast, yet flexible to numerous amendments. As a result, Continuous Integration (CI) and Continuous Delivery (CD) methodologies are gaining popularity. They are considered to be the cornerstones of DevOps and drive the possibilities of modern architectures like microservices and cloud native.
Nikhil Pathania, a DevOps practitioner at Siemens Gamesa Renewable Energy, started his career as an SCM engineer and later moved on to learn various tools and technologies in the fields of automation and DevOps. Throughout his career, Nikhil has promoted and implemented Continuous Integration and Continuous Delivery solutions across diverse IT projects. He is the author of Learning Continuous Integration with Jenkins.
In this exclusive interview, Nikhil gives us a sneak peek into the trends and challenges of Continuous Integration in DevOps.
- The main function of Continuous Integration is to provide feedback on integration issues.
- When practicing DevOps, a continuous learning attitude, sharp debugging skills, and an urge to improvise processes is needed
- Pipeline as a code is a way of describing a Continuous Integration pipeline in a pre-defined syntax
- One of the main reasons for Jenkin’s popularity is it’s growing support via plugins
- Making yourself familiar with a scripting language like Shell or Python will help you accomplish difficult tasks related to CI/CD
- Continuous Integration is built on Agile and requires a fair understanding of the 12 principles.
On the popularity of DevOps
DevOps as a concept and culture is gaining a lot of traction these days. What is the reason for this rise in popularity? What role does Continuous Integration have to play in DevOps?
To understand this, we need to look back at the history of software development. For a long period, the Waterfall model was the predominant software development methodology in practice. Later, when there was a sudden surge in the usage and development of software applications, the Waterfall model proved to be inefficient, thus giving rise to the Agile model. This new model proposed coding, building, testing, packaging, and releasing software in a quick and incremental fashion.
As the Agile model gained momentum, more and more teams wanted to ship their applications faster and more frequently. This added a huge pressure on the release management process. To cope up with this pressure, engineers came up with new processes and techniques (collectively bundled as DevOps), such as the usage of improved branching strategies, Continuous Integration, Continuous Delivery, Automated environment provisioning, monitoring, and configuration.
Continuous Integration involves continuous building and testing of your integrated code; it’s an integral part of DevOps, dealing with automated builds, testing, and more. Its core function is to provide a quick feedback on the integration issues.
On your journey as a DevOps engineer
You have been associated with DevOps for quite some time now and hold vast experience as a DevOps engineer and consultant. How and when did your journey start? Which tools did you master to help you with your day-to-day tasks?
I started my career as a Software Configuration Engineer and was trained in SCM and IBM Rational Clearcase. After working as a Build and Release Engineer for a while, I turned towards new VCS tools such as Git, automation, and scripting. This is when I was introduced to Jenkins followed by a large number of other DevOps tools such as SonarQube, Artifactory, Chef, Teamcity, and more.
It’s hard to spell out the list of tools that you are required to master since the list keeps increasing as the days pass by. There is always a new tool in the DevOps tool chain replacing the old one. A DevOps tool itself changes a lot in its usage and working over a period of time. A continuous learning attitude, sharp debugging skills, and an urge to improvise processes is what is needed, I’ll say.
On the challenges of implementing Continuous Integration
What are some of the common challenges faced by engineers in implementing Continuous Integration?
- Building the right mind-set in your organization: By this I mean preparing teams in your organisation to get Agile. Surprised! 50% of the time we spend at work is on migrating teams from old ways of working to the new ones. Implementing CI is one thing, while making the team, the project, the development process, and the release process ready for CI is another.
- Choosing the right VCS tool and CI tool: This is an important factor that will decide where your team will stand a few years down the line—rejoicing in the benefits of CI or shedding tears in distress.
On how the book helps overcome these challenges
How does your book ‘Learning Continuous Integration with Jenkins‘ help DevOps professionals overcome the aforementioned challenges?
This is why I have a whole chapter (Concepts of Continuous Integration) explaining how Continuous Integration came into existence and why projects need it. It also talks a little bit about the software development methodologies that gave rise to it. The whole book is based on implementing CI using Jenkins, Git, Artifactory, SonarQube, and more.
About Pipeline as a Code
Pipeline as a Code was a great introduction in Jenkins 2. How does it simplify Continuous Integration?
Pipeline as a code is a way of describing your Continuous Integration pipeline in a pre-defined syntax. Since it’s in the form of code, it can be version-controlled along with your source code and there are endless possibilities of programming it, which is something you cannot get with GUI pipelines.
On the future of Jenkins and competition
Of late, tools such as TravisCI and CircleCI have got a lot of positive recognition. Do you foresee them going toe to toe with Jenkins in the near future?
Over the past few years Jenkins has grown into a versatile CI/CD tool. What makes Jenkins interesting is its huge library of plugins that keeps growing. Whenever there is a new tool or technology in the software arena, you have a respective plugin in Jenkins for it. Jenkins is an open source tool backed by a large community of developers, which makes it ever-evolving.
On the other hand, tools like TravisCI and CircleCI are cloud-based tools that are easy to start with, limited to CI in their functionality, and work with GitHub projects. They are gaining popularity mostly in teams and projects that are new. While it’s difficult to predict the future, what I can say for sure is that Jenkins will adapt to the ever-changing needs and demands of the software community.
On key takeaways from the book Learning Continuous Integration with Jenkins
Coming back to your book, what are the 3 key takeaways from it that readers will find to be particularly useful?
- In-depth coverage of the concepts of Continuous Integration.
- A step-by-step guide to implementing Continuous Integration, Continuous Delivery with Jenkins 2 using all the new features.
- A practical usage guide to Jenkins’s future, the Blue Ocean.
On the learning path for readers
Finally, what learning path would you recommend for someone who wants to start practicing DevOps and, specifically, Continuous Integration? What are the tools one must learn? Are there any specific certifications to take in order to form a solid resume?
- To begin with, I would recommend learning a VCS tool (say Git), a CI/CD tool (Jenkins), a configuration management tool (Chef or Puppet, for example), a static code analysis tool, a cloud tool like AWS or Digital Ocean, and an artifactory management tool (say Artifactory).
- Learn Docker.
- Build a solid foundation in the Build, Release and Deployment processes.
- Learn lots of scripting languages ( Python, Ruby, Groovy, Perl, PowerShell, and Shell to name a few), because the real nasty tasks are always accomplished by scripts.
- A good knowhow of the software development process and methodologies (Agile) is always nice to have.
- Linux and Windows administration will always come in handy.
- And above all, a continuous learning attitude, an urge to improvise the processes, and sharp debugging skills is what is needed.
If you enjoyed reading this interview, check out Nikhil’s latest edition Learning Continuous Integration with Jenkins.