With a CI/CD pipeline and infrastructure as code, IT organizations can quickly create, test and deliver software products and updates. To create end-to-end DevOps automation, it's wise to focus on a few key steps in the code delivery and deployment process.
Most importantly, your CI/CD pipeline should be the only path your developers use to get code and changes into production.
Three key areas for DevOps automation are building, testing and deployment.
Build a path to DevOps automation
The build is a pre-release version of software carrying a sequential build number. Creating reliable builds is the foundation to your development lifecycle and final product. Focusing on build automation makes business sense because, when you manage builds manually, you invite human error. It's better to automate repeatable steps that can and should take place using nothing more than information that already resides in your project's source code repository. With build automation, you can focus developer time on more critical tasks, such as squashing software bugs.
To implement build automation, put the build process as the step in your pipeline. A build automation tool creates and packages your software in a clean environment. The artifact is then versioned and uploaded to your source control. At that point, the CI/CD toolchain can pull down the artifact during subsequent stages to ensure that the build doesn't change as it progresses to production.
It's important not to confuse build automation with continuous integration, which is executing the build process as frequently as possible. For example, you should execute a build process whenever one of your developers checks a code change into your source code repository; follow up with unit tests to verify the correctness of the resulting product.
Watch out for long builds. These force developers to shift from the current tasks while waiting and can create bottlenecks during busy development phases.
Jenkins is an open source automation server -- written in Java -- that helps automate parts of the CI/CD process, including builds. Jenkins has become a ubiquitous industry standard in many respects. Documentation and tutorials can help you set up Jenkins on AWS, Azure and Google Cloud Platform.
Apache Maven is an open source software project management tool that works on the concept of the project object model. Maven serves as a centralized tool to manage the software project build, reporting and documentation. Tutorials and documentation can assist with getting started.
Travis CI is a hosted CI service that works with GitHub. It offers open source and paid plans. You can use it to manage and test your builds.
Test success in DevOps automation
Software testing involves unit testing, integration testing and other techniques designed to find defects. Manual testing, which requires humans to execute, can suffer from tight scheduling and insufficient staffing. Plus, in many organizations, testing remains the neglected stepchild of software development, a last stop -- or a road bump -- before delivery.
Today's automation products let you automate testing, test cases, performance and security. Even so, they don't eliminate human testers. Be careful not to automate too much too soon. This will complicate workflows and builds.
Also, with automated testing, you're going to need to get the documentation right. And remember to factor in a step to triage any failed tests using screen captures and activity logs.
Selenium is an open source product that enables you to automate browsers. You can use it to automate web applications for testing purposes or web-based administration tasks on AWS, Azure Pipelines and Google Cloud Platform.
Appium is a flexible tool designed to automate the testing of native, hybrid and mobile web apps. You can use it to run automated tests on tablets, smartphones and other devices. AWS has published documentation on how to test iOS apps using Appium and AWS Device Farm, its mobile device emulator testing platform.
Cucumber is an open source tool that supports behavioral-based development. It reads executable specifications written in plain text and validates that the software follows the specifications.
Deployment should be repeatable
In the data center world, deployment is about defining the package of software components that make up an application in your development or production environments. Typical deployment activities include: release, installation and activation, deactivation, uninstallation, updating, and version tracking.
Because of the move toward hybrid and multi-cloud environments, automation becomes necessary so that you can orchestrate complex deployments across physical, virtual, container and cloud environments. To work across hybrid environments, deployment must be reliable and repeatable. Automated deployment uses the same deployment process across your development, test and production environments.
Part of getting deployment automation right is monitoring your key performance indicators. For example, change lead time measures the gap between when a feature is issued and when it is deployed in production. You may also want to capture change volume, which is how many stories and lines of code you push to production each deployment. There are also other performance metrics you should capture. Set up and configure your metrics reporting as soon as your DevOps automation tool is in place.
Deployment automation also replaces scripts and manual processes with plugins that integrate with your entire deployment pipeline.
Bitbucket Cloud introduces CI/CD into the cloud version of the well-known Bitbucket code collaboration platform. Atlassian calls it Bitbucket Pipelines & Deployments. It integrates with Jira and other systems developers already use.
ElectricFlow is a deployment automation platform that orchestrates releases and delivers insights into your deployment, which you can use to accelerate software delivery.
AWS CodeDeploy automates code deployments to any AWS instance. It works with any platform, language and application. Key features include centralized control and repeatable deployments.