This repository is created for purpose of practice with different DevOps tools. Final vision is to build a CI/CD pipeline for free and to practice various DevOps technologies. My goal is to train and practice various development processes, as I enjoy software development in my free time and a I would like to become SWE or DevOps engineer in the future. I really enjoy learning new technologies especially the part of automatization and optimatization of the development process from the commit all the way to the deployment. With this project I want to experience and use all the various technologies I learned in my free time or few things I was helping with in at my current job.
The project simulates a CI part of pipeline. After code is submitted to the repository (commit or pull request), gitleaks checks the commits for hard-coded secrets, then pipeline checks the functionality of the application by build out the docker image. If the docker image is successfully built, Trivy scans for vulnerabilities (it is not set up to fail) and after that it is pushed to AWS Elastic Container Registry for a better overview and organization of container images. There is a start of CD pipeline in form of terraform which builds the infrastructure on which the container will be deployed.
Currently working out on a best way how to deploy docker container to EC2 (maybe not the easiet task). Currently troubleshooting problems with TLS/SSL certificate.
Task Completed
- Simple flask application for simulation
- Dockerization of the app
- GitHub Action CI - build image
- GitHub Action CI - push to registry
- Added Trivy Action - scans container image for vulnerabilities (no fail is setup)
- Added gitleaks - scans the repository for commits containing secrets (API keys, passwords, etc.)
- Added IaC with terraform - created an EC2 instance where I will deploy the docker container
To-do list
- Update app with some simple content before deploying
- Creat a CD pipeline - pull and deploy the image to VM as docker container or with container orchestration (maybe K3s)
- Implement monitoring tools such prometheus/grafana, elk stack
To-do but probably overkill
- Deploy the image with container orchestration platform (K8s)
- Ansible/puppet/pulumi
- Helm
- ArgoCD