CI/CD with Jenkins and AWS CodePipeline
For Continuous Software Development and Release Process
To create a continuous automated build, test, and deployment process using Jenkins and AWS CodeDeploy and AWS CodePipeline services.
Jenkins is integrated with the Git repository to pull the source code and perform analysis, build the project, execute the unit testing, and finally deploy the application on the production servers using AWS CodeDeploy service. These tasks are automated sequence of stages to provide continuous release of the software.
AWS Codepipeline is used to establish a workflow from Git to production using Jenkins to incorporate continuous code changes and bug fixes by the development and testing teams.
- Manual & very slow-paced traditional software release process
- Poor Time to Market
- Complicated and Manual testing processes
- Weak competitive advantage
- Poor adapt to change
- Poor customer experience
- High application downtime
- Error-prone manual operations
eCloudChain has proposed a solution to establish a continuous and automated software development and release processes using :
- Jenkins with a master and slave architecture for automated build and testing
- AWS CodeDeloy for application deployment and
- AWS CodePipeline for handling end-to-end automated software development and release processes
The development environment was completely re-engineered to set up the Gitlab code repository with integration to Jenkins with enabled versioning to initiate a Jenkins build every time the developers commit a change.
Jenkins master and slave node architecture are created on AWS EC2 instances with build nodes being part of Autoscaling Group(ASG) in order to ensure the correct number of required build nodes to increase and decrease them dynamically based on the CPU utilization. On the other hand, the test nodes were created based on the Infrastructure-as-a-Code concept using AMI(Amazon Machine Images ) and AWS Cloudformation templates at the time of testing. This is to ensure that the testing nodes being the replica of production servers to provide a realistic testing environment.
AWS CodePipeline is used to configure the automated release process to ensure consistent application releases on the deployment groups production servers. When developers commit any change in the GitLab repository, code is pushed into AWS CodePipeline and it automatically detects the code changes to build and tested by Jenkins master and slave nodes. After successful completion of testing, AWS CodePipline deploys the approved code to the production servers using AWS CodeDeploy. This process is monitored by AWS Cloudwatch on every stage of the pipeline to provide notifications to various channels using AWS SNS.
For security, restricted IAM user and service roles were defined with appropriate AWS policies to grant access to AWS resources by different services i.e. AWS EC2(Jenkins master & slaves) and AWS CodeDeploy.
Security groups with restricted inbound and outbound permissions and VPC with private and public subnets are configured for AWS EC2 compute instances.
Seamless Continuous Integration and Deployment(CI/CD) was successfully implemented to establish a DevOps culture.
Continuous and Automated development and bug fixing mechanism has speed up the delivery process and improved the time to market and the quality of applications while still providing the full control over build,test and deployment stages.
The solution is built using different AWS services stack including Jenkins on AWS EC2, AWS ASG, VPC,AWS Cloudwatch,AWS SNS, and AWS pipeline services like AWS CodeDeploy, and AWS CodePipeline.