Skip to main content
In this lesson we explore a full CI/CD pipeline: from unit tests and coverage reports to Docker containerization and Kubernetes deployments. We’ll also add integration checks and enforce a manual approval gate before releasing to production.

Pipeline Overview

StageDescriptionCommands
Unit TestingValidate application logicnpm install
npm test
Code CoverageGenerate coverage metricsnpm install
npm run coverage
Docker Build & PushContainerize and publish imagedocker build -t your-image:latest .
docker push your-image:latest
Ensure your CI configuration archives test reports and coverage artifacts for visibility.

1. Completed CI Jobs

Here are the commands executed in separate CI stages:
# Unit Tests
npm install
npm test
# Code Coverage
npm install
npm run coverage
# Docker Containerization
docker build -t your-image:latest .
docker run --rm your-image:latest
docker push your-image:latest

2. Kubernetes Deployment (Development)

Deploy to the development cluster using Kubernetes manifests:
  1. Prepare manifests:
    • deploy/deployment.yaml
    • deploy/ingress.yaml
  2. Apply them with kubectl:
    kubectl apply -f deploy/deployment.yaml
    kubectl apply -f deploy/ingress.yaml
    
  3. Verify the ingress and perform a quick integration test:
    kubectl get ingress
    curl https://<dev-ingress-url>/live
    
Always verify that the ingress controller and TLS certificates are correctly configured in your dev environment.

3. Kubernetes Deployment (Production) with Manual Approval

Before pushing changes to production, insert a manual approval step in your CI/CD workflow. Upon approval, deploy using the same manifests against the production context:
Production deployments are irreversible. Double-check your manifests, image tags, and environment-specific configurations before approving.
# Apply production manifests
kubectl apply -f deploy/deployment.yaml --context=production
kubectl apply -f deploy/ingress.yaml --context=production

# Verify production ingress and run integration test
kubectl get ingress --context=production
curl https://<prod-ingress-url>/live

References

Watch Video