The Power of Automated Deployments
Fact: Reliable, efficient, and continuous delivery of high-quality software is the key to successful and sustainable operations of a software development company and its customers as well.
Another fact: Over time, applications become larger and more complex. The volume and frequency of updates and new versions also grows. This means that developers have to deploy and release their products across multiple environments quickly and frequently. Just imagine how many possible failures, errors, and bottlenecks lurk around the deployment process.
Do you know how your applications appear on servers and how deployment automation can address the challenges?
Delivery pipeline – manual vs automated
First of all, we should keep in mind that deployment itself is a part of the integration process: the part that stands at the crossroads of coding and production.
There are two methods of software deployment – manual and automated. What do they entail? Manual deployment involves development team engagement at every stage of the software delivery process. Automated deployment is performed using technology that’s able to automatically release products to various environments.
As explained on Wikipedia, the general deployment process has to be customized according to specific requirements for deployment environment or software characteristics. Usually, the deployment pipeline consists of several stages:
When it comes to manual deployment, the number and sequence of stages depends on the application being deployed, as all software is unique. For example, when we speak about manual deployment of web apps, the sequence can be as follows – the code is transferred to the repository and checked; then new code is uploaded to the server, checked, and updated; and of course this sequence can vary due to specifics of the project or errors. As the sequence is performed manually, unexpected problems can arise.
The most critical problems are mechanical errors, which are difficult to find or figure out and which can also be slow to come to light. Another problem is the waste of time, as a lot of manual operations consume both the time of the development team and the customer. Manual deployments are not reliable and repeatable, as every time the process must be adapted for the specific application and the specific environment. Every time the process is designed for a particular piece of software, crucial steps in a release can be missed, errors may not be noticed or revealed, or the customer might get an incorrect version of the software. And that’s only the first layer of the onion.
You’ve got the idea, haven’t you? Manual deployments are real pain. Slow, manual operations please nobody. Bill Gates once said: “I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.” The way to make things easy is to use automated processes that allow you to start delivery at the touch of a button.
Automated deployment services work like a Lego kit, which contains a lot of standard units that allow you to make similar brick houses quickly and with an outcome that’s always predictable. Automated deployment includes several standard stages:
- Last code version is taken from repository
- Automated build
- Basic checks (automated)
- App is available for use
Automated deployments are performed to various environments and rely on special tools for web, mobile, and desktop applications. More specifically, web applications are usually deployed to a test server. Desktop apps are automatically compiled and sent to testers. Automated server deployment is also used for mobile apps, which are deployed directly to an online server and are available to customers for testing at once, after which period of testing and debugging the app is presented on online markets.
The tool kit
Nowadays, there’s a wide variety of automated software deployment tools in the market that can be integrated into your company’s existing infrastructure. Those tools help to reduce the time necessary for setting up an automated deployment process. Remember that time is money – less time wasted on adjustments means less money that a customer muddles away.
Want to know what those tools are that are used for application deployment automation?
We’ve already mentioned repositories. Repositories are prerequisites for building and shipping software. Usually, our company uses web-based professional hosting services such as GitHub and Bitbucket, which allow us to host and review code and manage projects.
The code from a repository is taken and compiled using a deployment server. The deployment servers most widely used by our teams are Teamcity and Jenkins. Both of these build servers are developer-oriented and provide flexibility in adjustment.
And of course there are tools for testing. There are a number of specialized tests including:
- Unit tests
- Integration tests
- E to E tests
Test logs can be saved to a special place in the form of reports. Test reports are generated by Jenkins plugins or by specialized servers like Sonar platform. Those systems report on duplicated code and coding standards, unit tests and potential bugs, as well as on comments, design, and architecture. The simplest case is a report generated in the form of an HTML page.
It’s clear that deployment automation has certain benefits. The thing that really matters is that automated software deployment allows developers to focus on more important things such as the product and its quality.
Automated deployment pros:
Less error-prone and much more repeatable and configurable deployments
Automated deployments don’t suffer from variability. A configured and adjusted process is the same for every release. It’s also possible to change target environments and machines whenever necessary.
Software can be deployed by any member of the team
Server deployment automation does not require you to remember every single detail. The qualifications of the person who starts a one-click deployment is not an headache anymore. A release can be initiated by any person who has access to the “Deploy” button. This is especially important for automated database deployments, as databases are extremely valuable for the owners of information.
Developers can focus on code and stop wasting time on unnecessary operations
Manual deployment takes a lot of time and holds enormous possibilities for mechanical errors. This time can be devoted to producing more great features and improving the software. Fully automated deployment takes seconds or minutes. The team only has to spare more time on a deployment if something actually goes wrong and it’s necessary to fix problems or roll back.
More frequent releases
Spending less time on deployment means that you can release more frequently.
Frequent releases allow more frequent delivery of valuable features to customers and gathering of feedback from users, which promotes truly agile software development.
Vladimir Tutov, developer at Archer Software:
“About one and a half years ago, a lot projects developed by Archer Software were transferred to automated deployment. There are some standard stages in the automated transfer of code to the server:
- Deployable code in repository
- Metrics control
- Automated tests
- Automated deployment
An app that’s undergone minimum checks can be shown only to testers. If there are problems revealed at the check stage, then it’s necessary to roll back to the previous stable version.
A basic level of checks confirming a stable build means that an app can be provided to the internal QA team and customer stakeholders. You can find more details about QA processes here.
A well-checked app is available for automated deployment and can be sent to production. That is the ideal situation that every developer goes for.
Following best practices for software delivery, we focus on continuous integration, which involves transferring to automated deployment. Smartling is a perfect example of a highly automated product worked on by the Archer Software development team. You can find some more details about Smartling here.
The goal of our team is to provide customers with fast, safe, and reliable updates to their software, and deployment automation makes it possible to get changes into production reliably and quickly. We develop success using industry best practices.