diff --git a/java_devops_cicd_enterprise.svg b/java_devops_cicd_enterprise.svg new file mode 100644 index 00000000..5d13a7a5 --- /dev/null +++ b/java_devops_cicd_enterprise.svg @@ -0,0 +1,704 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ENTERPRISE DevOps CI/CD Pipeline Architecture — Java Web Application +Jenkins · GitHub · SonarQube · Apache Maven · Nexus · Docker · Trivy · Docker Hub · Docker Stack · Swarm (1 Manager + 3 Workers) · SMTP + + + + + + +JENKINS CI/CD ORCHESTRATOR + + + + +👨‍💻 +Developer +Writes Java code · commits to feature branch · raises pull request to main branch +git add . && git commit -m "feat: add feature" && git push origin feature/my-feature + +SOURCE TRIGGER +Active + + + + +git push / webhook + + + + + + +GitHub — Source Control Management (SCM) +Repository hosting · branch strategy (main/develop/feature/*) · PR merge triggers Jenkins webhook +Webhook: POST https://jenkins:8080/github-webhook/ · Events: push, pull_request merged to main + +SCM · WEBHOOK +Connected + + + + +Jenkins job triggered + + + + + +📥 +Obtain Code — Jenkins Checkout Stage +Jenkins clones the repository · reads Jenkinsfile · initialises workspace · sets env variables +stage('Checkout') { git branch:'main', credentialsId:'github-creds', url:env.GIT_URL } + +JENKINS STAGE 1 +Stage OK + + + + +source ready + + + + + +🔍 +SonarQube — Code Quality Analysis (CQA) +Static code analysis · detects bugs, vulnerabilities, code smells · enforces quality gate thresholds +mvn sonar:sonar -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.projectKey=myapp +Quality gate: coverage >= 80% · duplications < 3% · 0 blocker/critical bugs · < 10 major smells + +Coverage 82% + +0 Critical + +Gate: PASS + +QUALITY GATE +Gate PASS + + + + +quality passed + + + + + +⚙️ +Apache Maven — Build the Code +Compiles Java source · runs unit & integration tests · packages artifact (JAR/WAR) · generates reports +mvn clean package -DskipTests=false -Dmaven.test.failure.ignore=false -Pproduction +Output: target/webapp-1.0.${BUILD_NUMBER}.jar · surefire-reports/ · jacoco coverage report + +compile + +test + +package + +install + +JENKINS STAGE 2 +Build OK + + + + +artifact generated + + + + + +🗄️ +Nexus Repository Manager — Artifact Storage +Publishes versioned JAR/WAR to hosted Maven repo · manages dependency proxy · staging & release +mvn deploy → com.myapp:webapp:1.0.${BUILD_NUMBER} pushed to http://nexus:8081/repo/releases/ + +ARTIFACT STORE +Published + + + + +artifact ready + + + + + +🐳 +Docker — Containerisation (App & DB) +Builds two Docker images: Web App container + Database container · multi-stage Dockerfile +docker build -t username/myapp:${BUILD_NUMBER} -t username/myapp:latest -f Dockerfile.app . +docker build -t username/mydb:${BUILD_NUMBER} -t username/mydb:latest -f Dockerfile.db . + +App Image + +DB Image + +JENKINS STAGE 3 +Images Built + + + + +images built + + + + + +🛡️ +Trivy — Image Security Vulnerability Scan +Scans App & DB images for CVEs · OS packages · language deps · misconfigs · secrets detection +trivy image --exit-code 1 --severity HIGH,CRITICAL --format table username/myapp:${BUILD_NUMBER} +trivy image --exit-code 1 --severity HIGH,CRITICAL --format table username/mydb:${BUILD_NUMBER} + +0 CRITICAL + +2 MEDIUM + +SCAN PASS + +SECURITY GATE +Scan PASS + + + + +scan passed + + + + + +📦 +Docker Hub — Container Registry +Pushes scanned images to Docker Hub · version tag + latest tag · registry for Swarm deployment pull +docker push username/myapp:${BUILD_NUMBER} && docker push username/mydb:${BUILD_NUMBER} + +JENKINS STAGE 4 +Pushed + + + + +images available in registry + + + + + +🚀 +Docker Stack — Deploy to Swarm Cluster +Jenkins SSH into Swarm Manager · pulls images from Docker Hub · deploys stack · rolling update +docker stack deploy -c docker-compose.stack.yml myapp-stack --with-registry-auth +Services: myapp-stack_app (replica=2 across workers) · myapp-stack_db (replica=1 on manager) + +App x2 + +DB x1 + +JENKINS STAGE 5 +Deployed + + + + +stack deployed to swarm + + + + + +DOCKER SWARM CLUSTER + + +1 Manager Node · 3 Worker Nodes · Overlay Network: myapp-net + + + + + + +⭐ MANAGER NODE + +Host: swarm-manager-01 +IP: 192.168.1.10 +Role: Leader · Raft consensus +OS: Ubuntu 22.04 LTS +Docker: 24.x Swarm Mode + + + + +DB Container + + + +mydb:${BUILD_NUMBER} +Port 3306 · 1 replica +Manages cluster state +Schedules services +Raft quorum member + + + + + +WORKER NODE 1 + +Host: swarm-worker-01 +IP: 192.168.1.11 +Role: Worker +OS: Ubuntu 22.04 LTS +Docker: 24.x Swarm Mode + + + + +App Container + + +myapp:${BUILD_NUMBER} +Port 8080 · replica 1/2 +Runs workloads only +Accepts tasks from Mgr +Health reported to Mgr + + + + + +WORKER NODE 2 + +Host: swarm-worker-02 +IP: 192.168.1.12 +Role: Worker +OS: Ubuntu 22.04 LTS +Docker: 24.x Swarm Mode + + + + +App Container + + +myapp:${BUILD_NUMBER} +Port 8080 · replica 2/2 +Runs workloads only +Accepts tasks from Mgr +Health reported to Mgr + + + + + +WORKER NODE 3 + +Host: swarm-worker-03 +IP: 192.168.1.13 +Role: Worker +OS: Ubuntu 22.04 LTS +Docker: 24.x Swarm Mode + + + + +Standby / Scale-out + + +Ready for new replica +Scale: docker service scale +Runs workloads only +Accepts tasks from Mgr +Ready for scale-out + + + + + + + +Overlay Network: myapp-net · All nodes communicate on ingress mesh · docker_gwbridge for external traffic + + + + +deployment complete + + + + + +📧 +SMTP — Post-Build Email Notification +Sends build result to team · test report · coverage · deployment status · success or failure details +emailext to:'team@company.com', subject:"[${BUILD_STATUS}] ${JOB_NAME} #${BUILD_NUMBER}", body:report + +POST-BUILD +Sent + + +Jenkins Pipeline — All 5 stages complete · Declarative Pipeline · Jenkinsfile driven · v1.0 + + + + + +TOOLS & REFERENCE + + + + + +TOOL STACK — All Pipeline Components + + +TOOL +ROLE / PURPOSE +TOOL +ROLE / PURPOSE + + + + + +🔧 +Jenkins LTS +CI/CD orchestrator · Declarative Pipeline + + + + + +GitHub +Source control · webhook SCM trigger + + + + +🔍 +SonarQube +Static analysis · quality gate enforcement + + + + +⚙️ +Apache Maven +Build · test · package JAR/WAR artifact + + + + +🗄️ +Nexus Repository +Artifact store · Maven repo manager + + + + +🐳 +Docker Engine +Containerise App + DB · multi-stage build + + + + +🛡️ +Trivy +CVE image scan · SBOM · secrets detection + + + + +📦 +Docker Hub +Container registry · versioned image store + + + +🚀 +Docker Stack +Deploy to Swarm · service orchestration + + + +🐝 +Docker Swarm +Cluster orchestration · 1 Mgr + 3 Workers + + + +📧 +SMTP Email +Post-build notify · success/failure alert + + + + + + +DOCKER SWARM CLUSTER TOPOLOGY — 1 Manager · 3 Workers + + + + + + + +⭐ MANAGER NODE + +swarm-manager-01 +192.168.1.10 +Raft Leader · Schedules +DB replica runs here +docker swarm init + + + + + +WORKER 1 + +swarm-worker-01 +192.168.1.11 +App replica 1/2 +Port 8080 exposed + + + + + +WORKER 2 + +swarm-worker-02 +192.168.1.12 +App replica 2/2 +Port 8080 exposed + + + + + +WORKER 3 + +swarm-worker-03 +192.168.1.13 +Standby / scale-out +Ready for new replica + + + + + + + + + + + + + + +🔗 Overlay Network: myapp-net · All nodes communicate via encrypted VXLAN tunnel · Ingress mesh load balancing on port 8080 + + + +# docker-compose.stack.yml +version: '3.8' +services: +app: +image: username/myapp:${BUILD_NUMBER} +ports: ["8080:8080"] +deploy: {replicas: 2, placement: {constraints: [node.role==worker]}} +db: +image: username/mydb:${BUILD_NUMBER} +ports: ["3306:3306"] +deploy: {replicas: 1, placement: {constraints: [node.role==manager]}} +volumes: [db-data:/var/lib/mysql] +networks: [myapp-net] + + + + + +LEGEND + + +Pipeline stage (Blue) + +Tool / service (Green) + +CI/CD orchestrator (Orange) + +Security gate (Purple) + + +Swarm cluster (Yellow) + +Manager node (Red) + +Worker node (Sky) + +Service healthy + +Standby / warning + + +Animated pipeline flow + +Quality / security passed + +Swarm node communication + + + + + +PIPELINE HEALTH METRICS + +Build success + + +98.2% +QA gate pass + + +94.5% +Security pass + + +95.7% +Avg pipeline time +4m 32s +Swarm nodes +4 / 4 UP + + + + + +SWARM CLUSTER — KEY COMMANDS + + + +# ── INITIALISE SWARM ON MANAGER ────────────────────────── +docker swarm init --advertise-addr 192.168.1.10 + +# ── JOIN WORKER NODES (run on each worker) ──────────────── +docker swarm join --token <SWARM_TOKEN> 192.168.1.10:2377 + +# ── DEPLOY STACK FROM JENKINS (Stage 5) ────────────────── +docker stack deploy -c docker-compose.stack.yml myapp-stack \ + --with-registry-auth + +# ── VERIFY RUNNING SERVICES ─────────────────────────────── +docker service ls +# ID NAME MODE REPLICAS IMAGE +# abc1 myapp-stack_app replicated 2/2 myapp:${BUILD} +# abc2 myapp-stack_db replicated 1/1 mydb:${BUILD} + +# ── SCALE SERVICE ───────────────────────────────────────── +docker service scale myapp-stack_app=4 + +# ── LIST ALL NODES ──────────────────────────────────────── +docker node ls + + + +Java Web Application · Enterprise CI/CD · Jenkins · GitHub · SonarQube · Maven · Nexus · Docker · Trivy · Docker Hub · Docker Stack · Swarm (1 Mgr + 3 Workers) · SMTP · v2.0 + +