Team CENG Cloud Engineering Projectpresent
CENG Cloud Engineering Project
(Jenkins) Agents of chaos
We provisioned an Elastic Kubernetes Server on AWS in order to deploy the frontend and backend java apps that we were given. On the EKS Control Plane we used Jenkins as a complete CICD platform, with the intention of using a jenkinsfile pipeline to both: build and push our app images to a container, and deploy Pods running the apps on the EKS. After much research and attempts to get Jenkins to work with our systems, we agreed that Jenkins was not the correct tool, for two key reasons: firstly, it's biggest strength is its versatility, which makes it extremely difficult to initially setup; secondly, it is such a versatile tool that it was really much more than we needed - rather like bringing a sledgehammer to crack a nut. We decided instead to use lighter, more specific tools, that were simply good at what they do (namely CircleCI and ArgoCD) and to implement our same approach using these tools instead. It was relatively easy to reconfigure our project to switch to these, and thankfully we had already used them on Day 1 of the project as a 'proof of concept'.
The Team
Elena
Guillermo
Niroosha Vaheeshan
Charli Williams
Technologies
We used: Jenkins, Terraform, GithubActions, AWS, Docker, Kubernetes, DockerHub, Helm, CircleCi, Argocd, Draw.io, Trello, VisualStudioCode, Slack
Jenkins: We used Jenkins to explore a new tool for continuous integration and continuous delivery (CI/CD).
Terraform: Terraform was utilized for infrastructure as code (IaC), enabling us to provision and manage our cloud resources on AWS efficiently.
GitHub Actions: GitHub Actions helped automate our workflows directly within GitHub, streamlining our CI process.
AWS: We leveraged AWS for scalable and reliable cloud infrastructure, ensuring high availability and performance for our application.
Docker: Docker facilitated containerization, enabling us to package our applications and dependencies into portable, isolated containers.
Kubernetes: Kubernetes provided container orchestration, allowing us to automate deployment, scaling, and management of containerized applications.
DockerHub: DockerHub served as a centralized repository for Docker images, enabling us to share and distribute containerized applications easily.
Helm: Helm was used for managing Kubernetes application deployments through templating and versioning, simplifying the deployment process.
CircleCI: CircleCI provided continuous integration and delivery services, automating our build, test, and deployment processes.
ArgoCD: ArgoCD was utilized for continuous deployment of our Kubernetes applications, ensuring consistency and reliability across environments.
Draw.io: Draw.io was used for creating visual diagrams and charts to illustrate system architectures and design workflows.
Trello: Trello served as a project management tool, facilitating collaboration, task tracking, and prioritization within our team.
Visual Studio Code: Visual Studio Code was our integrated development environment (IDE) of choice.
Slack: Slack was used for team communication and collaboration, offering channels, messaging, and integrations to streamline workflows and keep everyone informed.
Challenges Faced
We encountered significant hurdles with Jenkins when integrating Docker for image building, as its intricate configuration required extensive trial and error. Additionally, fine-tuning Jenkins agents proved to be a daunting task, adding another layer of complexity to our setup.
We found that it to be a far less straight forward tool than we initially thought it would be and we are all quite determined to continue exploring the functionality it offers as well as to never underestimate it in the future...
Should we have had more time, managing to fully implement monitoring services with Prometheus and Grafana to benchmark the performance of the app would have been very useful and high up in our priority list.