<?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: Nimesh Kulkarni</title>
    <description>The latest articles on DEV Community by Nimesh Kulkarni (@nimesh_kulkarni_2f7a2057e).</description>
    <link>https://dev.to/nimesh_kulkarni_2f7a2057e</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%2F3604005%2Fee2ed6a7-f654-40ce-a92e-2756f8d71f73.jpg</url>
      <title>DEV Community: Nimesh Kulkarni</title>
      <link>https://dev.to/nimesh_kulkarni_2f7a2057e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nimesh_kulkarni_2f7a2057e"/>
    <language>en</language>
    <item>
      <title>Solar-App Deployment: From Node.js to Multi-Cloud CI/CD</title>
      <dc:creator>Nimesh Kulkarni</dc:creator>
      <pubDate>Mon, 10 Nov 2025 11:37:19 +0000</pubDate>
      <link>https://dev.to/nimesh_kulkarni_2f7a2057e/solar-app-deployment-from-nodejs-to-multi-cloud-cicd-4g9</link>
      <guid>https://dev.to/nimesh_kulkarni_2f7a2057e/solar-app-deployment-from-nodejs-to-multi-cloud-cicd-4g9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Deployment Strategy&lt;/strong&gt;&lt;/p&gt;

&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%2F0msia99tyu2c2yju33cm.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%2F0msia99tyu2c2yju33cm.png" alt="Deployment Plan" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
This project takes a simple Node.js “Solar System” app and turns it into a full DevSecOps pipeline. The goal wasn’t just to make the app run, but to automate everything around it builds, testing, security scans, containerization, and multi-cloud deployment. Every commit triggers checks for quality and security, builds a Docker image, and deploys it to real environments like AWS EC2, Kubernetes, and even AWS Lambda. It’s a handson journey from writing JavaScript to running a production-style CI/CD system end-to-end.&lt;/p&gt;

&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%2Fy7c8w5tp2kd8hw5ijxl6.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%2Fy7c8w5tp2kd8hw5ijxl6.png" alt="Jenkins CICD Dashboard" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js App Basics:&lt;/strong&gt;&lt;br&gt;
Create a tiny Express app with app.js (server + Mongo), app.controller.js (logic), client.js (fetch UI), and app-test.js (Mocha tests).&lt;br&gt;
Run locally with npm install &amp;amp;&amp;amp; npm test &amp;amp;&amp;amp; npm start on port 3000; fix Mongo creds via envs if tests fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Containerization:&lt;/strong&gt;&lt;br&gt;
Write a Dockerfile from node:18-alpine, copy package*.json, npm install, copy source, EXPOSE 3000, CMD ["npm","start"].&lt;br&gt;
Pass &lt;code&gt;MONGO_URI/MONGO_USERNAME/MONGO_PASSWORD&lt;/code&gt; via ENV or runtime; build+run: &lt;code&gt;docker build -t solar-app&lt;/code&gt; . &amp;amp;&amp;amp; &lt;code&gt;docker run -p 3000:3000 solar-app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standing Up Jenkins:&lt;/strong&gt;&lt;br&gt;
Verify host setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v &amp;amp;&amp;amp; npm -v &amp;amp;&amp;amp; systemctl status jenkins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install NodeJS Plugin → add tool in Global Tool Configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organization Folder Automation:&lt;/strong&gt;&lt;br&gt;
Connect Jenkins to GitHub &amp;amp; enable auto webhooks.&lt;br&gt;
Create Org Folder → auto discovers repos, branches, PRs with &lt;code&gt;Jenkinsfile&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add the First Jenkinsfile:&lt;/strong&gt;&lt;br&gt;
Push branch feature/enabling-cicd with simple pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tools { nodejs 'nodejs-22-6-0' }
sh "node -v &amp;amp;&amp;amp; npm -v"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&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%2Fqdhdu83ohf940xmllx1b.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%2Fqdhdu83ohf940xmllx1b.png" alt="JENKINSFILE" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency Installation Stage:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --no-audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify node_modules exists in workspace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependency Security Scans:&lt;/strong&gt;&lt;br&gt;
Critical-level npm audit + OWASP Dep-Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm audit --audit-level=critical

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

&lt;/div&gt;



&lt;p&gt;Run both in parallel + fail build on critical issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publishing Security Reports:&lt;/strong&gt;&lt;br&gt;
Publish HTML + JUnit results in Jenkins.&lt;br&gt;
If &lt;em&gt;styling&lt;/em&gt; breaks → adjust Jenkins CSP (to allow CSS).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unit Testing Pipeline:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set MONGO_URI and secure creds using Jenkins credentials:
npm test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Archive JUnit report: test-results.xml&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pipeline Hardening:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Global options:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;disableResume()
disableConcurrentBuilds abortPrevious: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;expected:&lt;br&gt;
&lt;code&gt;Stage options: timestamps(), retry(2), timeout(...)&lt;br&gt;
**Code Coverage Stage:**&lt;br&gt;
npm run coverage&lt;/code&gt;&lt;br&gt;
&lt;em&gt;Wrap with:&lt;/em&gt;&lt;br&gt;
&lt;code&gt;catchError(...)&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Publish coverage HTML: coverage/lcov-report/index.html:&lt;br&gt;
&lt;strong&gt;Deployment Paths:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2: docker run + /live check&lt;/li&gt;
&lt;li&gt;Kubernetes: GitOps deploy via ArgoCD&lt;/li&gt;
&lt;li&gt;Lambda: deploy with serverless-http &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Post-Build &amp;amp; Notifications:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Archive test, coverage, security reports&lt;/li&gt;
&lt;li&gt;Upload artifacts to S3&lt;/li&gt;
&lt;li&gt;Notify on Slack via webhook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting:&lt;/strong&gt;&lt;br&gt;
Mongo errors → check env vars + Jenkins creds&lt;br&gt;
Audit fails → npm audit fix or upgrade deps&lt;br&gt;
Coverage low → improve tests or adjust thresholds&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrap-Up:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Push → test → scan → package → deploy → notify.
&lt;/h2&gt;

&lt;p&gt;Next: DAST (OWASP ZAP), integration tests, policy-as-code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Result&lt;/strong&gt;&lt;br&gt;
A zero-touch, security-focused pipeline delivering to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Docker&lt;/li&gt;
&lt;li&gt;✅ AWS EC2&lt;/li&gt;
&lt;li&gt;✅ Kubernetes + ArgoCD&lt;/li&gt;
&lt;li&gt;✅ AWS Lambda&lt;/li&gt;
&lt;li&gt;✅ Jenkins quality gates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PROFF IMAGES: ON GITHUB&lt;br&gt;
&lt;a href="https://github.com/GitNimay/solar-system-devops-project-1" rel="noopener noreferrer"&gt;GITHUB&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/nimesh-kulkarni-526401266/" rel="noopener noreferrer"&gt;LINKEDIN &lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;a href="https://notes.kodekloud.com/docs/Jenkins-Pipelines/Introduction/Course-Introduction" rel="noopener noreferrer"&gt;GUIDE &amp;amp; REFERANCE&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank You😊&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>node</category>
      <category>devops</category>
      <category>aws</category>
      <category>cicd</category>
    </item>
  </channel>
</rss>
