A realistic utility-style platform that shows how an energy company could deploy and monitor a .NET 8 transmission application using:
- Red Hat OpenShift and AWS EKS for Kubernetes
- Jenkins for CI/CD automation
- Docker for containerization
- Prometheus and Grafana for observability
- Oracle Autonomous Database (ADB) for grid and transmission data storage
---
config:
layout: dagre
---
flowchart LR
subgraph Cluster["OpenShift / K8s Cluster<br>(Ubuntu Server, On-Prem)"]
Pod["📦 Pod<br>(.NET Energy App)"]
Prometheus["📈 Prometheus"]
Grafana["📊 Grafana Dashboards"]
OracleDB["OracleDB"]
end
Dev["👨💻 Developer"] -- Push Code --> Jenkins["🧰 Jenkins"]
Dev -- Webhook --> GitHub["🐙 GitHub"]
GitHub --> Docker["Docker"]
Jenkins -- Build Docker --> Docker
Jenkins -- Manual Deploy --> Cluster
Docker -- Docker Image --> App["App"]
App -- Oracle SQL --> OracleDB
App -- Deploy Pod --> Cluster
Pod --> Prometheus
Prometheus --> Grafana
Grafana --> OracleDB
This project is built as a full end-to-end demonstration suitable for interviews, portfolio presentations, and real-world cloud engineering discussions.
- OpenShift Live App:
https://energy-transmission-web-redleopard-dev.apps.rm2.thpm.p1.openshiftapps.com - Jenkins Pipeline:
jenkins/Jenkinsfile - Kubernetes Manifests:
k8s/ - Monitoring:
monitoring/ - Ansible Automation:
ansible/ - Docs:
docs/
This project mirrors a real utility company workflow:
- Start on OpenShift for initial hosting (as many energy companies use Red Hat OpenShift).
- Expand into AWS EKS to complete CI/CD, observability, and scalability.
- Implement a full Jenkins pipeline to automate building and deploying the .NET app.
- Build ECR repositories and container images with Docker.
- Deploy everything via Kubernetes manifests under a single namespace.
- Add Prometheus + Grafana for system-wide monitoring.
- Integrate an Oracle Autonomous Database to simulate transmission/event storage and future AI analytics.
The result is a realistic end-to-end cloud engineering demo.
cd app/EnergyTransmission.Web dotnet restore dotnet run
cd docker docker build -t energy-transmission-web:latest -f Dockerfile ..
docker run -p 8080:80 energy-transmission-web:latest
kubectl create namespace energy-transmission
kubectl apply -f k8s/
kubectl get pods -n energy-transmission kubectl get svc -n energy-transmission
- OpenShift: use Routes
- EKS: use LoadBalancer or Ingress
The Jenkins pipeline includes:
- Checkout source
- Restore & build .NET
- Docker build & push to ECR
- Kubernetes deploy (EKS or OpenShift)
File located at:
jenkins/Jenkinsfile
Prometheus scrapes:
- Node health
- Pod restarts
- Resource usage
- Application metrics
Grafana visualizes everything in central dashboards.
Configuration inside:
monitoring/
This provides the long-term data layer for:
- Transmission events
- Line status data
- Outage history
- Future predictive analytics
No sensitive credentials are stored in the repo.
- Add alert rules & dashboards
- Add more Oracle queries & analytics
- Automate full deployment via Ansible
- Optional multi-cluster (OpenShift + EKS) demo
Created by Edward Thornton
Energy Transmission Project — Cloud Engineering • Kubernetes • DevOps • Observability