$ kubectl describe project node-js-ci-cd-pipeline-with-jenkins-argocd-elk-stack
Node.js CI/CD Pipeline with Jenkins, ArgoCD & ELK Stack
Built a production-style Product Catalog REST API using Node.js and Express, deployed to Kubernetes with a full 8-stage Jenkins CI/CD pipeline and GitOps workflow.
CI Pipeline (Jenkins):
- npm install inside node:20-alpine Docker container
- Jest tests with mongodb-memory-server (node:20 Debian)
- Docker image built and pushed to Docker Hub with Git SHA tag
- Helm values.yaml updated with new image tag
- Git commit triggers ArgoCD sync
- Jenkins polls ArgoCD API and confirms pod is Healthy before marking build green
CD & Deployment:
- ArgoCD watches GitHub repo and auto-deploys on every merge to master
- App deployed to K3s cluster via Helm chart with multi-environment values files
- MongoDB running as separate K8s pod, connected by service name
Observability:
- OpenTelemetry SDK instruments Express and HTTP automatically
- Traces exported to OTel Collector → Jaeger
- Winston JSON logs shipped via Filebeat → Elasticsearch → Kibana
- Every log line includes traceId for Kibana ↔ Jaeger correlation
Real bugs fixed during the project:
- mongodb-memory-server fails on Alpine — switched to node:20 Debian with MONGOMS_VERSION=7.0.14
- Groovy parser crashes on bash ${VAR#prefix} syntax — fixed with sed at runtime
- Jenkins when { branch ‘master’ } always skips in regular Pipeline jobs — fixed with GIT_BRANCH expression
- OTel MongoDB instrumentation conflicts with mongoose bundled driver — disabled selectively