CI/CD Pipeline with modern tools

TeamCity, Docker, Gitea&Githooks, Liquibase, SpringBoot

Project info


Software Engineering

2024/11/05

Introduction

A brief project description or quote to summarize its goals.

“A comprehensive project aimed at building a CI/CD pipeline with modern tool integration. ”
— Arek

Explore the Project

Tips

Tech details - Go to general technical info about components (on this page)


About

Introduction
Inspired by the recent interview conversation, I decided to synthesize and expand my interdisciplinary knowledge and try my hand at the DevOps approach. The impact of this culture is visible not only in software delivery but also in data processing and analysis (DataOps), infrastructure management (GitOps), and improving the reliability of production environments (SRE). I consider it a valuable lesson and an excellent complement to my previous projects.

Objective
A cross-sectional CI/CD pipeline project using a modern technology stack.
Integration of various tools and techniques.
I will try to create a complete environment to integrate development tools, automatically trigger processes, test the application, create a release image, and deploy a simple backend application along with the database schema to the server.
I treat this as a Pet Project or a study, so I will be integrating additional components over time.
Components:

PS
All tools are self-hosted on my local infrastructure (using Docker, Debian etc.) because my VPS, which hosts other projects, lacks the resources to handle everything :)
I'm also working on enhancing my lab environment's security before enabling port forwarding, to ensure safe and controlled access to my services.

For educational purposes, I prefer a "longer way" to deeply understand infrastructure concepts and implementations. When time-to-market isn't critical or when the overhead of maintainability isn't a major concern, I remain cloud abstraction layer agnostic.
Still, I recognize the value of cloud platforms for simplifying infrastructure through intuitive interfaces, managed services etc.

Recently, I attended a Google Cloud Platform Meetup, which furthered my interest in cloud technologies. I'm planning cloud-based projects soon, aiming to leverage these platforms effectively once I've mastered the fundamentals.

Project Overview

In General

Components

Quick Summary

  1. CI/CD Setup
  2. Sample deployment application (REST API)
  3. Infrastructure and Networking

List of All Technologies

Grouped by Category

Category Technologies
VCSGitea (self-hosted GitLab alternative)
CI/CD PlatformTeamCity (server, agent)
ContainerizationDocker, Docker Compose
Database VersioningLiquibase
OSLinux Debian
FrameworkSpring Boot
Dependency ManagementManual dependency injection and component abstract factories
DatabaseOracle Database
Architecture StyleOOP, SOLID, Domain, Value Objects, Package-by-component
TestingJUnit, ArchUnit, Cucumber, integration with Docker Containers and real db in pipeline for complex tests
Web ServerNGINX as a Reverse Proxy
SSLCertbot + Let's Encrypt for automatic SSL
Monitoring & ObservabilityNetData
Local DNS & DHCPPiHole/Unbound
Static Site GeneratorEleventy (11ty) for generating a static homepage

Components Specification

Detailed Information Grouped by Components

Table of Contents:

  1. CI/CD Setup
  2. Sample deployment application (REST API)
  3. Infrastructure and Networking

Details
  1. CI/CD Setup

    Integration of TeamCity, Git, Docker, Liquibase, and other tools for automating the build and deployment process.
    Use Cases
    Tech Stack
    Category Description
    VCS Gitea (self-hosted GitLab alternative)
    CI/CD Platform TeamCity (server, agent)
    Containerization Docker, Docker Compose
    Database Versioning Liquibase
    OS Linux Debian
  2. Sample deployment application (REST API)

    Spring Boot backend application with clean architecture and manual dependency management.
    Use Cases
    • Clean Architecture: Maintaining separation of application layers and clear component responsibilities
    • Business Logic: Handling application logic with easy testability
    • Database Management: Ensuring data consistency using versioned database migrations
    Tech Stack
    Category Description
    Framework Spring Boot
    Dependency Management Manual dependency injection and component abstract factories
    Database Oracle Database
    Architecture Style OOP, SOLID, Domain, Value Objects, Package-by-component
    Testing JUnit, ArchUnit, Cucumber, integration with Docker Containers and real db in pipeline for complex tests
  3. Infrastructure and Networking

    Managing network and server infrastructure using NGINX and local DNS.
    Use Case
    • Network Routing: Handling subdomains and securing HTTP/S traffic
    • SSL/TLS Management: Ensuring secure connections with SSL certificates
    • Monitoring: Tracking the state of infrastructure and applications
    Tech Stack
    Category Description
    Web Server NGINX as a Reverse Proxy
    SSL Certbot + Let's Encrypt for automatic SSL
    Monitoring & Observability NetData
    Local DNS & DHCP PiHole/Unbound
    Static Site Generator Eleventy (11ty) for generating a static homepage

Additional Information

  • Domain: DevOps, Finance
  • Status: in_progress
  • Keywords: TeamCity Docker Gitea&Githooks Liquibase SpringBoot

Thumbnail

UML Sequance Diagram