By: Harshit
June 9 2019

About Mordernizing Your Current Build Pipelines

Current day dynamic business environments need mature testing processes & practices that can guarantee success rather than just cutting down costs. While testing has traditionally been regarded as a curative solution, the reality is that it is a preventive medicine that can enhance product capabilities and help meet business objectives.

Today, nearly 40% of a typical software project budget is allocated to testing. While the benefits of independent testing are now well recognized, organizations still face challenges in executing software testing to deliver good quality product.

What attributes make a pipeline more useful than the last ?

Speed & Sync

Process speed, all the processes are rocket fast and quick and immersive feedback cycle helps you react faster to possible anomalies. Try to maintain appropriate speed and sync across all your development, testing and deployment processes to feel and see the dramatic change in your build pipelines. 

Reliability 

You can trust the development and continuous testing processes to make sure they are in line with your deployment quality and timelines. Imbibe severe quality checks in your testing and deployment processes. This will make sure your builds are reliable and a continuous practise of building reliable versions of the product is instilled within teams and functions. 

Ease of Maintenance

It’s maintainable. A pipeline should be maintained without too much effort. If a pipeline is not maintainable, there will be many iterations of the product and it won’t be economically feasible for organisations to suffer so many consecutive delays and repetition in work. So, you should ensure ease of maintenance in your current build pipelines. 

As transparent as it can be 

Keep the cycles so transparent that dependencies are super easy to understand and processes and tasks can be planned accordingly. If the process is not transparent, it can be tough to figure out bottlenecks and bring down errors. 

Practices you can adopt

Imbibe Continuous Delivery in your thought process

Continuous delivery is an ever evolving process but it’s also a way of thinking. In a CD environment, application builds are always deployment-ready, which means DevOps teams should:

  • Set up automated tests for the build. 
  • Use the same build of the application through the entire pipeline. 
  • Fix problems in the code thoroughly. 
  • Abandon a build that has problems and is not deemed worthy.
  • Check the code in, let the pipeline work, and move the new build through the pipeline.


Embibe strict continuous integration in your processes 

Once Continuous integration (CI)is in place, continuous delivery (CD) simply extends the integration process to the actual release. When your CD pipeline runs like it should, software products aren’t tied to development timelines or dependencies; instead, they’re delivered based on consumer demand and the state of the market.

You can practice continuous integration without continuous delivery, but you can’t practice continuous delivery without continuous integration. CI involves merging software code into an automated build process and running automated tests when updated code is added to the source code depository.

Provide a halt between development and integration 

Somewhere between UAT, Staging, or Pre-production, figure out a stop for your processes to take a look back. 

To get to the point where everyone is comfortable (and releases are so routine that they’re mind-numbingly boring), the pipeline needs at least one stop between development and production. You need at least one completely hands-off environment to validate that the release is production-ready and all the scripts and mechanisms included in the release will build the environment and deploy the application as planned, every time.

Make uniform deployments across all the processes 

The core concept behind continuous delivery is that the entire release package—from the application build to the scripts that build and configure the environment it runs in—is solid and ready for production. Production should simply be another environment to run the same automation through the same steps.

Make it easy to reboot your entire pipeline

The true value of a well-running continuous delivery pipeline is how easy it is to start again at the beginning.

Anyone in development or operations remembers how they used to tweak settings in an environment by adding a manual step or two. This whole manual inefficiency goes away with a pipeline using immutable infrastructure like Docker containers.

If it didn’t work, stop and find out why. Fix it back at the beginning, and then let the automation take over and get you back to the point where you paused.

Try to automate any possible process 

We see it more times than we care to admit: one or two steps are still manual and it has to be done before/during/after a release is deployed for everything to work. You may not realize it’s manual, but the most common telltale sign is that the pipeline only seems to work as expected when specific staff is involved. This is not malintent—it’s just human nature! If something is routine, you may not even think about it. It might not have even occurred to them to automate that step in the right script.

Seriously version control everything 

Use a version control system (like GitHub, SVN, or Team Foundation) for every script, database change, and configuration file that is part of the release package. Binaries can and should be stored in a package repository like Nexus, Artifactory, or Archiva. (Otherwise they just cause trouble if binaries are inside a code version control system.)

Always include the database in the pipeline

To have a truly automated and repeatable application deployment, you should include all changes to the database as part of releases. This can be done as part of the application itself or by using a third-party tool like FlyWay or Liquibase.

Keep an eye and monitor 

No matter how well-tested your code is, a faulty algorithm, dependencies on services and system resources, or failure to account for unforeseen conditions can cause the software to behave unpredictably.

Final Word

Inducing these processes in your development and deployment lifecycle can help you deliver better quality products and add more to your resource timelines. It will improve your overall productivity throughout the software development lifecycle.