Did you know that there is an open source continuous deployment solution? When I ask this question, I’m often hearing “What is the difference between continuous delivery and continuous deployment? Can’t I do deployments with Jenkins and Blue Ocean?”
A continuous delivery solution like Jenkins Blue Ocean is no more a continuous deployment solution then it is a continuous test solution. Continuous delivery orchestrates workflows across the pipeline that in turn calls external processes to perform software compiles, testing and deployments. Most deployments are done by one-off scripts.
There is much to be desired in a CI/CD process that is based on one-off deployment scripts, mainly reporting, transparency, speed and the ability for production teams to have the insight needed to trust a ‘push’ continuous deployment process. The result of a scripted deployment process looks very much like a waterfall methodology. There continue to be bottlenecks in the pre-prod and production states because these teams use their own scripts and must take time to get the release ready and out the door.
For continuous deployment to be a reality, the deployment process must be repeated in a standardised method from development through pre-prod and production states. In other words, standardisation of the deployment is required in order to break down the barriers to fast and frequent deployments across the pipeline. And if software is to be released on a continuous basis, pre-prod and production teams need the automation necessary to sustain the faster pace from multiple teams.
Site Reliability Engineers, DevOps Engineers and CI/CD Architects will benefit from a fully automated continuous delivery process that can provide ‘real’ automation and insight into the continuous deployment effort. Here are some basic features that a continuous deployment solution must provide to create a frictionless process for moving innovation to software end users fast and often.
- Agentless technology – If your deployment solution is based on agents, it is going to cause you some headaches. Production teams are not thrilled about adding yet another agent on the production endpoints. Remove the friction by removing the agents. And, remember, in a containerised world, the last thing you want to manage is installing an agent to deploy a microservice.
- Deployment version control – ‘Treat infrastructure as code’ has been drilled into our psyche over the last several years. This should be expanded to the entire application structure, not just the infrastructure. Continuous deployment tooling should include application packaging features that allow you to create a release package that contains components from the application stack, to the database, to the infrastructure and the environment variables. All of the pieces are what make up a software application, and this configuration should be versioned. If a database table changes, a new version of the application package should be created, and only the database update should be performed. Yes, moving away from monolithic software deployments is the safest method for managing your application and the basis for microservices. So get ready and start managing incremental deployments because that is what your microservice deployment will look like.
- Roll back, roll forward or jump versions – Developers, testing and production environments all accept changes at a different pace. Development will deploy many times before they push the deployment to testing. Testing may deploy many new versions before pushing the new features to production. If all is working as expected, Production is going to be several releases behind at any given point in the process. For this reason, your continuous deployment solution should be able to easily jump versions, updating only what has changed. A deployment is more than just updating a Jar file. Rolling back a version or jumping to the latest version should be managed by the deployment software, not a person with a spreadsheet and a script.
When defining your DevOps blueprint, seriously consider a continuous deployment tool integrated into your continuous delivery pipeline. If you are truly doing agile, and are building a DevOps process, your biggest roadblock will be the deployment scripts that were used in the days of waterfall practices. We no longer have the luxury of time to tweak these scripts. There is a much better way that can drive your agile practice down that last mile and achieve continuous deployments all the way to production.
DeployHub offers an open source continuous delivery solution that integrates with Jenkins, Ansible, and GitHub allowing you to create a mature pipeline that will meet the needs of developers, testers and most importantly production teams. And best yet requires no budget authority. Learn more at DeployHub.com.
Written by Tracy Ragan, CEO at OpenMake Software