<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Naveen Kumar</title>
    <description>The latest articles on DEV Community by Naveen Kumar (@naveen_kumar_60514a494e10).</description>
    <link>https://dev.to/naveen_kumar_60514a494e10</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3807927%2Fdcfe71e1-7cd9-4ed1-8875-b02297d3ce9b.jpg</url>
      <title>DEV Community: Naveen Kumar</title>
      <link>https://dev.to/naveen_kumar_60514a494e10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naveen_kumar_60514a494e10"/>
    <language>en</language>
    <item>
      <title>How to Build a DevOps Career Roadmap From Electronic City Bangalore — Tools, Path &amp; Training (2026)</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 12:27:40 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/how-to-build-a-devops-career-roadmap-from-electronic-city-bangalore-tools-path-training-2025-e93</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/how-to-build-a-devops-career-roadmap-from-electronic-city-bangalore-tools-path-training-2025-e93</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7ie0dvu3ih53rj7kegf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7ie0dvu3ih53rj7kegf.jpg" alt=" " width="800" height="803"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are a developer or sysadmin based near Electronic City and you are thinking about moving into &lt;strong&gt;&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Course in Electronic City&lt;/a&gt;&lt;/strong&gt; — this is the roadmap you actually need. Not the generic "learn Docker then Kubernetes" advice you will find everywhere. This is a structured, tool-by-tool path designed specifically for the Electronic City job market in 2026.&lt;br&gt;
I will cover the exact tools you need to master, in what order, what real DevOps engineers do daily, and where to get structured training with actual placement support in Electronic City.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Understand What the Role Actually Demands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before picking any course or tool, understand what Electronic City companies put in their DevOps job descriptions right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The non-negotiables in 2026:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version control and branching strategy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git is table stakes. But recruiters now want to see GitHub Actions or GitLab CI experience — not just basic Git commands. Understand trunk-based development vs GitFlow and when to use each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD pipeline ownership&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins with declarative Jenkinsfile pipelines is the most common requirement in Bangalore IT services companies. Product companies lean toward GitHub Actions and GitLab CI. Know at least one deeply — not all three superficially.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker — containers are mandatory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You must be able to write a production-optimized Dockerfile, build multi-stage images, and configure Docker Compose for multi-service stacks. This is now a day-one expectation — not an advanced skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes — the most valued skill in the market&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;K8s proficiency is what separates ₹6 LPA offers from ₹14 LPA offers. You need hands-on experience with Pods, Deployments, Services, ConfigMaps, Secrets, RBAC, Helm chart management, and HPA. Knowing the theory is not enough — you need to have built and debugged a real cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terraform — IaC is now standard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Manual server provisioning is a red flag in interviews. You need to write Terraform modules, manage state remotely with S3 and DynamoDB backends, and provision real AWS or Azure infrastructure — EC2, EKS, RDS, VPC — from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ansible — configuration management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ansible playbooks and roles for server provisioning automation. Understand idempotency. Know how to integrate Ansible into a Jenkins pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitoring — Prometheus and Grafana&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You must be able to set up a Prometheus scrape config, write PromQL queries, and build Grafana dashboards with alerting rules. ELK Stack for log management is a bonus that frequently tips hiring decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud — AWS at minimum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EC2, EKS, S3, RDS, Lambda, VPC, IAM — you need working knowledge. The AWS Certified DevOps Engineer Professional certification significantly improves your offer quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — The Learning Order That Actually Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most people learn DevOps tools in the wrong order and end up with shallow knowledge across everything. Here is the sequence that builds genuine depth:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 — Foundation (Weeks 1–2)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Linux CLI and shell scripting → Git branching strategies → Basic networking for cloud environments&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Automation (Weeks 3–4)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jenkins CI/CD pipelines → Docker containerization → Docker Compose multi-service apps&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Orchestration (Weeks 5–6)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes from scratch → Helm chart management → RBAC and cluster security&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 4 — Infrastructure (Weeks 7–8)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terraform IaC on AWS → Ansible configuration management → Remote state and module reuse&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 5 — Cloud and Monitoring (Weeks 9–10)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS core services and EKS → Prometheus and Grafana → ELK Stack log management&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 6 — Portfolio and Placement (Weeks 11–12)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Build 3–5 end-to-end projects → Document on GitHub and LinkedIn → Begin interview preparation&lt;br&gt;
Each phase builds directly on the previous one. Skipping ahead — jumping to Kubernetes before understanding Docker properly — is the most common reason candidates struggle in technical interviews.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Projects That Actually Get You Hired&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Certifications open doors. Projects close offers. Here are the five projects that consistently impress Electronic City hiring managers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 1 — End-to-End Jenkins Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A complete CI/CD pipeline: Git commit triggers Jenkins build → Maven compiles → SonarQube scans → Docker image built and pushed to registry → deployed to staging. This single project demonstrates CI/CD, Docker, and Git integration in one story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 2 — Kubernetes Production Cluster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Kubernetes cluster running a multi-tier application — frontend, backend, and database — with Helm chart management, HPA configured, RBAC policies applied, and Prometheus scraping metrics. Walk an interviewer through this and you stand out immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 3 — Terraform AWS Environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Terraform module that provisions a complete AWS environment from scratch — VPC, EC2 instances, an EKS cluster, S3 bucket with versioning, and RDS. Remote state stored in S3 with DynamoDB locking. This proves IaC depth that most candidates claim but cannot demonstrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 4 — Ansible Server Automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Ansible playbook that provisions and configures a fleet of servers — installing dependencies, configuring Nginx, deploying an application — integrated into your Jenkins pipeline as a post-deployment step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 5 — Prometheus and Grafana Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A fully configured monitoring environment — Prometheus scraping your Kubernetes cluster, custom Grafana dashboards with alerting rules, and ELK Stack collecting and indexing application logs. Demonstrate this and most monitoring-related interview questions answer themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Where to Get Structured Training in Electronic City&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Self-learning works for motivated candidates — but it takes significantly longer without structure, project feedback, and interview preparation. If you want to compress the timeline and add verified placement support, structured training is worth serious consideration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to look for in a DevOps training institute in Electronic City:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Real trainer experience matters more than anything else. A trainer who has built production Kubernetes clusters talks about them differently from one who has only taught them. Look for 8+ years of hands-on industry experience — ask specifically which companies and which kinds of systems.&lt;br&gt;
Hands-on lab work from day one is non-negotiable. If a course does not have you building real pipelines in the first week, it is not job-oriented training — it is a lecture series.&lt;/p&gt;

&lt;p&gt;Placement support that includes technical mock interviews is what separates useful post-course support from hollow promises. Resume help and job board access are easy to offer. Tool-by-tool mock interview preparation with someone who knows what Electronic City interviewers actually ask — that is rare and valuable.&lt;/p&gt;

&lt;p&gt;eMexo Technologies is the most consistently recommended &lt;strong&gt;&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training Institute in Electronic City&lt;/a&gt;&lt;/strong&gt; for candidates who want this combination — industry-expert trainers, real-time project work across all five project types above, and a placement program with direct recruiter connections inside the Electronic City corridor.&lt;/p&gt;

&lt;p&gt;The DevOps course in Electronic City Bangalore at eMexo covers the full Phase 1–6 roadmap above — weekday, weekend, fast-track, and online batches available.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training in Electronic City Bangalore — eMexo Technologies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Interview Preparation Specific to Electronic City&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Electronic City IT services companies — Infosys, Wipro, HCL, Capgemini — run structured technical interviews with a consistent pattern. Knowing the pattern is half the preparation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 1 — Technical screening&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Expect questions on Git branching, Docker commands, Kubernetes architecture, and CI/CD pipeline design. You will almost certainly be asked to explain your pipeline project end-to-end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 2 — Hands-on or whiteboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You may be asked to write a Dockerfile, a Jenkinsfile stage, a Terraform resource block, or a Kubernetes Deployment YAML from memory. Practice writing these without IDE assistance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3 — Cloud and monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS scenario questions — how would you architect this, what would break here, how would you monitor that. Prometheus and Grafana alerting setups are frequently discussed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 4 — HR and salary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Research market rates before this round. Freshers in Electronic City DevOps roles currently start at ₹4.5–7 LPA. Mid-level engineers with 2–4 years of demonstrated tool proficiency earn ₹8–15 LPA. Come prepared with a number and a rationale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Reference — The 2026 Electronic City DevOps Toolchain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Git and GitHub Actions for version control and pipeline triggers. Jenkins for CI/CD in enterprise environments. Docker and Docker Compose for containerization. Kubernetes and Helm for orchestration. Ansible for configuration management. Terraform for infrastructure as code. AWS EC2, EKS, S3, Lambda, and VPC for cloud infrastructure. Prometheus and Grafana for monitoring. ELK Stack for logging. SonarQube for code quality. Trivy for container security scanning.&lt;/p&gt;

&lt;p&gt;Master these in the sequence above, build the five projects, document everything on GitHub and LinkedIn, and you are ready for the Electronic City DevOps job market.&lt;/p&gt;

&lt;p&gt;Drop a ❤️ if this roadmap helped. Share with a developer in Electronic City who is thinking about moving into DevOps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Also read&lt;/strong&gt;: &lt;a href="https://medium.com/@emexobangalore/devops-training-in-electronic-city-bangalore-compare-institutes-fees-placement-2026-47dcf4b39485" rel="noopener noreferrer"&gt;DevOps Training in Electronic City Bangalore — Compare Institutes, Fees, Batches &amp;amp; Placement (2026)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>career</category>
      <category>kubernetes</category>
      <category>aws</category>
    </item>
    <item>
      <title>DevOps Training in Electronic City Bangalore — Tools, Certification &amp; Career Guide for 2026</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Wed, 25 Mar 2026 10:00:03 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/devops-training-in-electronic-city-bangalore-tools-certification-career-guide-for-2026-3i4i</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/devops-training-in-electronic-city-bangalore-tools-certification-career-guide-for-2026-3i4i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzimz191ydz7eqri0mjze.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzimz191ydz7eqri0mjze.jpg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  DevOps Training in Electronic City Bangalore — Tools, Certification &amp;amp; Career Guide for 2026
&lt;/h1&gt;

&lt;p&gt;If you're a developer or IT professional based in Bangalore and you've been thinking about transitioning into DevOps — or deepening your existing DevOps skills — this guide is for you.&lt;/p&gt;

&lt;p&gt;We'll cover &lt;strong&gt;what DevOps actually demands in 2026&lt;/strong&gt;, which tools you need to master, what to look for in a &lt;strong&gt;DevOps training institute in Electronic City&lt;/strong&gt;, and how to turn certification into a real career move.&lt;/p&gt;




&lt;h2&gt;
  
  
  The State of DevOps in 2026 — Why Now?
&lt;/h2&gt;

&lt;p&gt;DevOps is no longer a "nice to have" skillset. It is a &lt;strong&gt;baseline expectation&lt;/strong&gt; at most mid-to-large IT companies — and Electronic City, Bangalore's premier IT corridor, is no exception.&lt;/p&gt;

&lt;p&gt;Here is what the market looks like right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes&lt;/strong&gt; adoption has crossed 70% among enterprises running containerized workloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD pipelines&lt;/strong&gt; are standard practice — manual deployments are being phased out&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt; with Terraform and Ansible is now expected in most DevOps job descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform Engineering&lt;/strong&gt; and &lt;strong&gt;SRE roles&lt;/strong&gt; are emerging as natural evolutions of the DevOps engineer role&lt;/li&gt;
&lt;li&gt;DevOps engineers in Bangalore earn between &lt;strong&gt;₹6 LPA and ₹28 LPA&lt;/strong&gt; depending on experience and tool proficiency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're in or near Electronic City, the opportunity is literally on your doorstep. Companies like Infosys, Wipro, HCL, Capgemini, and hundreds of product startups are actively building DevOps teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does a Modern DevOps Engineer Actually Do?
&lt;/h2&gt;

&lt;p&gt;Before picking a &lt;strong&gt;DevOps course in Electronic City&lt;/strong&gt;, it helps to understand what the role really involves day-to-day:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔁 CI/CD Pipeline Management
&lt;/h3&gt;

&lt;p&gt;Building, maintaining, and optimizing pipelines using Jenkins, GitLab CI, or GitHub Actions — ensuring every code commit is automatically tested, built, and deployed.&lt;/p&gt;

&lt;h3&gt;
  
  
  🐳 Containerization &amp;amp; Orchestration
&lt;/h3&gt;

&lt;p&gt;Packaging applications into Docker containers and managing them at scale using Kubernetes — including writing Helm charts, managing namespaces, and handling rolling deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  ☁️ Cloud Infrastructure
&lt;/h3&gt;

&lt;p&gt;Provisioning and managing cloud resources on AWS or Azure — EC2, EKS, S3, Lambda, Azure DevOps — using both the console and infrastructure-as-code tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 Configuration Management &amp;amp; IaC
&lt;/h3&gt;

&lt;p&gt;Automating server configuration using Ansible, and managing entire infrastructure states using Terraform — treating your servers the same way developers treat code.&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 Monitoring &amp;amp; Observability
&lt;/h3&gt;

&lt;p&gt;Setting up Prometheus for metrics collection, building Grafana dashboards, and configuring ELK Stack (Elasticsearch, Logstash, Kibana) for centralized log management.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 DevSecOps Integration
&lt;/h3&gt;

&lt;p&gt;Integrating security scanning tools like SonarQube and Trivy directly into pipelines — shifting security left rather than treating it as an afterthought.&lt;/p&gt;

&lt;p&gt;This is the full scope a good &lt;strong&gt;DevOps certification course in Electronic City&lt;/strong&gt; should prepare you for.&lt;/p&gt;




&lt;h2&gt;
  
  
  DevOps Toolchain — The 2026 Stack You Need to Know
&lt;/h2&gt;

&lt;p&gt;Here's a breakdown of the core tools and where they fit:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Version Control&lt;/td&gt;
&lt;td&gt;Git, GitHub, Bitbucket&lt;/td&gt;
&lt;td&gt;Code management &amp;amp; branching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;Jenkins, GitLab CI, GitHub Actions&lt;/td&gt;
&lt;td&gt;Build &amp;amp; deploy automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containerization&lt;/td&gt;
&lt;td&gt;Docker, Docker Compose&lt;/td&gt;
&lt;td&gt;App packaging &amp;amp; portability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestration&lt;/td&gt;
&lt;td&gt;Kubernetes, Helm&lt;/td&gt;
&lt;td&gt;Container management at scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config Management&lt;/td&gt;
&lt;td&gt;Ansible, Chef, Puppet&lt;/td&gt;
&lt;td&gt;Server automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IaC&lt;/td&gt;
&lt;td&gt;Terraform, CloudFormation&lt;/td&gt;
&lt;td&gt;Infrastructure provisioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;AWS, Azure, GCP&lt;/td&gt;
&lt;td&gt;Cloud platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;Prometheus, Grafana&lt;/td&gt;
&lt;td&gt;Metrics &amp;amp; alerting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logging&lt;/td&gt;
&lt;td&gt;ELK Stack&lt;/td&gt;
&lt;td&gt;Centralized log analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;SonarQube, Trivy, OWASP ZAP&lt;/td&gt;
&lt;td&gt;DevSecOps integration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A structured &lt;strong&gt;DevOps training in Electronic City Bangalore&lt;/strong&gt; should give you hands-on experience across every layer of this stack — not just theoretical exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right DevOps Training Institute in Electronic City
&lt;/h2&gt;

&lt;p&gt;Here are the five criteria that actually matter when evaluating a &lt;strong&gt;DevOps training center in Electronic City&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 🧑‍🏫 Trainer Credibility
&lt;/h3&gt;

&lt;p&gt;Classroom instructors should be working practitioners — not just certified trainers. Look for 8+ years of real DevOps implementation experience, not just teaching experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 🧪 Project-Based Curriculum
&lt;/h3&gt;

&lt;p&gt;Theory is not enough. The course must include live project work — building actual CI/CD pipelines, deploying containerized apps to Kubernetes clusters, and provisioning cloud infrastructure with Terraform.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 📜 Recognized Certification
&lt;/h3&gt;

&lt;p&gt;Ensure the certification issued is acknowledged by recruiters. Pair it with preparation for vendor certifications like &lt;strong&gt;AWS Certified DevOps Engineer&lt;/strong&gt; or &lt;strong&gt;CKA (Certified Kubernetes Administrator)&lt;/strong&gt; for maximum market value.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 💼 Placement Support
&lt;/h3&gt;

&lt;p&gt;The best &lt;strong&gt;DevOps training and placement in Electronic City&lt;/strong&gt; programs go beyond handing you a certificate. They include resume workshops, mock technical interviews, LinkedIn optimization, and direct recruiter referrals.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. 🗓 Schedule Flexibility
&lt;/h3&gt;

&lt;p&gt;Working professionals need weekend or online batches. Freshers benefit from intensive weekday schedules. The right institute offers both.&lt;/p&gt;

&lt;h2&gt;
  
  
  eMexo Technologies — DevOps Training in Electronic City
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;eMexo Technologies&lt;/strong&gt; is one of the most well-regarded &lt;strong&gt;DevOps training institutes in Electronic City, Bangalore&lt;/strong&gt;. Here's what their program delivers:&lt;/p&gt;

&lt;h3&gt;
  
  
  What You Get:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Trainers with &lt;strong&gt;8–15 years&lt;/strong&gt; of industry experience&lt;/li&gt;
&lt;li&gt;✅ Hands-on labs from &lt;strong&gt;week one&lt;/strong&gt; — no theory-only phases&lt;/li&gt;
&lt;li&gt;✅ Complete toolchain coverage: Git → Jenkins → Docker → Kubernetes → Ansible → Terraform → AWS/Azure → Prometheus/Grafana&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Globally recognized DevOps certification&lt;/strong&gt; upon completion&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;100% placement assistance&lt;/strong&gt; — resume, mock interviews, recruiter referrals&lt;/li&gt;
&lt;li&gt;✅ Flexible batches — weekday, weekend, fast-track, and live online&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Batch Options:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Batch Type&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Weekday&lt;/td&gt;
&lt;td&gt;Full-time learners &amp;amp; freshers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekend&lt;/td&gt;
&lt;td&gt;Working professionals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast-Track&lt;/td&gt;
&lt;td&gt;Quick certification seekers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Online Live&lt;/td&gt;
&lt;td&gt;Learners outside Bangalore&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Full Course Curriculum — Module Breakdown
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;DevOps course in Electronic City Bangalore&lt;/strong&gt; at eMexo is structured across 10 core modules:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 1 — DevOps Fundamentals&lt;/strong&gt;&lt;br&gt;
DevOps culture, Agile vs DevOps, SDLC overview, DevOps lifecycle&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 2 — Linux for DevOps&lt;/strong&gt;&lt;br&gt;
CLI essentials, Shell scripting, File systems, Process management&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 3 — Git &amp;amp; GitHub&lt;/strong&gt;&lt;br&gt;
Branching strategies, Pull requests, Merge conflicts, GitHub Actions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 4 — Jenkins (CI/CD)&lt;/strong&gt;&lt;br&gt;
Pipeline architecture, Maven integration, SonarQube, Automated testing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 5 — Docker&lt;/strong&gt;&lt;br&gt;
Images, containers, Dockerfiles, Docker Compose, registries&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 6 — Kubernetes&lt;/strong&gt;&lt;br&gt;
Pods, Deployments, Services, ConfigMaps, Helm, cluster monitoring&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 7 — Ansible&lt;/strong&gt;&lt;br&gt;
Playbooks, roles, inventory management, pipeline integration&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 8 — Terraform&lt;/strong&gt;&lt;br&gt;
Providers, modules, state management, AWS/Azure provisioning&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 9 — Cloud Platforms (AWS &amp;amp; Azure)&lt;/strong&gt;&lt;br&gt;
EC2, EKS, S3, Lambda, Azure DevOps pipelines, cost optimization&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 10 — Monitoring &amp;amp; Observability&lt;/strong&gt;&lt;br&gt;
Prometheus, Grafana dashboards, ELK Stack, alerting rules&lt;/p&gt;

&lt;p&gt;** Who Should Take This Course?&lt;br&gt;
**&lt;br&gt;
The &lt;strong&gt;DevOps training in Electronic City&lt;/strong&gt; at eMexo is open to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎓 Fresh graduates (B.E., B.Tech, MCA, BCA — any passing year)&lt;/li&gt;
&lt;li&gt;💻 Software developers moving into DevOps or cloud roles&lt;/li&gt;
&lt;li&gt;🛠 System administrators transitioning to automation and cloud ops&lt;/li&gt;
&lt;li&gt;☁️ Cloud engineers expanding their DevOps depth&lt;/li&gt;
&lt;li&gt;🔄 Non-IT professionals making a structured career switch&lt;/li&gt;
&lt;li&gt;📊 IT managers wanting strategic DevOps knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No prerequisites required&lt;/strong&gt; — the curriculum accommodates complete beginners through to experienced engineers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Career Outcomes — What Roles Can You Target?
&lt;/h2&gt;

&lt;p&gt;After completing a &lt;strong&gt;DevOps certification course in Electronic City&lt;/strong&gt;, you're eligible for:&lt;/p&gt;

&lt;p&gt;→ DevOps Engineer&lt;br&gt;
→ Site Reliability Engineer (SRE)&lt;br&gt;
→ Cloud Engineer&lt;br&gt;
→ Platform Engineer&lt;br&gt;
→ Build &amp;amp; Release Engineer&lt;br&gt;
→ CI/CD Pipeline Specialist&lt;br&gt;
→ Infrastructure Automation Engineer&lt;br&gt;
→ DevSecOps Engineer&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;How to Enroll&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit the course page — Review the full 2025 curriculum and batch schedule&lt;/li&gt;
&lt;li&gt;Book a Free Demo Class — Experience trainer quality before committing&lt;/li&gt;
&lt;li&gt;Choose your batch — Weekday, weekend, fast-track, or live online&lt;/li&gt;
&lt;li&gt;Enroll and start — Begin building your DevOps career immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Enroll in &lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training in Electronic City Bangalore — eMexo Technologies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Frequently Asked Questions&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Q: How long is the DevOps course in Electronic City at eMexo?&lt;br&gt;
The course runs 45–60 days depending on your batch type — weekday, weekend, or fast-track — covering the complete DevOps toolchain with real-time projects throughout.&lt;/p&gt;

&lt;p&gt;Q: Is this DevOps training suitable for complete beginners?&lt;br&gt;
Yes. The curriculum starts from fundamentals and progressively builds to advanced real-world implementation. No prior DevOps experience is needed.&lt;br&gt;
Q: Does eMexo provide placement support after the DevOps certification?&lt;br&gt;
Yes — 100% placement assistance including resume building, technical mock interviews, HR preparation, and direct recruiter referrals through eMexo's hiring partner network in Electronic City.&lt;/p&gt;

&lt;p&gt;Q: What tools are covered in the DevOps certification course in Electronic City?&lt;br&gt;
Git, Jenkins, Docker, Kubernetes, Helm, Ansible, Terraform, AWS, Azure DevOps, Prometheus, Grafana, and the ELK Stack — a complete 2025-aligned DevOps toolchain.&lt;/p&gt;

&lt;p&gt;Q: Are online batches available?&lt;br&gt;
Yes. Live online batches run in parallel with classroom sessions and provide identical curriculum, hands-on labs, and placement support.&lt;/p&gt;

&lt;p&gt;Q: What certifications can I earn after this training?&lt;br&gt;
You receive eMexo's industry-recognized DevOps certification. The course also prepares you for vendor certifications like AWS Certified DevOps Engineer Professional and CKA (Certified Kubernetes Administrator).&lt;/p&gt;

&lt;p&gt;Found this useful? Drop a ❤️ and share it with someone who's exploring DevOps training options in Bangalore.&lt;/p&gt;

&lt;p&gt;👉 Also read my Wordpress Blogs: &lt;a href="https://devopstraining8.wordpress.com/2026/03/25/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training in Electronic City Bangalore | Best Institute, Certification &amp;amp; Placement 2026&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>career</category>
      <category>kubernetes</category>
      <category>aws</category>
    </item>
    <item>
      <title>The Developer's Practical Guide to Moving Into DevOps in Bangalore — What to Prioritize and What to Skip</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Sun, 22 Mar 2026 06:42:42 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/the-developers-practical-guide-to-moving-into-devops-in-bangalore-what-to-prioritize-and-what-to-1bi0</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/the-developers-practical-guide-to-moving-into-devops-in-bangalore-what-to-prioritize-and-what-to-1bi0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiajg4ug3bhmxlxmafb86.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiajg4ug3bhmxlxmafb86.jpg" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This guide is for developers who have already decided they want to make the move. It skips the motivation and goes straight to the roadmap.&lt;/p&gt;

&lt;p&gt;If you are a software developer in Bangalore — Java, Python, JavaScript, .NET, it does not matter which stack — and you have been watching DevOps roles appear in your LinkedIn feed at salary levels noticeably above where you currently are, this guide is for you.&lt;br&gt;
It assumes you have already done the research. You know what DevOps is. You know the tools. You have a general sense that your development background is an asset rather than a liability in this transition. What you probably do not have is a clear picture of exactly what to prioritize, what you can safely skip, and how to make the transition in a way that does not require you to start your technical career over from scratch.&lt;br&gt;
That is what this guide covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Your Developer Background Already Gives You
&lt;/h2&gt;

&lt;p&gt;Before getting into what you need to learn, it is worth being specific about what you already have — because most developer-to-DevOps guides underestimate this and it leads to wasted preparation time.&lt;/p&gt;

&lt;p&gt;Git fluency. You already understand branching strategies, pull requests, merge conflicts, and repository management at a level that most DevOps beginners spend weeks building. In DevOps, Git is also the event trigger for the entire delivery pipeline — a push to main kicks off a build, a pull request merge triggers a deployment. You already understand the mechanism. You need to understand what it triggers.&lt;/p&gt;

&lt;p&gt;Build and dependency management. If you have worked with Maven, Gradle, npm, pip, or any other build tool, you understand the artifact production process at a level that is directly applicable to CI/CD pipeline configuration. The Jenkins stage that runs your build is not mysterious — it is a build tool invocation in a different context.&lt;br&gt;
Application architecture intuition. You understand what a web application is, how it connects to a database, how it exposes an API, what its external dependencies are. This makes containerizing applications significantly more intuitive than it is for someone who has never built one. Writing a Dockerfile for an application you understand is much easier than writing one for an application that is opaque to you.&lt;/p&gt;

&lt;p&gt;Testing frameworks. You understand automated testing, test runners, coverage reporting, and what a failed test means. The CI/CD pipeline stage that runs tests is not a new concept — it is a familiar process in a new context.&lt;/p&gt;

&lt;p&gt;Reading code. Terraform HCL, Kubernetes YAML, Ansible playbooks, Jenkins pipeline syntax — these are all configuration languages rather than application programming languages. Your ability to read and write code makes these dramatically more accessible than they are for people coming from purely operations backgrounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Actually Need to Learn — In Priority Order
&lt;/h2&gt;

&lt;p&gt;Given what you already have, here is the specific learning that closes the gap to DevOps roles in Bangalore's Electronic City job market — ordered by how much it matters relative to how much time it requires.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;1. Linux and Shell Scripting — Do Not Skip This&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the one area where developer backgrounds vary most widely. If you have been working primarily in Windows environments or have used Linux only as a deployment target without administering it, this is the most important gap to close first.&lt;/p&gt;

&lt;p&gt;Shell scripting in DevOps is not application programming. You are not building complex logic — you are automating sequences of system commands, parsing output, managing files and processes, and writing the glue code that connects tools together. A developer who can write clean application code typically gets comfortable with bash scripting faster than someone coming from a pure operations background.&lt;/p&gt;

&lt;p&gt;What specifically to focus on: file system navigation and manipulation, process management, text processing with grep and awk and sed, SSH and remote execution, cron jobs, environment variables, and writing scripts that fail gracefully rather than silently. The scripting you write in this phase will appear throughout the rest of the toolchain.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Docker — Highest Priority, Fastest Return
&lt;/h2&gt;

&lt;p&gt;Docker is where your developer background gives you the biggest advantage. You understand what you are containerizing. Writing a Dockerfile for a Spring Boot application or a Node.js service is immediately intuitive when you understand the application's runtime requirements, its dependencies, and its configuration surface.&lt;br&gt;
What to focus on beyond the basics: multi-stage builds for production-optimized images, image layer caching to make CI builds fast, Docker networking for multi-service applications, image security scanning, and the specific ways Docker images are consumed by Kubernetes and CI/CD pipelines.&lt;br&gt;
The Docker Certified Associate certification is attainable quickly for a developer who engages seriously with the material. It provides a credential signal at the entry level that compensates for limited years of DevOps-specific experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. CI/CD Pipeline Design — Your Development Experience Is Directly Applicable
&lt;/h2&gt;

&lt;p&gt;This is where your developer background translates most directly into DevOps value. You understand what a build is. You understand what a test suite is. You understand what an artifact is. The CI/CD pipeline is the automation of processes you have done manually or watched happen around you throughout your development career.&lt;br&gt;
What is new: the configuration of the automation server itself — Jenkins pipeline syntax, GitHub Actions YAML, agent configuration, webhook setup, credential management, pipeline debugging. The concepts are familiar. The tooling configuration is new.&lt;br&gt;
Focus on building complete pipelines rather than understanding individual pipeline concepts in isolation. A pipeline that goes from code push to tested artifact to containerized deployment in a staging environment is the minimum viable demonstration of CI/CD competency for a technical interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Kubernetes — The Steepest Curve With the Highest Payoff
&lt;/h2&gt;

&lt;p&gt;Kubernetes has the steepest learning curve in the DevOps toolchain and the highest impact on your interview outcomes and eventual salary ceiling. The Certified Kubernetes Administrator is the single most valuable certification for mid-level DevOps roles in Electronic City's job market.&lt;/p&gt;

&lt;p&gt;Your developer background helps with the conceptual layer — understanding what pods, services, and deployments are trying to accomplish is easier when you understand the applications they are running. Where the curve gets steep is the operational layer — understanding cluster architecture, debugging pod failures, configuring networking and storage, managing RBAC, and operating the cluster when things go wrong.&lt;/p&gt;

&lt;p&gt;This is the part of the toolchain that most benefits from practice in a real cluster rather than a local simulation. The failure modes in a real EKS cluster are different from the failure modes in minikube, and the difference shows up clearly in technical interviews at companies running real Kubernetes in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Terraform — High Priority for Cloud-Native Roles
&lt;/h2&gt;

&lt;p&gt;Infrastructure as Code is increasingly a required skill rather than a differentiator for DevOps roles in Bangalore. Terraform is the dominant IaC tool across Electronic City's cloud-native companies.&lt;br&gt;
Your developer background gives you an advantage here that is often underestimated. Thinking about infrastructure as code — applying software engineering concepts like modularity, versioning, testing, and review to infrastructure configuration — is more natural for developers than for operations professionals who have managed infrastructure through manual processes.&lt;br&gt;
What to focus on: HCL syntax, provider configuration, resource management, state management in a team environment with remote backends and locking, module design, and workspace management for multiple environments. The HashiCorp Terraform Associate certification is achievable within a few months of focused study and demonstrates Infrastructure as Code competency to hiring managers.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. AWS — Essential Context, One Platform Is Enough
&lt;/h2&gt;

&lt;p&gt;You need enough AWS knowledge to understand where everything you have learned runs and how the cloud platform services interact with the tools above. You do not need deep expertise across all three major cloud platforms to get your first DevOps role.&lt;/p&gt;

&lt;p&gt;AWS is the right starting point for the Bangalore market. Focus on the services that appear most consistently in DevOps job descriptions: IAM for identity and access management, VPC for networking, EC2 for compute, S3 for storage, EKS for managed Kubernetes, ECR for container registry, CloudWatch for monitoring and logging, and Secrets Manager for credential management.&lt;/p&gt;

&lt;p&gt;The AWS Certified DevOps Engineer Professional is the most valuable single certification for DevOps roles in Electronic City. It takes time to be ready for this exam — most candidates sit it six to twelve months into their DevOps learning journey rather than immediately. Building toward it from the beginning by learning the AWS services in the context of the pipeline and infrastructure work is the right approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Safely Deprioritize Initially
&lt;/h2&gt;

&lt;p&gt;Given the priority order above, here is what you do not need to focus on in the first phase of your DevOps transition:&lt;/p&gt;

&lt;p&gt;Deep AWS expertise across all services. The breadth of AWS is enormous. You need the services that directly support DevOps workflows. Advanced services like Machine Learning, IoT, and specialized analytics platforms are irrelevant to most DevOps roles and will not appear in your technical interviews.&lt;/p&gt;

&lt;p&gt;Multiple cloud platforms simultaneously. Pick AWS and learn it properly. Azure and GCP knowledge is valuable eventually — particularly for roles at Microsoft-aligned organizations or data-heavy companies. It is not necessary to be competitive for your first DevOps role.&lt;/p&gt;

&lt;p&gt;Every monitoring tool. Prometheus and Grafana are the standard stack for most Electronic City companies. ELK Stack is valuable and worth learning. You do not need deep expertise in every observability platform before your first interview.&lt;/p&gt;

&lt;p&gt;Deep networking theory. You need enough networking knowledge to configure Kubernetes services, VPC subnets, and security groups correctly. You do not need CCNA-level networking depth for most DevOps roles at product companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Portfolio That Actually Gets You Past Screening
&lt;/h2&gt;

&lt;p&gt;Given the priority order above, here is the portfolio that closes the developer-to-DevOps transition in technical interviews at Bangalore companies:&lt;/p&gt;

&lt;p&gt;A complete CI/CD pipeline that builds a real application — use something you have already built — containerizes it with Docker, runs tests in the pipeline, scans the image for vulnerabilities, and deploys to a Kubernetes cluster. This pipeline should live in a real GitHub repository with a Jenkinsfile or GitHub Actions workflow that is version-controlled alongside the application.&lt;/p&gt;

&lt;p&gt;A Kubernetes deployment for the same application with Helm, proper resource limits based on observed resource usage, liveness and readiness probes configured for the application's actual startup behavior, and a HorizontalPodAutoscaler. The Helm chart should have environment-specific values files for at least two environments.&lt;/p&gt;

&lt;p&gt;A Terraform configuration that provisions the cloud infrastructure the above runs on — VPC, EKS cluster, ECR repository, IAM roles with least-privilege permissions. Remote state in S3 with DynamoDB locking. A module structure that separates networking, compute, and registry concerns.&lt;/p&gt;

&lt;p&gt;Documentation in each repository that explains not what the configuration does but why it is structured the way it is. This is what makes the portfolio a conversation starter in interviews rather than a credential check.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Structured Training Fits Into This Roadmap
&lt;/h2&gt;

&lt;p&gt;The roadmap above is clear enough that a disciplined developer could theoretically execute it through self-study. Most do not — for the same reasons that self-study DevOps transitions generally take longer and produce shallower results than structured training.&lt;/p&gt;

&lt;p&gt;The lab environment problem is the most significant. Practicing Kubernetes in minikube and practicing Kubernetes in a real EKS cluster produce different skills. The failure modes are different. The IAM complexity is different. The networking behavior is different. The skills that carry over to technical interviews are the skills built in real environments.&lt;/p&gt;

&lt;p&gt;The guidance problem is the second significant barrier. When a Terraform state conflict produces an error you have not seen before, or when a Kubernetes networking policy is silently dropping traffic in a way that kubectl describe does not immediately explain, having access to someone who has seen that specific failure in production is the difference between thirty minutes of productive investigation and three hours of increasingly frustrated searching.&lt;/p&gt;

&lt;p&gt;The DevOps training and placement program at eMexo Technologies in Electronic City provides both — real AWS lab infrastructure and trainers who bring production DevOps experience to every session. For developers making the transition, the program also provides resume restructuring, LinkedIn optimization for DevOps recruiter searches, mock interview preparation using real Electronic City question banks, and direct recruiter introductions to companies that have hired developers-turned-DevOps-engineers from the program before.&lt;/p&gt;

&lt;p&gt;The free demo class is the most efficient way to evaluate whether this environment produces the kind of preparation the roadmap requires.&lt;/p&gt;

&lt;p&gt;📌 Full program details and demo registration:&lt;br&gt;
&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/&lt;/a&gt;&lt;br&gt;
📞 Call or WhatsApp: +91-9513216462&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Many IT professionals in Bangalore are realizing that DevOps is no longer optional — it’s becoming a core skill for high-growth tech roles.

🌐 https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:46:59 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/many-it-professionals-in-bangalore-are-realizing-that-devops-is-no-longer-optional-its-32nc</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/many-it-professionals-in-bangalore-are-realizing-that-devops-is-no-longer-optional-its-32nc</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/naveen_kumar_60514a494e10" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3807927%2Fdcfe71e1-7cd9-4ed1-8875-b02297d3ce9b.jpg" alt="naveen_kumar_60514a494e10"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/naveen_kumar_60514a494e10/how-to-build-a-complete-devops-pipeline-from-scratch-hands-on-guide-for-developers-in-bangalore-2c3m" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to Build a Complete DevOps Pipeline from Scratch — Hands-On Guide for Developers in Bangalore&lt;/h2&gt;
      &lt;h3&gt;Naveen Kumar ・ Mar 15&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.emexotechnologies.com%2Fwp-content%2Fuploads%2F2020%2F02%2FDevOps-with-AI-Assistance-1.png" height="440" class="m-0" width="730"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer" class="c-link"&gt;
            DevOps Course in Electronic City, Bangalore | eMexo Technologies
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Join the Best DevOps Training in Electronic City Bangalore. Learn CI/CD, Docker, Kubernetes, and Cloud DevOps with DevOps Training and Placement in Electronic City Bangalore.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.emexotechnologies.com%2Fwp-content%2Fuploads%2F2021%2F12%2Fcropped-1-e1640534241731-32x32.jpg" width="32" height="32"&gt;
          emexotechnologies.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>devops</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>career</category>
    </item>
    <item>
      <title>How to Build a Complete DevOps Pipeline from Scratch — Hands-On Guide for Developers in Bangalore</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:35:37 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/how-to-build-a-complete-devops-pipeline-from-scratch-hands-on-guide-for-developers-in-bangalore-2c3m</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/how-to-build-a-complete-devops-pipeline-from-scratch-hands-on-guide-for-developers-in-bangalore-2c3m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ilozu8cdqf01i749fuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ilozu8cdqf01i749fuz.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A practical, code-first walkthrough of building a production-grade CI/CD pipeline using Jenkins, Docker, Kubernetes, and Terraform — the exact stack taught in DevOps Training in Electronic City Bangalore&lt;/p&gt;

&lt;p&gt;If you are a developer in Bangalore who has been writing application code for a while and now wants to understand how that code actually gets built, tested, containerized, deployed, and monitored in a real production environment — this guide is for you.&lt;/p&gt;

&lt;p&gt;We are going to build a complete DevOps pipeline from scratch. Not a toy example. Not a Hello World container. A real, production-pattern pipeline that covers the full journey from code commit to monitored Kubernetes deployment — using the exact toolchain covered in the DevOps Certification Course in Electronic City at eMexo Technologies.&lt;/p&gt;

&lt;p&gt;By the end of this guide you will have built:&lt;br&gt;
✅ A Dockerized application with an optimized multi-stage Dockerfile&lt;br&gt;
✅ A Jenkins CI/CD pipeline triggered by a GitHub webhook&lt;br&gt;
✅ Automated testing integrated into the pipeline&lt;br&gt;
✅ A Docker image pushed to a container registry&lt;br&gt;
✅ A Kubernetes deployment with rolling update strategy&lt;br&gt;
✅ A Helm chart for repeatable, environment-specific deployments&lt;br&gt;
✅ Terraform configuration provisioning the underlying AWS infrastructure&lt;br&gt;
✅ Prometheus and Grafana monitoring the deployed application&lt;br&gt;
Let us build. 🔧&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;br&gt;
Before starting, make sure you have:&lt;/p&gt;

&lt;p&gt;A GitHub account&lt;br&gt;
Docker installed locally&lt;br&gt;
kubectl installed locally&lt;br&gt;
An AWS account (free tier works for most of this)&lt;br&gt;
Terraform installed locally&lt;br&gt;
Basic familiarity with any programming language (we will use a simple Node.js app as our example)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — The Application&lt;/strong&gt;&lt;br&gt;
We need something to deploy. Here is a minimal Node.js Express application. The simplicity is intentional — this guide is about the pipeline, not the application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DevOps Pipeline Demo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;APP_VERSION&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/health&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;healthy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`App running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.test.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;supertest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET /&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;should return 200 and pipeline demo message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DevOps Pipeline Demo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GET /health&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;should return healthy status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/health&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;healthy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"devops-pipeline-demo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node app.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jest --coverage"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^29.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"supertest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2 — The Dockerfile (Multi-Stage Build)&lt;/strong&gt;&lt;br&gt;
A single-stage Dockerfile works but ships everything — including build tools, test dependencies, and development packages — into your production image. A multi-stage build separates build-time dependencies from runtime dependencies, producing a significantly smaller and more secure production image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Stage 1 — Build and Test&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:18-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy dependency files first (layer caching optimization)&lt;/span&gt;
&lt;span class="c"&gt;# Changing app.js won't invalidate this layer if package.json is unchanged&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci &lt;span class="nt"&gt;--only&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production

&lt;span class="c"&gt;# Copy source code&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="c"&gt;# Run tests in build stage&lt;/span&gt;
&lt;span class="c"&gt;# If tests fail, the build fails — nothing proceeds&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;

&lt;span class="c"&gt;# Stage 2 — Production Image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:18-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;production&lt;/span&gt;

&lt;span class="c"&gt;# Security: run as non-root user&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;addgroup &lt;span class="nt"&gt;-g&lt;/span&gt; 1001 &lt;span class="nt"&gt;-S&lt;/span&gt; nodejs &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    adduser &lt;span class="nt"&gt;-S&lt;/span&gt; nodeuser &lt;span class="nt"&gt;-u&lt;/span&gt; 1001 &lt;span class="nt"&gt;-G&lt;/span&gt; nodejs

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy only production dependencies from builder stage&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=nodeuser:nodejs /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=nodeuser:nodejs /app/app.js ./app.js&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder --chown=nodeuser:nodejs /app/package.json ./package.json&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nodeuser&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="c"&gt;# Health check built into the image&lt;/span&gt;
&lt;span class="k"&gt;HEALTHCHECK&lt;/span&gt;&lt;span class="s"&gt; --interval=30s --timeout=3s --start-period=5s --retries=3 \&lt;/span&gt;
  CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "app.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters in a real DevOps environment:&lt;br&gt;
The multi-stage build pattern is a production standard taught in every serious DevOps Course in Electronic City. The final image contains only what is needed to run the application — no build tools, no test frameworks, no development dependencies. Smaller image = faster pull times = lower attack surface.&lt;br&gt;
Build and test locally first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;docker build -t devops-pipeline-demo:local .
docker run -p 3000:3000 devops-pipeline-demo:local
curl http://localhost:3000/health
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;:&lt;span class="s2"&gt;"healthy"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3 — The Jenkins Pipeline (Jenkinsfile)&lt;br&gt;
Jenkins reads pipeline configuration from a Jenkinsfile in the root of your repository. This makes your pipeline version-controlled code — not a fragile web UI configuration that can be accidentally deleted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight groovy"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Jenkinsfile&lt;/span&gt;
&lt;span class="n"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt;

    &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Registry configuration — use your actual registry&lt;/span&gt;
        &lt;span class="n"&gt;DOCKER_REGISTRY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'your-registry-url'&lt;/span&gt;
        &lt;span class="n"&gt;IMAGE_NAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'devops-pipeline-demo'&lt;/span&gt;
        &lt;span class="n"&gt;IMAGE_TAG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"${BUILD_NUMBER}-${GIT_COMMIT[0..7]}"&lt;/span&gt;
        &lt;span class="n"&gt;FULL_IMAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"&lt;/span&gt;

        &lt;span class="c1"&gt;// Kubernetes namespace targets&lt;/span&gt;
        &lt;span class="n"&gt;STAGING_NAMESPACE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'staging'&lt;/span&gt;
        &lt;span class="n"&gt;PRODUCTION_NAMESPACE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'production'&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;stages&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Checkout'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;checkout&lt;/span&gt; &lt;span class="n"&gt;scm&lt;/span&gt;
                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Building commit: ${GIT_COMMIT}"&lt;/span&gt;
                    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Branch: ${GIT_BRANCH}"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Code Quality Check'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s1"&gt;'npm install'&lt;/span&gt;
                &lt;span class="c1"&gt;// ESLint for code quality (add .eslintrc.js to your repo)&lt;/span&gt;
                &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s1"&gt;'npx eslint . --ext .js || true'&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Security Scan — Dependencies'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Audit npm dependencies for known vulnerabilities&lt;/span&gt;
                &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s1"&gt;'npm audit --audit-level=high'&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Build Docker Image'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Tests run inside the Dockerfile builder stage&lt;/span&gt;
                    &lt;span class="c1"&gt;// If tests fail, docker build fails — pipeline stops here&lt;/span&gt;
                    &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FULL_IMAGE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'--target production .'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Built image: ${FULL_IMAGE}"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Security Scan — Container Image'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Trivy scans the built image for OS and library vulnerabilities&lt;/span&gt;
                &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"""
                    trivy image \
                        --exit-code 1 \
                        --severity HIGH,CRITICAL \
                        --no-progress \
                        ${FULL_IMAGE}
                """&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Push to Registry'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withRegistry&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://${DOCKER_REGISTRY}"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                                       &lt;span class="s1"&gt;'docker-registry-credentials'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                        &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FULL_IMAGE&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                        &lt;span class="c1"&gt;// Also tag as latest for the branch&lt;/span&gt;
                        &lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FULL_IMAGE&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'latest'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;}&lt;/span&gt;
                    &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Pushed: ${FULL_IMAGE}"&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Deploy to Staging'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"""
                        helm upgrade --install \
                            devops-demo-staging \
                            ./helm/devops-demo \
                            --namespace ${STAGING_NAMESPACE} \
                            --create-namespace \
                            --set image.repository=${DOCKER_REGISTRY}/${IMAGE_NAME} \
                            --set image.tag=${IMAGE_TAG} \
                            --set environment=staging \
                            --wait \
                            --timeout 5m
                    """&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Smoke Tests — Staging'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Wait for deployment to be ready&lt;/span&gt;
                    &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"kubectl rollout status deployment/devops-demo-staging \
                        -n ${STAGING_NAMESPACE} --timeout=120s"&lt;/span&gt;

                    &lt;span class="c1"&gt;// Run smoke tests against staging&lt;/span&gt;
                    &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"""
                        STAGING_URL=\$(kubectl get svc devops-demo-staging \
                            -n ${STAGING_NAMESPACE} \
                            -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

                        curl -f http://\${STAGING_URL}:3000/health || exit 1
                        echo "Staging smoke tests passed"
                    """&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Deploy to Production'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;branch&lt;/span&gt; &lt;span class="s1"&gt;'main'&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// Manual approval gate for production deployments&lt;/span&gt;
                &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="nl"&gt;message:&lt;/span&gt; &lt;span class="s1"&gt;'Deploy to production?'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                      &lt;span class="nl"&gt;ok:&lt;/span&gt; &lt;span class="s1"&gt;'Deploy'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                      &lt;span class="nl"&gt;submitter:&lt;/span&gt; &lt;span class="s1"&gt;'admin,devops-lead'&lt;/span&gt;

                &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"""
                        helm upgrade --install \
                            devops-demo-prod \
                            ./helm/devops-demo \
                            --namespace ${PRODUCTION_NAMESPACE} \
                            --create-namespace \
                            --set image.repository=${DOCKER_REGISTRY}/${IMAGE_NAME} \
                            --set image.tag=${IMAGE_TAG} \
                            --set environment=production \
                            --set replicaCount=3 \
                            --wait \
                            --timeout 10m
                    """&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Pipeline succeeded — ${FULL_IMAGE} deployed"&lt;/span&gt;
            &lt;span class="c1"&gt;// Add Slack/email notification here&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;failure&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Pipeline failed at stage: ${currentBuild.result}"&lt;/span&gt;
            &lt;span class="c1"&gt;// Add failure notification here&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;always&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Clean up local Docker images to free disk space&lt;/span&gt;
            &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="s2"&gt;"docker rmi ${FULL_IMAGE} || true"&lt;/span&gt;
            &lt;span class="n"&gt;cleanWs&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key pipeline design decisions explained:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔒 &lt;strong&gt;Security scanning at two stages&lt;/strong&gt; — dependency audit before build, container image scan after build. This is the DevSecOps pattern taught in the &lt;strong&gt;DevOps Training in Electronic City&lt;/strong&gt; curriculum at eMexo Technologies.&lt;/p&gt;

&lt;p&gt;🏷️ &lt;strong&gt;Image tagging strategy&lt;/strong&gt; — &lt;code&gt;BUILD_NUMBER-GIT_COMMIT_SHORT&lt;/code&gt; gives you a tag that is both sequential (for ordering) and traceable (for debugging). Never tag production images as &lt;code&gt;latest&lt;/code&gt; only.&lt;/p&gt;

&lt;p&gt;✋ &lt;strong&gt;Manual approval gate&lt;/strong&gt; — production deployments require human approval. This is a non-negotiable pattern for production pipelines at Electronic City's enterprise companies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4 — The Helm Chart
&lt;/h2&gt;

&lt;p&gt;Helm is the package manager for Kubernetes. A Helm chart defines your application's Kubernetes resources as templates — with values that can be overridden per environment. This is how you deploy the same application to staging and production with different configurations without duplicating YAML files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm/devops-demo/
├── Chart.yaml
├── values.yaml
├── values-staging.yaml
├── values-production.yaml
└── templates/
    ├── deployment.yaml
    ├── service.yaml
    ├── hpa.yaml
    ├── configmap.yaml
    └── _helpers.tpl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Chart.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v2&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;devops-demo&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DevOps Pipeline Demo Application&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;appVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# values.yaml — default values&lt;/span&gt;
&lt;span class="na"&gt;replicaCount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;

&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your-registry/devops-pipeline-demo&lt;/span&gt;
  &lt;span class="na"&gt;pullPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;IfNotPresent&lt;/span&gt;
  &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latest"&lt;/span&gt;

&lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;LoadBalancer&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;

&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;500m&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;256Mi&lt;/span&gt;
  &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100m&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;128Mi&lt;/span&gt;

&lt;span class="na"&gt;autoscaling&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;minReplicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;maxReplicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;targetCPUUtilizationPercentage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;70&lt;/span&gt;

&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;development&lt;/span&gt;

&lt;span class="c1"&gt;# Health check configuration&lt;/span&gt;
&lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
  &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

&lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
  &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# templates/deployment.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;include "devops-demo.fullname" .&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- include "devops-demo.labels" . | nindent 4&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.replicaCount&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- include "devops-demo.selectorLabels" . | nindent 6&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RollingUpdate&lt;/span&gt;
    &lt;span class="na"&gt;rollingUpdate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Never have zero pods during deployment&lt;/span&gt;
      &lt;span class="na"&gt;maxUnavailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
      &lt;span class="c1"&gt;# Allow one extra pod during rollout&lt;/span&gt;
      &lt;span class="na"&gt;maxSurge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- include "devops-demo.selectorLabels" . | nindent 8&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
      &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Force pod restart when configmap changes&lt;/span&gt;
        &lt;span class="na"&gt;checksum/config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;include (print $.Template.BasePath&lt;/span&gt;
                           &lt;span class="nv"&gt;"/configmap.yaml") . | sha256sum&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Security context — run as non-root&lt;/span&gt;
      &lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;runAsNonRoot&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="na"&gt;runAsUser&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1001&lt;/span&gt;
        &lt;span class="na"&gt;fsGroup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1001&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Chart.Name&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;.Values.image.repository&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}:{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;.Values.image.tag&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
          &lt;span class="na"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.image.pullPolicy&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
              &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
          &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.environment&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;APP_VERSION&lt;/span&gt;
              &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.image.tag&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
          &lt;span class="na"&gt;livenessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- toYaml .Values.livenessProbe | nindent 12&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
          &lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- toYaml .Values.readinessProbe | nindent 12&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
          &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- toYaml .Values.resources | nindent 12&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5 — Terraform for AWS Infrastructure&lt;/strong&gt;&lt;br&gt;
Before Kubernetes can run your application, it needs infrastructure to run on. Terraform provisions that infrastructure as code — repeatably, versionably, and without clicking through the AWS console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="c1"&gt;# main.tf — EKS Cluster Infrastructure&lt;/span&gt;

&lt;span class="k"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;gt;= 1.0"&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hashicorp/aws"&lt;/span&gt;
      &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 5.0"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;# Remote state — critical for team environments&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"s3"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"your-terraform-state-bucket"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"devops-demo/terraform.tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ap-south-1"&lt;/span&gt;
    &lt;span class="nx"&gt;encrypt&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;dynamodb_table&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform-state-lock"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_region&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# VPC&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="s2"&gt;"vpc"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform-aws-modules/vpc/aws"&lt;/span&gt;
  &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 5.0"&lt;/span&gt;

  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;project_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-vpc"&lt;/span&gt;
  &lt;span class="nx"&gt;cidr&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"10.0.0.0/16"&lt;/span&gt;

  &lt;span class="nx"&gt;azs&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"ap-south-1a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ap-south-1b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ap-south-1c"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nx"&gt;private_subnets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"10.0.1.0/24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"10.0.2.0/24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"10.0.3.0/24"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nx"&gt;public_subnets&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"10.0.101.0/24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"10.0.102.0/24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"10.0.103.0/24"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="nx"&gt;enable_nat_gateway&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="nx"&gt;single_nat_gateway&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="nx"&gt;enable_dns_hostnames&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

  &lt;span class="c1"&gt;# Required tags for EKS to discover subnets&lt;/span&gt;
  &lt;span class="nx"&gt;public_subnet_tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"kubernetes.io/role/elb"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;private_subnet_tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"kubernetes.io/role/internal-elb"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# EKS Cluster&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="s2"&gt;"eks"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform-aws-modules/eks/aws"&lt;/span&gt;
  &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 20.0"&lt;/span&gt;

  &lt;span class="nx"&gt;cluster_name&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;project_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-cluster"&lt;/span&gt;
  &lt;span class="nx"&gt;cluster_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1.29"&lt;/span&gt;

  &lt;span class="nx"&gt;vpc_id&lt;/span&gt;                         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;
  &lt;span class="nx"&gt;subnet_ids&lt;/span&gt;                     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnets&lt;/span&gt;
  &lt;span class="nx"&gt;cluster_endpoint_public_access&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

  &lt;span class="c1"&gt;# Managed node groups&lt;/span&gt;
  &lt;span class="nx"&gt;eks_managed_node_groups&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;general&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;instance_types&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"t3.medium"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="nx"&gt;min_size&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
      &lt;span class="nx"&gt;max_size&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
      &lt;span class="nx"&gt;desired_size&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

      &lt;span class="nx"&gt;labels&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"general"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Variables&lt;/span&gt;
&lt;span class="k"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"aws_region"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"AWS region"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ap-south-1"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"project_name"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Project name prefix for all resources"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"devops-demo"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Outputs&lt;/span&gt;
&lt;span class="k"&gt;output&lt;/span&gt; &lt;span class="s2"&gt;"cluster_endpoint"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;output&lt;/span&gt; &lt;span class="s2"&gt;"cluster_name"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_name&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the infrastructure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;terraform init
terraform plan -out=tfplan
terraform apply tfplan

&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Configure kubectl to use the new cluster
&lt;span class="go"&gt;aws eks update-kubeconfig \
  --region ap-south-1 \
  --name devops-demo-cluster
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 6 — Prometheus and Grafana Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A pipeline that deploys without monitoring is half a pipeline. Prometheus and Grafana give you visibility into what happens after deployment.&lt;br&gt;
Install the kube-prometheus-stack — the standard production monitoring stack — via Helm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Add the prometheus-community Helm repository
&lt;span class="go"&gt;helm repo add prometheus-community \
  https://prometheus-community.github.io/helm-charts
helm repo update

&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Install the &lt;span class="nb"&gt;complete &lt;/span&gt;monitoring stack
&lt;span class="go"&gt;helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  --set grafana.adminPassword='your-secure-password' \
  --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a ServiceMonitor to tell Prometheus to scrape your application's metrics:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# templates/servicemonitor.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;monitoring.coreos.com/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ServiceMonitor&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;include "devops-demo.fullname" .&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- include "devops-demo.labels" . | nindent 4&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt;- include "devops-demo.selectorLabels" . | nindent 6&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;endpoints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
      &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/metrics&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add basic Prometheus metrics to your Node.js application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Add to app.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prom-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Collect default Node.js metrics&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collectDefaultMetrics&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Custom HTTP request counter&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;httpRequestsTotal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http_requests_total&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;help&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Total number of HTTP requests&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;labelNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;route&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status_code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Request duration histogram&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;httpRequestDuration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Histogram&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http_request_duration_seconds&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;help&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HTTP request duration in seconds&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;labelNames&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;method&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;route&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;buckets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.005&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Metrics endpoint for Prometheus scraping&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/metrics&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contentType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Middleware to record metrics for all routes&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;httpRequestDuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startTimer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;finish&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;httpRequestsTotal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;status_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Access Grafana to see your dashboards:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;kubectl port-forward svc/monitoring-grafana 3001:80 -n monitoring
&lt;/span&gt;&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Open http://localhost:3001
&lt;span class="gp"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Default credentials: admin / your-secure-password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import dashboard ID 1860 (Node Exporter Full) and 6417 (Kubernetes Cluster Monitoring) from grafana.com for instant production-grade dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7 — The GitHub Webhook&lt;/strong&gt;&lt;br&gt;
Connect GitHub to Jenkins so every push triggers your pipeline automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# In Jenkins:
# 1. Install the GitHub plugin (Manage Jenkins → Plugins)
# 2. Create a GitHub Personal Access Token with repo and admin:repo_hook scopes
# 3. Add the token to Jenkins credentials (ID: github-token)
# 4. In your Pipeline job: check "GitHub hook trigger for GITScm polling"

# In GitHub repository settings:
# Settings → Webhooks → Add webhook
# Payload URL: http://your-jenkins-url/github-webhook/
# Content type: application/json
# Events: Just the push event
# Active: checked
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now push any commit to your repository and watch the complete pipeline execute automatically — from code push to monitored Kubernetes deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What You Have Built&lt;/strong&gt;&lt;br&gt;
Let us review what this pipeline does end-to-end:&lt;br&gt;
On every push to any branch:&lt;/p&gt;

&lt;p&gt;📥 GitHub webhook triggers Jenkins&lt;br&gt;
🔍 Code quality check runs ESLint&lt;br&gt;
🔒 npm audit scans for vulnerable dependencies&lt;br&gt;
🐳 Multi-stage Docker build runs tests internally — build fails if tests fail&lt;br&gt;
🔒 Trivy scans the built image for HIGH and CRITICAL CVEs&lt;br&gt;
📤 Image pushed to registry with build-number + commit-hash tag&lt;br&gt;
☸️ Helm deploys to staging namespace with environment-specific values&lt;br&gt;
🔥 Smoke tests validate the staging deployment is healthy&lt;br&gt;
📊 Prometheus scrapes metrics, Grafana dashboards update in real time&lt;/p&gt;

&lt;p&gt;On push to main branch only:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✋ Manual approval gate — a human confirms production deployment&lt;/li&gt;
&lt;li&gt;☸️ Helm deploys to production with 3 replicas and zero-downtime rolling update
This is a real production-pattern pipeline. This is what DevOps Training in Electronic City at eMexo Technologies builds with students in hands-on lab sessions — not a simplified demo, but the actual architecture that Electronic City's top engineering teams run.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Taking This Further — Structured DevOps Training in Electronic City&lt;/strong&gt;&lt;br&gt;
Building this pipeline from scratch as a self-guided exercise teaches you what the pieces are. What it cannot easily give you is the experience of debugging when things break — and in real DevOps environments, things always break in ways that documentation does not cover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Best DevOps Training in Electronic City at eMexo Technologies gives you:&lt;/strong&gt;&lt;br&gt;
🔧 Dedicated lab infrastructure — real AWS environments, real Kubernetes clusters, real Jenkins instances. Not a local Docker Desktop simulation — actual cloud infrastructure.&lt;br&gt;
👨‍🏫 Trainer with 8+ years enterprise DevOps experience — someone who has debugged Jenkins webhook failures at 2am in production, not someone who learned Jenkins from a tutorial last year.&lt;br&gt;
🏅 Certification preparation — AWS Certified DevOps Engineer – Professional, Certified Kubernetes Administrator (CKA), Docker Certified Associate (DCA), and HashiCorp Terraform Associate.&lt;br&gt;
💼 DevOps Training and Placement in Electronic City — resume positioning for developers making a DevOps transition, mock technical interviews using real question banks from Electronic City hiring managers, and direct recruiter referrals to companies actively hiring.&lt;br&gt;
📅 Flexible batch options — weekday evening, weekend, fast-track, and fully live online — designed for working developers who are upskilling without leaving their current role.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What To Do Next&lt;/strong&gt;&lt;br&gt;
If you have followed this guide and built the pipeline locally — you have already demonstrated to yourself that you can do this. The next step is doing it with real enterprise-scale infrastructure and the mentorship that accelerates the learning curve significantly.&lt;/p&gt;

&lt;p&gt;📌 Explore the full curriculum and register for a free demo class:&lt;br&gt;
&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📞 Call / WhatsApp: +91-9513216462&lt;br&gt;
The free demo covers live Docker, Jenkins, and Kubernetes demonstrations in the actual lab environment. Attend before you commit to anything.&lt;/p&gt;

&lt;p&gt;Found this useful? Drop a ❤️ and share it with a developer who has been meaning to get into DevOps.&lt;br&gt;
Questions about any specific step — Jenkins webhook configuration, Helm chart structure, Terraform state management — drop them in the comments. Happy to go deeper on any section.&lt;/p&gt;

&lt;p&gt;eMexo Technologies is a leading DevOps Training Institute in Electronic City, Bangalore — offering hands-on certification training with 100% placement support for developers, freshers, and career-gap candidates.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>career</category>
    </item>
    <item>
      <title>How DevOps Engineers Build a CI/CD Pipeline Using Docker, Jenkins and Kubernetes</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Sun, 08 Mar 2026 12:14:46 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/how-devops-engineers-build-a-cicd-pipeline-using-docker-jenkins-and-kubernetes-4pgg</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/how-devops-engineers-build-a-cicd-pipeline-using-docker-jenkins-and-kubernetes-4pgg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh87dhu0h2kq8ils9sxb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh87dhu0h2kq8ils9sxb.jpg" alt=" " width="800" height="532"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The Problem Developers Face&lt;/strong&gt;&lt;br&gt;
Many development teams still deploy applications manually.&lt;br&gt;
This usually creates problems like:&lt;br&gt;
• inconsistent environments&lt;br&gt;
• slow deployment cycles&lt;br&gt;
• production errors&lt;br&gt;
• difficult rollback processes&lt;br&gt;
This is where DevOps practices and CI/CD pipelines become essential.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What a Modern DevOps Workflow Looks Like&lt;/strong&gt;&lt;br&gt;
A typical DevOps workflow includes several stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Code → Build → Test → Containerize → Deploy → Monitor

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each stage is automated using different tools.&lt;br&gt;
A standard DevOps stack used in many companies includes:&lt;br&gt;
✅ Git&lt;br&gt;
✅ Jenkins&lt;br&gt;
✅ Docker&lt;br&gt;
✅ Kubernetes&lt;br&gt;
✅ Terraform&lt;br&gt;
✅ Cloud platforms (AWS / Azure)&lt;br&gt;
Learning how these tools work together is a key part of DevOps Training in Electronic City Bangalore.&lt;br&gt;
*&lt;em&gt;More details here:&lt;br&gt;
&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training and 100% Placement in Electronic City&lt;/a&gt; *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Version Control with Git&lt;/strong&gt;&lt;br&gt;
Everything starts with source code.&lt;br&gt;
Developers push code to a Git repository.&lt;br&gt;
Example workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "feature update"
git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once code is pushed, the CI/CD pipeline gets triggered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Continuous Integration with Jenkins&lt;/strong&gt;&lt;br&gt;
Jenkins automatically builds and tests the application.&lt;br&gt;
Example Jenkins pipeline stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stage 1 → Pull code from Git
Stage 2 → Build application
Stage 3 → Run automated tests
Stage 4 → Build Docker image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures every commit is tested automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Containerization Using Docker&lt;/strong&gt;&lt;br&gt;
Docker packages applications and dependencies into containers.&lt;br&gt;
Example Dockerfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm","start"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Containers ensure the application runs the same way in every environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Deployment Using Kubernetes&lt;/strong&gt;&lt;br&gt;
Kubernetes manages container deployment and scaling.&lt;br&gt;
Basic deployment example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f deployment.yaml
kubectl get pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kubernetes automatically handles:&lt;br&gt;
✅ container scaling&lt;br&gt;
✅ load balancing&lt;br&gt;
✅ self-healing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why DevOps Skills Are in High Demand&lt;/strong&gt;&lt;br&gt;
Companies adopting cloud infrastructure need engineers who understand:&lt;br&gt;
✅ CI/CD automation&lt;br&gt;
✅ container orchestration&lt;br&gt;
✅ infrastructure automation&lt;br&gt;
✅ monitoring systems&lt;br&gt;
Because of this, DevOps engineers are among the most demanded roles in modern software companies.&lt;br&gt;
Many developers start learning these tools through structured DevOps Courses in Electronic City Bangalore where they can practice building real CI/CD pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
DevOps is not just about tools — it's about automating the entire software delivery process.&lt;br&gt;
Learning CI/CD pipelines, Docker, and Kubernetes can significantly improve a developer’s career opportunities.&lt;br&gt;
If you want to explore a complete learning path covering these tools, you can check:&lt;br&gt;
🔗&lt;strong&gt;Explore the complete course details here:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.emexotechnologies.com/courses/devops-training-in-electronic-city-bangalore/" rel="noopener noreferrer"&gt;DevOps Training in Electronic City Bangalore&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>jenkins</category>
    </item>
    <item>
      <title>🚀 Azure DevOps Training Reviews in Electronic City Bangalore – Real Student Feedback &amp; Placement Success</title>
      <dc:creator>Naveen Kumar</dc:creator>
      <pubDate>Thu, 05 Mar 2026 12:26:11 +0000</pubDate>
      <link>https://dev.to/naveen_kumar_60514a494e10/azure-devops-training-reviews-in-electronic-city-bangalore-real-student-feedback-placement-34jn</link>
      <guid>https://dev.to/naveen_kumar_60514a494e10/azure-devops-training-reviews-in-electronic-city-bangalore-real-student-feedback-placement-34jn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbwokac4ctbm5lavooq3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbwokac4ctbm5lavooq3.jpg" alt=" " width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  **⭐ Introduction
&lt;/h2&gt;

&lt;p&gt;**Before joining a DevOps course, most learners search for &lt;a href="https://www.emexotechnologies.com/courses/microsoft-azure-devops-training-course-az-400/" rel="noopener noreferrer"&gt;Azure DevOps Training Reviews in Electronic City&lt;/a&gt; Bangalore to understand the training quality, syllabus coverage, and placement support offered by institutes.&lt;br&gt;
Reading genuine student feedback and AZ-400 course reviews helps candidates select a job-oriented training program that delivers practical DevOps skills and certification preparation.&lt;br&gt;
Among the institutes in Electronic City, many students mention eMexo Technologies for its industry-focused Azure DevOps training, real-time project exposure, and structured placement assistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  **📊 Why Students Search for Azure DevOps Reviews
&lt;/h2&gt;

&lt;p&gt;**Students and working professionals usually look for trusted learning environments and proven results before enrolling in a certification program.&lt;br&gt;
Common factors learners evaluate include:&lt;br&gt;
✅ Training quality and teaching methodology&lt;br&gt;
✅ Hands-on DevOps tools and automation labs&lt;br&gt;
✅ Azure DevOps certification preparation&lt;br&gt;
✅ Real-time CI/CD pipeline projects&lt;br&gt;
✅ Placement guidance and career support&lt;br&gt;
These factors often appear in Best Azure DevOps Institute Reviews Electronic City, helping learners compare institutes and make informed decisions.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  🧑‍💻 Skills Students Learn in AZ-400 Training
&lt;/h2&gt;

&lt;p&gt;**According to multiple &lt;a href="https://www.emexotechnologies.com/courses/microsoft-azure-devops-training-course-az-400/" rel="noopener noreferrer"&gt;AZ-400 Student Feedback Electronic City&lt;/a&gt;, candidates gain practical knowledge in important DevOps practices such as:&lt;br&gt;
🔹 Continuous Integration and Continuous Deployment (CI/CD)&lt;br&gt;
🔹 Azure Pipelines and Release Management&lt;br&gt;
🔹 Git Repositories and Version Control&lt;br&gt;
🔹 Infrastructure as Code (ARM Templates / Terraform)&lt;br&gt;
🔹 Monitoring, Logging, and DevOps Lifecycle Automation&lt;br&gt;
These skills prepare learners for real-world DevOps environments used in modern IT companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  **💼 Career Opportunities After Azure DevOps Training
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
After completing a job-oriented DevOps training program, learners can apply for several in-demand roles including:&lt;br&gt;
✅ DevOps Engineer&lt;br&gt;
✅ Azure Cloud Engineer&lt;br&gt;
✅ Site Reliability Engineer (SRE)&lt;br&gt;
✅ Release Manager&lt;br&gt;
✅ Cloud Automation Engineer&lt;br&gt;
This is why many professionals search for Azure DevOps Job Oriented Training with Placement Support when choosing a training institute.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  🏆 Why Students Recommend eMexo Technologies
&lt;/h2&gt;

&lt;p&gt;**Based on several Microsoft Azure DevOps Coaching Reviews Bangalore, students highlight the following advantages:&lt;br&gt;
✅ Industry-aligned Microsoft Azure DevOps certification training&lt;br&gt;
✅ Trainers with real DevOps project experience&lt;br&gt;
✅ Hands-on labs and CI/CD pipeline implementation&lt;br&gt;
✅ Resume building and interview preparation&lt;br&gt;
✅ Placement assistance for freshers and professionals&lt;br&gt;
✅ Flexible weekend and evening batch options&lt;br&gt;
These features make it one of the preferred options when learners search for Best Azure DevOps Institute Reviews Electronic City.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  📞 Seat Confirmation &amp;amp; Contact Details
&lt;/h2&gt;

&lt;p&gt;**📞 Please call and confirm seat availability before visiting.&lt;br&gt;
Batch schedules and certification slots may change.&lt;br&gt;
📞 Call to Confirm Seat: +91 9513216462&lt;br&gt;
📧 Email: &lt;a href="mailto:info@emexotechnologies.com"&gt;info@emexotechnologies.com&lt;/a&gt;&lt;br&gt;
📍 Location: eMexo Technologies, Electronic City, Bangalore&lt;br&gt;
👉 Register for the Azure Devops Training Orientation at Emexo Technologies&lt;br&gt;
&lt;a href="https://www.emexotechnologies.com/courses/microsoft-azure-devops-training-course-az-400/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azuredevops</category>
      <category>microsoft</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
