Most people working in software development will recognise the particular nightmare scenario that plays out when trying to fit large blocks of code together. One development team might have been working on a sexy new version of an application for six months whilst another has been keeping the old one up-to-date with periodic fixes and enhancements. With launch day fast approaching, how do you stay on target and avoid getting stuck in the roadblock of “integration hell”?
Such a scenario was a regular occurrence when waterfall production models were the standard. Releases might even be years apart and the end of a project cycle would frequently be accompanied by intense periods of work and, yes, lots and lots of stress. Production management systems such as agile evolved as a direct attempt to improve on these toxic and inefficient work environments by dividing projects into smaller and more manageable chunks.
A major consequence of agile for development teams was that they would now work in much shorter cycles and publish their code as often as possible. As these improvements gained popularity and software developers emerged from the dark tunnels of waterfall production, the concept of Continuous Integration and Continuous Development or Deployment (or CI/CD for short) also found its way into the light. This system seeks to automate the integration process using a combination of technical and procedural tools. Where agile focuses on processes and the acceleration of delivery, CI/CD concentrates more on life-cycles and tools that can make automation easier and more efficient.
Fortunately for the busy (and often over-worked), modern software developer, cloud services such as AWS provide a wide range of sophisticated tools to help implement the CI/CD philosophy. The ever-useful and insightful developer blog at AWS outlines a solution using the following range of tools for development, testing and deployment:
- AWS CodeCommit – A fully-managed source control service that hosts secure Git-based repositories. CodeCommit makes it easy for teams to collaborate on code in a secure and highly scalable ecosystem, and is commonly used to create a repository to store the application and deployment codes.
- AWS CodeBuild – A continuous integration service that compiles source code, runs tests, and produces software packages that are ready to deploy, on a dynamically created build server.
- AWS CodeDeploy – A fully managed deployment service that automates software deployments to a variety of compute services such as Amazon EC2, AWS Fargate, AWS Lambda, and your on-premises servers.
- AWS CodePipeline – A continuous delivery service that helps you automate your release pipelines for fast and reliable application and infrastructure updates. It can create an end-to-end pipeline that fetches the application code from CodeCommit, builds and tests using CodeBuild, and finally deploy using CodeDeploy.
- AWS CloudWatch Events – An AWS CloudWatch Events rule is created to trigger the CodePipeline on a Git commit to the CodeCommit repository.
- Amazon Simple Storage Service (Amazon S3) – An object storage service that offers industry-leading scalability, data availability, security, and performance. A typical solution would use an S3 bucket to store the build and deployment artifacts created during the pipeline run.
- AWS Key Management Service (AWS KMS) – AWS KMS makes it easy for you to create and manage cryptographic keys and control their use across a wide range of AWS services and in your applications. It can be used to make sure that the build and deployment artifacts stored on the S3 bucket are encrypted at rest.
Whilst such a list of tools is undoubtedly comprehensive, it can also be quite daunting to visualise a complete solution, and to implement all the processes required to make it work. Each service by itself can take a significant amount of time (and coffee) to become familiar with, never mind fitting them all together and integrating them in the most effective and elegant way that will satisfy the discerning systems architects. This is where the experience and expertise of Miracle Mill can come in useful.
Case Study: Holler Country
Spike Diamond is a UK based publisher known for online publications such as Holler Country, an online magazine covering news and insight from the world of country music. While working on Holler Country, Spike Diamond reached out to Miracle Mill with the goal to make their release management more efficient and automate the deployment through all stages of development.
Miracle Mill made an analysis and recommended applying predefined templates for an AWS DevOps pipeline, which creates a new CodePipeline using CloudFormation for each feature branch. The implemented pipelines remove the manual steps in release management and, as a result, features are deployed more frequently with high quality.
It was measured that automating the previously manual steps freed up to 25% of the time from the developers’ workload, that can instead be spent on developing new features. You can read more in our case study about how AWS DevOps automates release management.
Would you like to find out how we can help you to make similar savings? Talk to us so we can find the solution that improves your production processes across the board.