How do AWS products fulfill CI/CD requirements?
What is DevOps?
One of the things that should always be at the forefront in the future, as in the past and present, is the product that we have created or will emerge. The success of the planned product depends on it being managed in a simple, agile, and sustainable way. For our product to be made more stable and with the same structure in a short time, new concepts that combine development and operational processes were needed. One of the approaches among these concepts was DevOps, where development and operational issues were brought together, environmental differences were minimized and all necessary components were gathered under the name of DevOps at a conference held in Belgium for the first time in 2008.
DevOps is part of an organizational culture change that is built on collaboration, communication, and shared responsibility between development and operations teams that accelerates the delivery of higher quality products or services. The movement came in response to a clear need to accelerate new software releases while improving the work and communication of development and operations teams. While traditionally, two separate teams would work together for the same goal, DevOps has added value to consumers by accelerating the production lifecycle and shortening the average resolution time. Although it was considered as an approach at first, with the development of the cloud ecosystem and the increase in managed cloud services, the environmental differences in our infrastructures, and the aim of releasing our product to the market faster and more consistently, DevOps has now turned into an applied engineering field.
DevOps is known for its fast methodologies, increased security (in the form of DevSecOps), and rapid and easy scalability of software development projects. These advantages invite companies to embrace the DevOps culture as a guarantee of future success and growth. At the heart of this change is Amazon and its pioneering cloud service, Amazon Web Services. Being the most popular cloud platform in the market means that Amazon has the best services, infrastructure, locations, and support in the market.
What are the Developer & CI/CD Tools of AWS? (Code*)
AWS has many tools targeting developers for getting started quickly to release the product and manage its CI/CD aspects. These sets of tools are intended to help us stay within the AWS services ecosystem and reduce the dependency on external third-party tools and products. It provides us sufficient flexibility to adopt marketplace products as the user sees fit.
I will provide a brief overview of each of these tools and how/when to utilize them in your software engineering process. They can each be described through a dedicated article, and AWS has extensive documentation for them. This article is intended to provide a summary view of the suite as a starting point for further exploration.
AWS CodeCommit: Git and GitHub have become de facto standards for source code management and sharing within an open-source community, however for those organizations not willing to maintain their Git environment or who are not happy with using the public GitHub repository, AWS has an answer through CodeCommit. This is a fully managed service with reliability and security aspects taken care of by AWS. Pricing can be very attractive for small organizations, as it is free for those with less than five developers. As the volumes grow, managing your source code system, in the long run, becomes a burden with backups and increasing storage needs. AWS takes care of these aspects and provides a healthy advantage for organizations.
CodeCommit UI looks somewhat similar to Git desktop or Hub UI. A screenshot is shown below. Cloning and creating a new repository are typical ways to get you started. To be clear, there is no explicit integration between Cloud9 and CodeCommit — the user has to issue typical Git commands to push and manage their code.
AWS CodeBuild: Takes care of an important step in software engineering by building your source code, running tests, and producing deployment artifacts. It provides prepacked build environments for popular programming languages and build tools like Maven, Gradle, etc. It eliminates the need to maintain build servers and the pricing is via a pay-as-you-go model. CodeBuild has many supported docker images for your build environment with various programming language options. Additional components required for the build process can be installed as specified in the build configuration files. CodeBuild can be used as part of the AWS development tools suite or it can be plugged into your own CI/CD pipeline.
Creating a build project on the console is one way to get started or initiate the steps through AWS CodeBuild CLI. Just like everything else in AWS, an IAM role with the right policy is required for CodeBuild to work correctly in the AWS environment. CodeBuild depends on the buildspec.yml file it has, environment, pre-build, build, post-build as well as artifact sections. Pre- and post-build sections provide the option of defining custom actions before and after the build. These sections can be empty if there are no actions taken. CodeBuild UI on the console is pretty good and provides all the history and detailed log of each of the build steps for each run. A sample screenshot is shown below:
AWS CodeDeploy: Code deployment is a critical step in the DevOps process and is often the most complex step where dev and ops are coming together. AWS CodeDeploy is a platform, cloud, and language-agnostic tool that can deploy an AWS infrastructure on-premises by providing the same experience and control across both models. This doesn’t cost anything if deployment is targeting EC2 or Lambda. CodeDeploy uses either S3 or GitHub repositories for pulling artifacts. While CodeDeploy supports deploying to both AWS and on-premise servers, it is worth noting that the Blue-Green Deployment model is only supported for AWS EC2, Lambda, and Fargate. CodeDeploy also supports gradual deployment models and can manage switch over or rollbacks as configured.
Using CodeDeploy begins with creating an application in console UI or using AWS CLI commands. Once a UI is created in the console, it shows detailed history and logs. UI is very similar to CodeBuild and a sample screenshot is shown below. CodeDeploy depends on the appspec.yml file. This file has a section for specifying source and target files as well as the “hooks” section to execute scripts in the deploy environment.
AWS CodePipeline: Each of the steps in developing, building, and deploying can be performed individually, however, chaining them together makes it more efficient and provides a better experience. CodePipeline provides a configurable and easy setup model while retaining the flexibility to customize. It provides status on the progression of the release task as it moves through the build, test, and deploy stages. Once CodePipeline is in place, every time code push occurs it gets triggered as part of the CI/CD model. In addition to the standard steps of build and deploy, it is possible to introduce intermediate steps including Lambda functions to support customization and testing.
Creating a pipeline can be initiated from UI Console or CLI. If you already have the source, build, and deploy projects, they can be integrated into the pipeline. Once a pipeline is created, it shows the detailed status of each step as shown in the sample screenshot below.
How can AWS Marketplace complete the missing parts of DevOps and CI/CD?
We use our world-class competitive products, AWS managed services, and developer tools when going live. While using these tools and managed services, we need to make certain standard and test controls for our product, which will come to life while constructing the CI/CD pipeline that is necessary to automate our processes. In fact, at this point, together with the products in the AWS Marketplace, such as Amazon Machine Image, Container Image, or as a service to provide the qualities required for our product in the AWS Marketplace, we complete the quality standards of our product with tools such as analysis and artifactory.
SonarQube packaged by VMware Bitnami: SonarQube is a quality management platform, designed for continuously analyzing and measuring code technical quality, from the earliest stages of planning to production. It combines static and dynamic analysis tools for monitoring duplicated code, coding standards, unit tests, complex code, potential bugs, comments and design, and architecture.
SonarQube is used for major programming languages such as C/C++, JavaScript, Java, C#, PHP, or Python, and can analyze several programming languages simultaneously.
This open-source solution is packaged by Bitnami. Learn how to install, configure, and manage it at docs.bitnami.com. For deployment issues, reach out to our support team at community.bitnami.com.
Trademarks: This software listing is packaged by Bitnami. The respective companies own the respective trademarks mentioned in the offering, and our use of them does not imply any affiliation or endorsement.
Jfrog Artifactory for EKS Anywhere: An EKS-ready version of the JFrog Pro self-hosted subscription. As the database of DevOps, Artifactory is used as a docker container registry and a universal repository for over 30 package types. It offers a consistent operational experience across Artifactory with EKS on-premise or with EKS on AWS.
Conclusion
In short, in this article, we discussed and observed that the DevOps culture has a significant impact on the product. In many different aspects, DevOps brings automation to the final product and all the byproducts. Applications and all the services have their own nature and this occasion brings many different techniques to CI/CD processes. For that reason, it is really important to work with people who have a solid knowledge of the DevOps cycle. After the development stage of a product, we need to integrate and inject the DevOps operations on the top to make it flow well to production or final environments. Furthermore, as we already know, sustainability and maintenance of the CI/CD pipelines for DevOps operations are the main significant points of the whole process. Consequently, keeping all these pipelines secure also requires some extra knowledge and effort to conduct the necessary operations. For example, CI/CD operations require many different tools which help us to integrate the new versions or new features into the main product. So, we can think of that situation as water flowing inside a tube to move from one point to another. As a Cloud Team, we provide support on the full process of developing and maintaining the CI/CD pipelines in a secure way.