# Jenkins in One shot .

* Introduction to Jenkins & CI CD
    
* Je[nkin](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=432s)s Setup On VM (AWS EC2)
    
* Jen[kins](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=840s) Installation
    
* Jenki[ns UI](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=1347s)/Dashboard / Jobs
    
* Jenkin[s Fre](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=1718s)estyle Project
    
* 📍 Declara[tive](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=2170s) Pipeline
    
* Jenkins [Agent](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=2550s)s (Multi-Node)
    
* Declarati[ve pi](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=3440s)peline Demo
    
* Shared Lib[raries](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=6055s)
    
* User Manage[ment In](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=7238s) Jenkins (Role Based)
    
* CI/CD Projec[t with](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=7698s) Kubernetes, ArgoCD, Prometheus
    
* Shared Librar[y Realt](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=14242s)ime Usecase + Demo
    
* DevSecOps with [OWASP,](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=17348s) Trivy, Sonarqube
    
* Email Notificati[on on P](https://www.youtube.com/watch?v=XaSdKR2fOU4&t=21309s)ipeline Fail/Pass
    
    # Introduction to Jenkins & CI CD
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748554913999/70c8af88-3511-40d1-a2ed-3977bab6c7a3.png align="center")

Jenkins hotha kya hey , jenkins ko samajney key pehley aapko samajna padtha hey CI & CD kya hotah hey

Dekho kaisa rehtha hey har ek org mey project hey - github aek tool hey project ko store kar sakthey hey scm key liye use hotha hey , ae code developer likhey dal detha hey github mey - ae docker pey build hotha hey aur k8s or ec2 mey deploy hotha hey - ek baar deploy hogaya usko monitor karthey hey prometheus sey

jab b developer code push karega phir sey build , test , deploy and monitor hoyega ae cheez continusly honi chahiye

* aek ek badh ek baar baar honi chahiye , lets sey aapka build fail hoayega toh aagey deploy nahi hoga monitoring mey b dikkat nahi aayegi
    
* aapka build pass hua toh turanth aapko production thak paunchana hey - time to markey kamm karna hey - isko kamm kartha hey devops engineer—&gt; is puri process ko kam sey kam time mey paunchana
    
* ae jo code , build , deploy , monitor is cheez ko automate kar skathey hey using jenkins
    
* jenkins ka kaam hey in saare cheezon ko automate karna hey
    
* agar devops ka logo dekhey aap toh code , build , test and deploy - as in infinity symbol - infinity process
    
* Jenkins aek aisa tool hey jo aapko CI & CD detha hey -→ continuos integration , and continuos deployment and delivery .
    
    * CI : jaha pey test cases run hothey hey , checkout code , building the code , running the test cases .
        
    * CD: continuos delivery - amazon pey kuch order karthey ho vo delivery hothi hey manually aap order karthey hey right , that time you use continuos delivery .
        
    * kabhi kabhi instagram mey auto update hojatha hey - vo basically deployment - without manual intervension vo continuos deployment.
        

# Jenkins setup on Vm :

* Jenkins is a GUI tool hey -→ go to aws -→ create and jenkins-master →select o.s and create a machine & connect to the machine .
    
* Go to google —&gt; install jenkins - select linux —&gt;
    
* You wil get commands to run , copy and run the commands.
    
* ae ek gui based tool , devloped by java - jo aapko ci and cd ko automate kar saktha hey
    
* jenkins install karnesey pehley java install karna padega
    
* sabsey pehle -→ sudo apt-get update -y
    
* sudo apt-get install openjdk-17-jdk -y
    
* to ensure java is there or not -→ java -version.
    
* Now execute the commads to install jenkins from long-support.
    
* sudo apt-get install jenkins
    
* aapey system mey status dekhna jenkins ka -→ sudo systemctl status jenkins .
    
* hum chahthey ho agar mera system restart ho jenkins b restart ho
    
* #systemctl enable jenkins
    
* * ab mera jenkins chalra hoga port number 8080 -→ enable the 8080 port number
        
* aapka jenkins aapkey samney hey - unlock jenkins - install suggested plugins
    
* give username and password : admin and admin -→ ab ek admin user banya
    
* Now jenkins is ready
    
* Chalo jab 2018 mey mai pehlri baar dekha hey shock hoayatha - ae sab dashboard kya hey karkey
    
* This is jenkins ka ui , ae ui browser pey chaltha hey
    
* iskey andar aap - job banasakthey ho , agents , cloud configure kar sakthey ho
    
* **Job**: jenkins mey kuch b automate karana hey ci & cd pipeline banani hey vo ek job , git configure vo ek job , scripting vo ek job , jenkins ka logo dekho vo ek buttler - vo wait karra hum ko order do hum vo kaam karthey hey
    

jenkins mey hum log generally jobs hum log create karthey hey

* Create a job - item types - ab is item ka name → first job
    
    * is job ka name dediye - is item ka types - ispey automate kar sakthey hey
        
    * pipeline mey declarative pipelines banana padtha hey
        
    * multi-configuration - aapko multiple environmnets mey like dev , test , prod mey karna hey
        
    * multi -branch - git mey bohot saarey branches rehthey hey us branch mey automation kara na hey
        
    * organization mey ek folder bana diya - us org folder key andar aap bohot saare job sbana saktehy hey
        
* ab hum free style click karney key badh - ek form khultha hey - aapko kya kaam kara na hey ismey configure kara na hey
    
    * * job key builds rehthey hey - merey builds ko discards karna hey - like storage ko bacha sakthey hey
            
            \* log rotation aisa hey aapley pass 10 days key builds hey usme aapko sirf 2 days key store karna hey aap log rotation use kar sakthey hey
            
            \* github- project -→ idhar jo project karna hey git ka project url idhar dey sakthey hey
            
            \* parameterized- koi parameters pass karreho
            
            \* throtle builds: agar baar baar click karenge phir b ek build pe ruk jayega
            
            \* concurrent build - agar aapko parallel mey chalana hey
            
    * scm - github sey idhar project use kar sakthey hey
        
    * build triggers:
        
        * is builds ko chalaney key liye scripts sey chalana hey builds remotely use karthey hey
            
        * ek job ko khatam honekey badh chalana chathey ho isko chala sathey jey - build after other jobs
            
        * build periodically - daily 6 baje aapka build chalna chathey ho
            
        * github hook - aap chahthey ho developer push kiya pipeline build chal jaye is option use kar sakthey hey
            
    * Build environment:
        
        * jismey secret use karna hey - idhar use kar sakthey hey
            
    * build scripts:
        
        * execute scripts :
            
            * aapko ek command shell open hoyega - ismey jo b command dalege chal jayega
                
            * jo b idhar diya - vo chalayega .
                
    * go to dashboard and click on build - continuos delivery manually click karrey
        

# Declarative pipelines:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748588456641/1d5b759e-d914-4505-853a-7ed8664b9f25.png align="center")

* aisa samajlo ae aapka tap hey - ae aapka garden hey ab is garden mey pani jana hey - aap pipe laga dogey - is garden mey pani jana hey aap sprinklen laga dogey
    
    * aapko na ae pani shud hokey jana hey filter laga dogey
        
    * aek source sey ek destination mey jarey ho using piepeline - beechmey stages lagarey
        
    * jenkins b ci and cd pipelines banatha hey - stages key through pipeline bana key destination bana sakthey ho
        
    * go to dashboard click on new item - name demo-cicd —&gt; selct pipeline and click on ok and save.
        
* click on configure - pipeline script - try sample pipeline first → hello world - heloo name ki stage hey
    
* Aap key pass multi -stage pipeline b ho sakthi hey - multiple stages
    
    * output aapko stage by stage perform hotha hey
        
    * isko bolthey hey groovy syntax - isko build kardo
        
    * cd /var/lib/jenkins/workspace mey aapka job store kiye rehthey
        
    
    # Agents :
    
    * idhar hum agent
        
    * any rakhey - industry mey master and nodes rehtha - jenkins master rehta hey - ae workload nodes mey distribute kartha hey
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748589293516/c0653dc6-059a-498c-ac0a-7034dd293ac1.png align="center")
        
* ae aapka jenkins ka master server rehtah hey - jenkins nodes ko kaam deyega aur yaah pey actually job run hoaga , jisseki jenkins mey memory issues na aaye jenkins safe rahey
    
* build in node mastlab jaa pey jenkins hey vahi pey builds job chalrehongey usko bolthey built in nod e- it is not safety and industry standards so distribute the laod
    
* go to aws create the three VM instance , mai idhar nodes agnets banara hun agent kya hotha hey → aap generally build in nodes m=pey jobs nahi chalathey - aap order dethey nodes ko , agents pey jobs chalthey hey
    
* aap key agents mey java hona chahiye → connect to vm install the java
    
* → ae agent connect honge kaisey → toh jenkins ssh through connect karega -aap ek server sey dusre server ko connect kar sakthey hey throuh ssh -using public na private key
    
* private stores itself and pulich should be there in agent
    
* go to the master machine → cd ~/.ssh → ssh-keygen → ls → cat id → copy it and go to the agent → under the → cd ~/.ssh
    
* go to the jenkins - dashbode - agents - click on new node → agent-vaseem → permanent agent - create it → no of executers - ek sath mey kithne jobs ek time pe chalan achathey hey - 1
    
    * remote dir: /home/ubuntu
        
    * labels: label jo hotah hey isi sey saara kaam hotah hey pipeline mey ae label name agent any key replace akrney label name dalthey
        
    * use this node as much as possible - launch via ssh → host ip → copy ip address → credentials agent ki jo connect karnekey liye key - mai aapney master mey aunga - private key copy karlunag - add credentials - select ssh uername with privatekey → ubuntu-key → description → username: ubuntu → enter directly - paste it
        
        \-→ Host-key stategy kardo non host
        
    * host -ip - click on agent - failed to connect →ssh authentication failed because agent mey public key nahi hai toh public key agent .ssh mey authorized keys mey add kardo .
        
    * ab agent mey jakey click on launcg agent - now it will successfully connected .
        
* ab pipeline mey jakey agent any key place mey { label: “vinod”}
    
* vinod us agent ka label hey - usmey vahapey koi b folder nahi hey → agar mai pipeline run karunga toh udhar pey folder banna chahiye thab mai confirm kar saktha hun mera ci and cd process achesey chalra .
    

# Declarative pipeline:

click on new item → djanjoCICD

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748599141837/8f7bf83c-ab4b-450f-8654-e324599ef889.png align="center")

* Description - this is ci and cd pipeline
    
* github ki url dedunag → [https://github.com/LondheShubham153/django-notes-app.git](https://github.com/LondheShubham153/django-notes-app.git)
    
* DisplayName: Django Notes App
    
* hothub hook trigger for GITScm polling click
    
* Advanced description , pipeline - ab pipeline likhna sikhanege
    

```bash
@Library('Shared')_
pipeline{
    agent { label 'dev-server'}
    
    stages{
        stage("Code clone"){
            steps{
                sh "whoami"
            git url: "https://github.com/LondheShubham153/django-notes-app.git",branch:"main"
            echo " This is cloning the code"
            }
        }
        stage("Code Build"){
            steps{
            echo " Building the code"
            sh "whoami"
            sh "docker build -t notes-app:latest ."
            }
        }

        stage("Push to Docker Hub"){
            steps{
                withCredentials([usernamePassword(credentialsId:"dockerHubCred",passwordVariable:"dockerHubPass",usernameVariable:"dockerHubUser")]){
                sh "docker tag notes-app:latest ${env.dockerHubUser}/notes-app:latest"
                sh "docker login -u ${env.dockerHubUser} -p ${env.dockerHubPass}"
                sh "docker push ${env.dockerHubUser}/notes-app:latest"
                }
            }
        stage("Deploy"){
            steps{
                echo "Deploying the code"
                sh "docker run -d -p 8000:8000 notes-app:latest"
            }
        }
            stage("Deploy"){
            steps{
                echo "Deploying the code"
                sh "docker compose up -d "
            }
        }
        
    }
}
```

* pehle pipeline → phir ae pipeline aek agent mey chalna hey agent aur label likhdo - phir hamari pepeline stages pey chalengi toh stages likhdo
    
* ab build kardo → mujhko aisa chahiye ki idhar pipeline dikhana hey iskey liye pluglins download karo
    
* pipeline stage view - plugin usko kardo install
    
* ab iskey andar actual masala dalna hey - code vali stage mey github ka code clone hojaye
    
* ab build iskey liye docker chahiye - isko mai agent mey docker install kardunga → sudo usermod -aG docker ubuntu && newgroup docker -→ docker ps
    
* ab merey pass hey dockerfile docker file sey docker image banthi hey
    
* echo “whoami” dekey user dekhlo → ubuntu ko permission dedo -→ agent mey sudo reboot karenge
    
* mater mey jenkins ko restrat kardo -→ sudo systemctl restart jenkins - &gt; ab build hogi → ab run karengey → configure mey jakey
    
* deploy ka configure karkey - build now kardo - now take your instance ip : and enable the port 8000 - now browse karo -→ ae application jenkins pipeline key sath deploy kiya - aur badiya kaisey kar sakthey hey
    
* docker compose key through b deploy kar sakthey hey → docker compose - agent mey install kardo
    
* docker run hum production mey run nahi karthey - docker compose up -d agar container hey toh kuch nahi kahega , agar container nahi hey create karega
    
* aur kya acha kar sakthey hey - iskoa jo build image hey -isko dockerhub mey push kara sakthey hey -→ iskey liye docker login karna padtah hey iskey liye credentials chahiye rehtah hey
    
* mujey deploy karnesey pehley aur ek stage aajayegi push to docker hub
    
* docker image tag default image sey docker user name sey tag karey aur → docker login kare - merko credentials dalna hey isko mai expose nahi kartha toh variables banakey pipeline mey reffer karunga -→ credentials binding karna padtha hey - liek hide karkey kartha hun env variables mey
    
* isko save karlo -→ dashboard mey jav → credentials mey javo - global credentials mey - username and password - docker mey ek token banalo personal access token → give full access
    
* idhar credentials mey dalko → id aakey dockerHubCred→ description mey b → dockerHubCred ae id hey hey ismey andar mera username and password mey hey → ae cheez mai mrery pipeline mey use karunga
    
* push to docker hub mey .
    
    * ab mai mere docker hub mey images hey - abhi compose file build barey baar hora instead of that mera image lena
        
    * aur githubwebhook b dekhenge - aap chahthey ho github mey change hua automatic lena hey - vo karangey webhook - ek webhook trigger hojaye - github jenkins url ko hit karega agar kuch update hua toh thab jenkins lekey automatically run karega
        
    * jenkins ka url lelo jo b jenkins chalra hey →go to settings → repo settings - webhook → add webhook → payload url mey jenkins url /github-webhook/application/x select→ → no ssl - send me everything → add webhook
        
    * mera webhook configure kiye -jenkins mey githubwebhook hook trigger enable rakhna hey
        
    * mai docker compose mey image rakhunga instead of build. → this is called continous deployment.
        

# Shared Libraries:

* aapne jo likha na stages, code , build , push to dockerhub → mujheko kalko aur piepline likhana hogi mujheko puri mehnat vapas likhunga
    
    * mujhey kal ko kuch deploy karna ae mehnat phir sey likhunga
        
    * shared library kya hotha hey jenkins mey - ek repo rehthi hey - jiskey andar groovy ka code hotha hey us code ko aap reuse kar sakthey hey apni pipeline mey
        
    * Repo → groovy code → reuse(in pipeline)
        
    * ae jo pipeline iwth credentials aapko ae reuse karna hey - shared library create kardo
        
    * ek new repo create kardo - name rakho - jenkins-shared-libraries → ek small snippets reuse kar sakthey hey
        
    * usmey ek file add karni hye - ab shared libraries hothi hey vars - vars name ka folder banado
        
    * mai chahtha hun shared library file like heloo,groovy
        
        ```bash
        def call(){
            echo " HELOO DOSTO"
        }
        
        clone:
        
        def callString url , String branch {
        
               git url: "${url} , branch:"${branch}"
                    echo " This is cloning the code"
                    }
        
        def call(String ProjectName , String ImageTag , String DockerhubUser){
                
                    sh " docker build -t ${DockerHubUser/${ProjectName}:${ImageTag} ."    
                
                     {
        
        def call(String Project, String ImageTag, String dockerhubuser){
          withCredentials([usernamePassword(credentialsId: 'dockerhubCred', passwordVariable: 'dockerHubPass', usernameVariable: 'dockerHubUser')]) {
              sh "docker login -u ${dockerHubUser} -p ${dockerHubPass}"
          }
          sh "docker push ${dockerHubUser}/${Project}:${ImageTag}"
        }
        ```
        
        * iskey andar mey ek function banaunga def jisko call karunga - parameter open parameter close
            
        * ab ae github sey merey jenkins mey kaisa paunchega - ab jenkins - manage jenkins - system — system wide reuse karna hey - niche - shared libraries - global trusted pipeline libraries - add library → name = Shared → default versin -branch la name aajayega → main
            
        * ab retrival method→ modern scm - git → repo url → save kardo
            
        * shared library ki repo hey jenkins mey add kiya - aap pipelines mey add nahi kiya
            
        * pipeline mey upar @Library(“Shared”) \_ → mai ek stage(“Helo”) rakhunda mai heloo print nahi karunag call karunga → script key andar -&gt;hello()- ae pipeline logs mey print dekh sakthey hey - ae akaha sey lera shared libraries.
            
        * vars mey chalo - add file → clone.groovy
            
            * ab pipeline mey clone stage mey
                
            * clone(“git url”, “main”)
                
            * docker-build ka groovy -→ add file →docker\_build,groovy
                
        
        ```bash
        @Library('Shared')_
        pipeline{
            agent { label 'dev-server'}
            
            stages{
                stage("Code clone"){
                    steps{
                        sh "whoami"
                    git url: "https://github.com/LondheShubham153/django-notes-app.git",branch:"main"
                    echo " This is cloning the code"
                    }
                }
                stage("Code Build"){
                    steps{
                    echo " Building the code"
                    sh "whoami"
                    docker_build("notes-app","lates","trainwithshubham")
                    }
                }
        
                stage("Push to Docker Hub"){
                    steps{
                        withCredentials([usernamePassword(credentialsId:"dockerHubCred",passwordVariable:"dockerHubPass",usernameVariable:"dockerHubUser")]){
                        sh "docker tag notes-app:latest ${env.dockerHubUser}/notes-app:latest"
                        sh "docker login -u ${env.dockerHubUser} -p ${env.dockerHubPass}"
                        sh "docker push ${env.dockerHubUser}/notes-app:latest"
                        }
                    }
                stage("Deploy"){
                    steps{
                        echo "Deploying the code"
                        sh "docker run -d -p 8000:8000 notes-app:latest"
                    }
                }
                    stage("Deploy"){
                    steps{
                        echo "Deploying the code"
                        sh "docker compose down && docker compose up -d "
                    }
                }
        ```
        
        aap barey baar jenkins mey change karneki jaruri ahi - aap Jenkinsfile likhdo → and jenkins mey pipeline form scm - select - give url and Jenkinsfile - just edit and change
        
* # User management in jenkins (Role based)
    
* * Production level mey na bohot saare users rehthey unko manage karna hotha hey .
        
        \* \* dashbode - manage jenkins → user ko add karna hey kaisa - user pery chalo - create karo - vaseem passwd: vaseem → DevOps wale - &gt; email
        
        \* logout karkey login karkey - ae naya recruit hey - usko mainey sign in karadiya → bhai kal ka aaya hua ladka saara acess hey , usko jenkins manage karneka b access hey - ae toh gadbad hey na
        
        \* role based authorixation chahiya - agar vaseem key pass admin permission hey thab hi ae saare cheeze kar saktha hey - agar read and write hey vahi kar saktha hey jo hey
        
        \* jenkins → plugins → available - roll based - install it
        
        \* \* manage jenkins - security - role based - authorizations - logged in users can do anything - &gt; select role based strategy
        
        \* new tool miljayega - manage and assign roles - roles to add - &gt; viewer → job - read , discover , view: read , metrics: view -→ save the role → assign role - make vaseem as viewer or authenticated\_users
        
        \* mera user role based access control hora hey - overall read kardo and refresh
        

# CI/CD project three tiwe with k8s , argocd , prometheus ,devsecops: sonarqube , trivy , owasp and email notification on pipeline pass/ fail.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748635422441/20f6de68-4cac-458f-84a8-8119ad143ede.png align="center")

* ek developer github mey puch kartah hey jenins mey pull kartha hey - us code ka ci and cd - ae devsecops key practices hotah hey jaha pey - dependency check kiy ajatha hey , code quality gate ko check kiay ajatha hey , image ko scan ho hotah hey aur docker hub pey =push kareneg - ae baar image push hogayi - phor vaha sey jenkins khud ek job trigger karega jo ki cd rahega continuos delivery vo cheez jabbi aapki code change hoga uska image ko change karkey github pey dalega , aur gitops sey argocd us code ko pull karega aur ek eks cluster pey deploy karaga , ek baar ae app deploy hojayi - us key badh us app ka monitoring logging sab cheezey hogi , agar aap ka app fail hojai email jayeg a sucess hua toh b email jayega
    
* is application ka argocd - eks - monitoring - through gashboards we can check
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748640793060/2e3fee76-e863-4f79-9617-f96e6483ac88.png align="center")

Ae sab cheeze karni hey

* go to github - wanderlast - sabsey pehle toh samajthey hey application kya ey - ae three tier application hey - ae frontend tier - react hey , backend hey nodejs- data base hey mongodb ka hey - database mey transactiona karange input output - isliye cacheing rehthi hey - &gt; agar aap server ko baar baar ek hi cheezonko aek cache mey store kardo - reddi sis the key value pair storage service that allows you to get document data whatever you want based on a key .
    
* next hamey ek machine lagegi jissey sachi cheeze drive karegey - is master machine ec2 hogs jo ki kuch security groups , iams , security groups key sath configured hoga - kaisa banayenge - ek tarika hey terraform ec2.tf - ae jo terrafrom ka instance banega or ispey jenkins chalana hey node chahiye toh node baankey run karo yah - isi pey run karo → t2.medium - &gt; ismey trivy , docke r, jenkins , sonar , owasp sab rahega
    
* ek baar master hogaya jenkins ko configure karna hey devsecops key liye -ismey trivy , docke r, jenkins , sonar , owasp sab rahega
    
* phir hum log set-up karenge eks -cluster →is cluster ko particular region sertup karenge
    
* isi cluster mey hamey argocd setup karna hey jo argocd isi cluster ko update karega - jo b yaml files kubernates per deploy hojaye isliye argocd use karthey hey
    

Argocd: argo cd ek continuos delivery tool hey specially k8s key liye design kiya gaya hey , jaha pey kubernates key services jo b hey sync and deploy kar saktheyey - jihney apps chahiye uthna apps bana sakthey ho - app settings mey jakey aapkey repo sey connect kar sakthey hey directly manifest file aayengi aur deployment karegi

6. monitoring - yaha hey hum helm use karenge - kithne logon ko patha hey helm kya hotha hey - aapkey jo kubernates manifest file hothi hey - uskey package ko manage kartah ehy
    
    * us package manager through hum monitor and grafana prometeus dono single click install single click deploy karne valae hey
        
    * clone the project in the vm - with the help of terraform create a master vm
        
        * aws - iam - create one user aur - terraform - and i will make it admin acess and i will create access and secret keys and i will configure aws configure
            
        * create ssh-keygen → tera-key → teraform plan
            
            ec2.tf
            
            ```bash
            resource "aws_key_pair" "deployer" {
              key_name   = "terra-automate-key"
              public_key = file("/Users/shubham/Documents/work/TrainWithShubham/terra-practice/terra-key.pub")
            }
            
            resource "aws_default_vpc" "default" {
            
            }
            
            resource "aws_security_group" "allow_user_to_connect" {
              name        = "allow TLS"
              description = "Allow user to connect"
              vpc_id      = aws_default_vpc.default.id
              ingress {
                description = "port 22 allow"
                from_port   = 22
                to_port     = 22
                protocol    = "tcp"
                cidr_blocks = ["0.0.0.0/0"]
              }
            
              egress {
                description = " allow all outgoing traffic "
                from_port   = 0
                to_port     = 0
                protocol    = "-1"
                cidr_blocks = ["0.0.0.0/0"]
              }
            
              ingress {
                description = "port 80 allow"
                from_port   = 80
                to_port     = 80
                protocol    = "tcp"
                cidr_blocks = ["0.0.0.0/0"]
              }
            
              ingress {
                description = "port 443 allow"
                from_port   = 443
                to_port     = 443
                protocol    = "tcp"
                cidr_blocks = ["0.0.0.0/0"]
              }
            
              tags = {
                Name = "mysecurity"
              }
            }
            
            resource "aws_instance" "testinstance" {
              ami             = var.ami_id
              instance_type   = var.instance_type
              key_name        = aws_key_pair.deployer.key_name
              security_groups = [aws_security_group.allow_user_to_connect.name]
              tags = {
                Name = "Automate"
              }
              root_block_device {
                volume_size = 30 
                volume_type = "gp3"
              }
            }
            ```
            
            terraform.tf
            
    * ```bash
          terraform {
            required_providers {
              aws = {
                source  = "hashicorp/aws"
                version = "5.65.0"
              }
            }
          }
          
          provider "aws" {
            region = var.aws_region
          }
        ```
        
        variable.tf
        
    
    ```bash
    variable "aws_region" {
      description = "AWS region where resources will be provisioned"
      default     = "us-east-2"
    }
    
    variable "ami_id" {
      description = "AMI ID for the EC2 instance"
      default     = "ami-085f9c64a9b75eed5"
    }
    
    variable "instance_type" {
      description = "Instance type for the EC2 instance"
      default     = "t2.large"
    }
    ```
    
    vim ec2.tf - change the keyfile location - iam making a master machine
    
    * You can do from terraform or also manually
        
    * terraform init
        
    * terraform plan → once its created - connect to the instance.
        
    * ae master machine mey kya kya cheeze karna hey
        
    * ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748680794765/9abbd08f-ab7f-4c09-a099-8b06f553fd71.png align="center")
        

* sudo apt-get update -y
    
    * One by one i should setup now
        
    * sudo apt-get install docker.io docker-compose up -d
        
    * sudo chmod 777 /var/run/docker.sock - alternate - sudo usermod -aG docker ubuntu && newgrp docker - refresh the group
        

# **Wanderlust Mega Project End to End Implementation**

### **In this demo, we will see how to deploy an end to end three tier MERN stack application on EKS cluster.**

### **<mark>Project Deployment Flow:</mark>**

[![](https://github.com/DevMadhup/Wanderlust-Mega-Project/raw/main/Assets/DevSecOps%2BGitOps.gif align="left")](https://github.com/DevMadhup/Wanderlust-Mega-Project/blob/main/Assets/DevSecOps%2BGitOps.gif)

## **Tech stack used in this project:**

* GitHub (Code)
    
* Docker (Containerization)
    
* Jenkins (CI)
    
* OWASP (Dependency check)
    
* SonarQube (Quality)
    
* Trivy (Filesystem Scan)
    
* ArgoCD (CD)
    
* Redis (Caching)
    
* AWS EKS (Kubernetes)
    
* Helm (Monitoring using grafana and prometheus)
    

### **How pipeline will look after deployment:**

* **CI pipeline to build and push**
    
* **CD pipeline to update application version**
    
* **ArgoCD application for deployment on EKS**
    

**Important**

Below table helps you to navigate to the particular tool installation section fast.

| **Tech stack** | **Installation** |
| --- | --- |
| Jenkins Master | [Install and configure Jenkins](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Jenkins) |
| eksctl | [Install eksctl](https://github.com/LondheShubham153/Wanderlust-Mega-Project#EKS) |
| Argocd | [Install and configure ArgoCD](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Argo) |
| Jenkins-Worker Setup | [Install and configure Jenkins Worker Node](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Jenkins-worker) |
| OWASP setup | [Install and configure OWASP](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Owasp) |
| SonarQube | [Install and configure SonarQube](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Sonar) |
| Email Notification Setup | [Email notification setup](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Mail) |
| Monitoring | [Prometheus and grafana setup using helm charts](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Monitor) |
| Clean Up | [Clean up](https://github.com/LondheShubham153/Wanderlust-Mega-Project#Clean) |

### **Pre-requisites to implement this project:**

**Note**

This project will be implemented on North California region (us-west-1).

* **Create 1 Master machine on AWS with 2CPU, 8GB of RAM (t2.large) and 29 GB of storage and install Docker on it.**
    
* **Open the below ports in security group of master machine and also attach same security group to Jenkins worker node (We will create worker node shortly)**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/361331879-4e5ecd37-fe2e-4e4b-a6ba-14c7b62715a3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMzMxODc5LTRlNWVjZDM3LWZlMmUtNGU0Yi1hNmJhLTE0YzdiNjI3MTVhMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03M2JlZGI1YTNkNWE4ZTQyZmUyNGU5MDYxN2Q0MTI5NmFkNTY5OGQ1MDY2NWJlZjQ4YmMxYTRhY2JiNDA1ZmJhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZZf4J9KsU4SioAIQXZWuwlWsLyqZNscfEHS0d5PnKOY align="left")
    

**Note**

We are creating this master machine because we will configure Jenkins master, eksctl, EKS cluster creation from here.

Install & Configure Docker by using below command, "NewGrp docker" will refresh the group config hence no need to restart the EC2 machine.

```bash
sudo apt-get update
```

```bash
sudo apt-get install docker.io -y
sudo usermod -aG docker ubuntu && newgrp docker
```

* **Install and configure Jenkins (Master machine)**
    

```bash
sudo apt update -y
sudo apt install fontconfig openjdk-17-jre -y

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
  
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
  
sudo apt-get update -y
sudo apt-get install jenkins -y
```

* **Now, access Jenkins Master on the browser on port 8080 and configure it**.
    
* i will setup now jenkins - install suggested plugins - &gt; create a user - admin → passwd → vaseem akram &gt; email address
    
* apney ko master machine sey cluster banani hey eks bananey ley liye iam user with access and secret key chahiye
    
* ab secret key and access key ab mai yaha pey keys laganey key liya aws cli chahiye
    
* **Create EKS Cluster on AWS (Master machine)**
    
    * IAM user with **access keys and secret access keys**
        
    * AWSCLI should be configured ([Setup AWSCLI](https://github.com/DevMadhup/DevOps-Tools-Installations/blob/main/AWSCLI/AWSCLI.sh))
        
    
    ```bash
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    sudo apt install unzip
    unzip awscliv2.zip
    sudo ./aws/install
    aws configure
    ```
    
    * aws configure a karkey access key and secret key dedo
        
    * aws s3 ls
        
    * abhi mai eks ctl ko install karna start kardunga ekstctl key liye mujhey kubectl chahiye , kiunki eksctl ko manage kartha hey director kartha hey kubectl
        
    * Install **kubectl** (Master machine)([Setup kubectl](https://github.com/DevMadhup/DevOps-Tools-Installations/blob/main/Kubectl/Kubectl.sh) )
        
    
    ```bash
    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin
    kubectl version --short --client
    ```
    
    * kubectl got installed , simillarly humko eksctl b install kardenege
        
    * Install **eksctl** (Master machine) ([Setup eksctl](https://github.com/DevMadhup/DevOps-Tools-Installations/blob/main/eksctl%20/eksctl.sh))
        
    
    ```bash
    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
    sudo mv /tmp/eksctl /usr/local/bin
    eksctl version
    ```
    
    * ab mai eks banaunga apney master machine mey
        
    * ussey pehley cloud formation ka us name sey kuch hey kya karkey check karni hey
        
    
    * **Create EKS Cluster (Master machine)**
        
    
    ```bash
    eksctl create cluster --name=wanderlust \
                        --region=us-east-2 \
                        --version=1.30 \
                        --without-nodegroup
    ```
    
    * ae 20 min time liyega jab thak jenkins mey configure mey karenge
        
    
    # **Setting up jenkins worker node**
    
    * Create a new EC2 instance (Jenkins Worker) with 2CPU, 8GB of RAM (t2.large) and 29 GB of storage and install java on it
        
    
    ```bash
    sudo apt update -y
    sudo apt install fontconfig openjdk-17-jre -y
    ```
    
    * Create an IAM role with <mark>administrator access</mark> attach it to the jenkins worker node <mark>Select Jenkins worker node EC2 instance --&gt; Actions --&gt; Security --&gt; Modify IAM role</mark>
        
    * Configure AWSCLI ([Setup AWSCLI](https://github.com/DevMadhup/DevOps-Tools-Installations/blob/main/AWSCLI/AWSCLI.sh))
        
    
    ```bash
    sudo su
    ```
    
    ```bash
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    sudo apt install unzip
    unzip awscliv2.zip
    sudo ./aws/install
    aws configure
    ```
    
* **generate ssh keys (Master machine) to setup jenkins master-slave**
    

```bash
ssh-keygen
```

[![image](https://private-user-images.githubusercontent.com/121779953/357394805-0c8ecb74-1bc5-46f9-ad55-1e22e8092198.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3Mzk0ODA1LTBjOGVjYjc0LTFiYzUtNDZmOS1hZDU1LTFlMjJlODA5MjE5OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZDg4MzZlMDkwNTA5OWQzZDA0NzFlYTQ0NTY0NzZlODJkMmI0Yzc1MzU2MTllYzQxMzUxZWI1NjI1Mjc4MTRkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HIU0bwMhyOsodjS1ZoS5laqlu46D0LEKZ3RVaCenD1A align="left")](https://private-user-images.githubusercontent.com/121779953/357394805-0c8ecb74-1bc5-46f9-ad55-1e22e8092198.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3Mzk0ODA1LTBjOGVjYjc0LTFiYzUtNDZmOS1hZDU1LTFlMjJlODA5MjE5OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZDg4MzZlMDkwNTA5OWQzZDA0NzFlYTQ0NTY0NzZlODJkMmI0Yzc1MzU2MTllYzQxMzUxZWI1NjI1Mjc4MTRkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HIU0bwMhyOsodjS1ZoS5laqlu46D0LEKZ3RVaCenD1A)

* **Now move to directory where your ssh keys are generated and copy the content of public key and paste to authorized\_keys file of the Jenkins worker node.**
    

* **Now, go to the jenkins master and navigate to <mark>Manage jenkins --&gt; Nodes</mark>, and click on Add node**
    
    * **name:** Node
        
    * **type:** permanent agent
        
    * **Number of executors:** 2
        
    * Remote root directory
        
    * **Labels:** Node
        
    * **Usage:** Only build jobs with label expressions matching this node
        
    * **Launch method:** Via ssh
        
    * **Host:** &lt;public-ip-worker-jenkins&gt;
        
    * **Credentials:** <mark>Add --&gt; Kind: ssh username with private key --&gt; ID: Worker --&gt; Description: Worker --&gt; Username: root --&gt; Private key: Enter directly --&gt; Add Private key</mark>
        
    * **Host Key Verification Strategy:** Non verifying Verification Strategy
        
    * **Availability:** Keep this agent online as much as possible
        
* And your jenkins worker node is added
    
    ![image](https://private-user-images.githubusercontent.com/121779953/357403596-cab93696-a4e2-4501-b164-8287d7077eef.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3NDAzNTk2LWNhYjkzNjk2LWE0ZTItNDUwMS1iMTY0LTgyODdkNzA3N2VlZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNmRhZmMxZTQ3YjFiMWEwZjc2OTQ1MDBjZmZmZDNmZmUxOTRiNzYzMThhNTZmZGUwZGY5MTI3ZDFkYTg5Y2YyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.9U0xQPwv681N4KVG9dGFcY5PsRhAQ1w-TjgUEPehUgI align="left")
    
* **Install docker (Jenkins Worker)**
    

```bash
sudo apt install docker.io -y
sudo usermod -aG docker ubuntu && newgrp docker
```

* **Install and configure SonarQube (Master machine)**
    
* hum sonarqube install karenge
    

```bash
docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community
```

* trivy install karlenge abb - toh issey aapki file system scan karlenge
    
* user , password dedeo - default admin , admin hoga
    
* abhi cluster create nahi hua jab thak email ka configure karenge - jenkins mey
    

* **Install Trivy (Jenkins Worker)**
    

```bash
sudo apt-get install wget apt-transport-https gnupg lsb-release -y
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update -y
sudo apt-get install trivy -y
```

## **Steps to add email notification**

* → jaisey gmail open karliya - usmey manage google account - go to security - and make sure 2 step verification is on or not - make it on
    
    * and search app - &gt; app password - agar aapko gmail as a an application chalana hey → mujhey yaha pey ek app banana hey → jenkins - create - you will get one password - store it somewhere → now go to jenkins → manage jenkins → credentials - &gt; gmail ka app password tha idhar dena iskey vajhasey hum gmail bhej sakthey hey → username : aap ka email , password: app-password - desrcip: gmail-password
        
    * system → email -notification - extended email notification - idhar smt ka email likhna -=&gt; smtp.gmail.com -→ port generally 25 agar app per chalana hey 465 use akrna —&gt; add password -→ select ssl
        
    
    * aur ab → last mey email notofication test - smtp.gmail.com → default user - advance - use authenticate → dqvaseem@gmail.com , password - and 465 → test configuration →kisi aur ka email dedo
        
    * ab clusters chalu hogey toh nodes add kardenge
        

* **Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS**
    
* **Now, we need to generate an application password from our gmail account to authenticate with jenkins**
    
    * **Open gmail and go to <mark>Manage your Google Account --&gt; Security</mark>**
        

**Important**

Make sure 2 step verification must be on

[![image](https://private-user-images.githubusercontent.com/121779953/358509211-5ab9dc9d-dcce-4f9d-9908-01095f1253cb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTA5MjExLTVhYjlkYzlkLWRjY2UtNGY5ZC05OTA4LTAxMDk1ZjEyNTNjYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yOWNkNDg0ZjM1NGIxZjVmNmIzMGM5ZDI5NjM4NzgyY2Y4OWRkZWVmNjhjZjExZGM1YTVlODk2NGM0OTc3YWYxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.oaDCq3hQzAc_BnhbIwrFOqR5BHqxxNzL979TBmGHUfM align="left")](https://private-user-images.githubusercontent.com/121779953/358509211-5ab9dc9d-dcce-4f9d-9908-01095f1253cb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTA5MjExLTVhYjlkYzlkLWRjY2UtNGY5ZC05OTA4LTAxMDk1ZjEyNTNjYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yOWNkNDg0ZjM1NGIxZjVmNmIzMGM5ZDI5NjM4NzgyY2Y4OWRkZWVmNjhjZjExZGM1YTVlODk2NGM0OTc3YWYxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.oaDCq3hQzAc_BnhbIwrFOqR5BHqxxNzL979TBmGHUfM)

* **Search for <mark>App password</mark> and create a app password for jenkins**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358509568-701752da-7703-4685-8f06-fe1f65dd1b9c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTA5NTY4LTcwMTc1MmRhLTc3MDMtNDY4NS04ZjA2LWZlMWY2NWRkMWI5Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kNjlkY2Q4MzRlNzEzZTU4YTc2M2QxOTVjMDA3YzNhZGI0OWM3ZjZmMDJlOGQzYTcyNzk1MWM4YmM5MjlhN2FjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.zt7e00PAOvw1iTN14uO3NTE8QNsDtr1oWUBy6FjsoKg align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358510105-adc8d8c0-8be4-4319-9042-4115abb5c6fc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTEwMTA1LWFkYzhkOGMwLThiZTQtNDMxOS05MDQyLTQxMTVhYmI1YzZmYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00NjgxZTc1Mjk2MTRhMjkwMTA5M2MwZDE1YTBmNjgyMDEzZGNiNzBkYjdiODI3NTI2MTZmNTVlMWNmOWI5N2RmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.bZ8ea4DTNvhL-OjA5n53010WvwZTZVNjNhmkLlHJJQo align="left")
    
* **Once, app password is create and go back to jenkins <mark>Manage Jenkins --&gt; Credentials</mark> to add username and password for email notification**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358511061-2a42ec62-87c8-43c8-a034-7be0beb8824e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTExMDYxLTJhNDJlYzYyLTg3YzgtNDNjOC1hMDM0LTdiZTBiZWI4ODI0ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zOTExODFjMjViNWZiYjI0MDQxYTA4ZWU5MzY2NmNhNWVlYzdkMGM0NzZhY2RmOTBlYzc5YzNlMzNjZDJmODY3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.oTotAelMgGmu-BvcvfymBd2CgW6X98U21rVSmzsbxjg align="left")
    
* **Go back to <mark>Manage Jenkins --&gt; System</mark> and search for <mark>Extended E-mail Notification</mark>**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358512263-bac81e24-bb07-4659-a251-955966feded8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTEyMjYzLWJhYzgxZTI0LWJiMDctNDY1OS1hMjUxLTk1NTk2NmZlZGVkOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iODM0NzNiYTYzNTBhOTMxNzQzNTIzZGFlMzMzZDRkZTkxYWQ1MjY5ZTQ0OWY1N2JkNDY0OWMxNmYyOWI5YjcxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.i9FHbFdiDec7KkQpgtkgQwuknM9OFqlTCJwoBFOo-Y4 align="left")
    
* **Scroll down and search for <mark>E-mail Notification</mark> and setup email notification**
    

**Important**

Enter your gmail password which we copied recently in password field <mark>E-mail Notification --&gt; Advance</mark>

[![image](https://private-user-images.githubusercontent.com/121779953/358513004-14e254fc-1400-457e-b3f4-046404b66950.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTEzMDA0LTE0ZTI1NGZjLTE0MDAtNDU3ZS1iM2Y0LTA0NjQwNGI2Njk1MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YmNlZTczNDZlOTg2ZWMzZjE4YThiYWQ1NWUxZjViNjI5ZjNmYzk2NDM1MDI1M2Q1NWE3YzU1N2VmM2YwNmRiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JFjCxV08u3tvTGJ1myIaScnlZEbrxK6IaNvCQqqJUj4 align="left")](https://private-user-images.githubusercontent.com/121779953/358513004-14e254fc-1400-457e-b3f4-046404b66950.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTEzMDA0LTE0ZTI1NGZjLTE0MDAtNDU3ZS1iM2Y0LTA0NjQwNGI2Njk1MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01YmNlZTczNDZlOTg2ZWMzZjE4YThiYWQ1NWUxZjViNjI5ZjNmYzk2NDM1MDI1M2Q1NWE3YzU1N2VmM2YwNmRiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JFjCxV08u3tvTGJ1myIaScnlZEbrxK6IaNvCQqqJUj4)

# Nodes Creation:

* apney ko node groups add karni hey - ussey pehley oidc rehtha hey → oepn id connect - jissey ki aapka aws account iss cluster seh bath kar paye.
    

* **Associate IAM OIDC Provider (Master machine)**
    

```bash
eksctl utils associate-iam-oidc-provider \
  --region us-east-2 \
  --cluster wanderlust \
  --approve
```

* **Create Nodegroup (Master machine)**
    
* * aapko yaha pey - aapko ek ssh public key rehni hey eks-nodegroup-key → key pair mey jakey create kardo eks-nodegroup-key
        
    

```bash
eksctl create nodegroup --cluster=wanderlust \
                     --region=us-east-2 \
                     --name=wanderlust \
                     --node-type=t2.large \
                     --nodes=2 \
                     --nodes-min=2 \
                     --nodes-max=2 \
                     --node-volume-size=29 \
                     --ssh-access \
                     --ssh-public-key=eks-nodegroup-key
```

**Note**

Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account"

\- phir sey 20 min lega , jab thak owasp dekehnge

## **Steps to implement the project:**

* owasp implement karney key liye owasp ka plugin chahiye - go to dadhboard -→ plugins -→ available Plugins .
    
* 4 plugins install kana hey - blue ocean → install → restart jenkins
    
* ab cluster bangaya - node bangaya - &gt; now if i give kubectl get nodes - ab humney cluster bana diye
    

* **Go to Jenkins Master and click on <mark>Manage Jenkins --&gt; Plugins --&gt; Available plugins</mark> install the below plugins:**
    
    * OWASP
        
    * SonarQube Scanner
        
    * Docker
        
    * Pipeline: Stage View
        
* **Configure OWASP, move to <mark>Manage Jenkins --&gt; Plugins --&gt; Available plugins</mark> (Jenkins Worker)**
    
* **After OWASP plugin is installed, Now move to <mark>Manage jenkins --&gt; Tools</mark> (Jenkins Worker)**
    

\- dependency check dhundo - &gt; add dependency - name → OWASP - &gt; insall automatically kardo - install from github.com → version - 10.0.3 → owasp kuch files download karega jisko 20 min lag sakthey hey , jab aap pipeline chalavoge thab

* ab save karlo
    

* ## ab mujhey jenkins ko aur sonar ko integrate karana hey
    
    \- toh sonar idhar hey - mujhey isko jenkins ko intgerate karana hey , humney jenkins ko github ko kaisa intgerate kiske basis pey intgerate kara ya tha - through tokens
    

* **Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube**
    
    * Navigate to <mark>Administration --&gt; Security --&gt; Users --&gt; Token</mark>
        
        ![image](https://private-user-images.githubusercontent.com/121779953/358118740-86ad8284-5da6-4048-91fe-ac20c8e4514a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTE4NzQwLTg2YWQ4Mjg0LTVkYTYtNDA0OC05MWZlLWFjMjBjOGU0NTE0YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mMjAzY2M0OGYwODgyNWFlODYxMjdmYWJkMzA2MWYxM2U1MzcyNDFhNzQ1ZjE3MThkZDljZDVkOTI0N2IzMDEwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.nerpBq7nLK0VAyKPEipK5NC6O9hbx57n5uXC9Cfa_kg align="left")
        
        ![image](https://private-user-images.githubusercontent.com/121779953/358118837-6bc671a5-c122-45c0-b1f0-f29999bbf751.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTE4ODM3LTZiYzY3MWE1LWMxMjItNDVjMC1iMWYwLWYyOTk5OWJiZjc1MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jYWQwMmMyOTA2NzMzYzM5OTlhM2NlYWNhNGI3YzNmMTgzMGRkNzAzZThmYWM3YjIzYWEyYTlmYTNkYjVkZmE0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.8-XWgn2OoWlLhpgccbWjl7giVaGHldIfI_7NRg98rW4 align="left")
        
        ![image](https://private-user-images.githubusercontent.com/121779953/358118903-e748643a-e037-4d4c-a9be-944995979c60.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTE4OTAzLWU3NDg2NDNhLWUwMzctNGQ0Yy1hOWJlLTk0NDk5NTk3OWM2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yNzRiNmVhYzc1MWQyZDY3ZDJiZjllZGU4NzAwNjYwZjg2Nzg3NzM1M2JlNjAyYWM0MDEyZDAzNmUzNzhjZWZmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.fmxAR1uRc5IjCSoaCGulZXo8NfMW_9nywB_2hA07Jqk align="left")
        
* **Now, go to <mark>Manage Jenkins --&gt; credentials</mark> and add Sonarqube credentials:**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358121052-0688e105-2170-4c3f-87a3-128c1a05a0b8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIxMDUyLTA2ODhlMTA1LTIxNzAtNGMzZi04N2EzLTEyOGMxYTA1YTBiOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03YjUxZjI1ZTY0MThlNzM3NGMxYTk1YWYzNGFkNmVjMmM5YTkyMDBmNWM1ODY1MTU5ZGI1ZjMxZDNkYWY3N2U3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7g6JA8QlJ-kEE2Zk5EnSf28blmXXaxvNZ1E6NYBdWMc align="left")
    
* ab sonar key token sey jenkins ko integrate kar denge - go to tools - sonar scannner - add sonar scanner
    
* **Go to <mark>Manage Jenkins --&gt; Tools</mark> and search for SonarQube Scanner installations:**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358121304-2fdc1e56-f78c-43d2-914a-104ec2c8ea86.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIxMzA0LTJmZGMxZTU2LWY3OGMtNDNkMi05MTRhLTEwNGVjMmM4ZWE4Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMWJjNzEwY2FiODMyZjFjNTIxYmIzOGRiZjViYmIxNjdhYzViM2Q3YWJiMzgwOGNjNTg0NzZjYWMzNTBmZTA0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Uq0U740GR7qpqB-JLSQ2zWSRnjovw-Nq2liEZYuh94k align="left")
    

* **Go to <mark>Manage Jenkins --&gt; credentials</mark> and add Github credentials to push updated code from the pipeline:**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358480677-4d0c1a47-621e-4aa2-a0b1-71927fcdaef4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDgwNjc3LTRkMGMxYTQ3LTYyMWUtNGFhMi1hMGIxLTcxOTI3ZmNkYWVmNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNjMxMzdjYTY0MWNkMDI3MzBiOTQ0ZjZlMTdkZTZhYmNmYWE1ODQxZmY2YTZlOTZlMGYxNDE4OWQ3MGNjYjBiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HAG9jpMje3XD8SNjuuFrw2GUWuoHDiT21d5QJ5vPN7M align="left")
    

**Note**

While adding github credentials add Personal Access Token in the password field.

* ab mujhey sonarqube ko integrate karana hey -
    

* **Go to <mark>Manage Jenkins --&gt; System</mark> and search for SonarQube installations:**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358121531-ae866185-cb2b-4e83-825b-a125ec97243a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIxNTMxLWFlODY2MTg1LWNiMmItNGU4My04MjViLWExMjVlYzk3MjQzYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ZGM2NTFjMDhiMjg5ZDc1Y2YyYWQzZDUzMjFmYmYwZWIyYTdhMWNiMWI2Y2UzNWI5ZmJhYWUwZmRiYmEzNGY2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5gt2v9RmiUv0wQmFBnScogF2LtqH82NmVy_E295Q7HU align="left")
    
* jab jenkins sonarqube pey hit karega usko ek webhook chahiye hit karekey liye
    
* agar mujhey jenkins sey sonar ko kuch bhejna hey toh mujhey wehbook chahiye hotha hey
    

**Login to SonarQube server, go to <mark>Administration --&gt; Webhook</mark> and click on create**

![image](https://private-user-images.githubusercontent.com/121779953/358122026-16527e72-6691-4fdf-a8d2-83dd27a085cb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIyMDI2LTE2NTI3ZTcyLTY2OTEtNGZkZi1hOGQyLTgzZGQyN2EwODVjYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MjI2ODUxYjNiMmExNzc1NDI2ZDY4MDVlNDYzZTUzNTBhMTFkYjA0YWVjMGMzM2I4MWQ2MzllMzk0YjcyMDhmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Fk2qeteqn9-i5r2Rrp5-4S36RVuWx3eYO-1bkbOnu-M align="left")

![image](https://private-user-images.githubusercontent.com/121779953/358122186-a8b45948-766a-49a4-b779-91ac3ce0443c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIyMTg2LWE4YjQ1OTQ4LTc2NmEtNDlhNC1iNzc5LTkxYWMzY2UwNDQzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xMjg0MGNiODY1MGYwNThmMmQyMjUyNzU5Y2ZmMWY4ZTJiZTM3OWI1ZDc2NjI5ZDY0YzhhNzlkMTVmM2RmZWQ5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7-tchoCfYEiTI3yXQ3EHZRKKYe1z6EIWj8xf1HF7v8M align="left")

# argo cd :

* Ab hum log argocd ko setup karlenge - go to the repository - installations
    
* Argocd ek cd tool - &gt; ho kubernates specific deployments key liye kaam kartha hey
    
* mai kaha install karunga - mai eks cluster pey karunga uska jo b kaam hey master mey rahega
    
* \- **Install and Configure ArgoCD (Master Machine**
    
    * **Create argocd namespace**
        
    
    ```bash
    kubectl create namespace argocd
    ```
    
    * **Apply argocd manifest**
        
    
    ```bash
    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    ```
    
    * **Make sure all pods are running in argocd namespace**
        
    
    ```bash
    watch kubectl get pods -n argocd
    ```
    
    * **Install argocd CLI**
        
    * ae jo mera argo cd hey - ae toh ui application agar same cheez cli po karni hey cli install karlethey
        
    
    ```bash
    sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64
    ```
    
    * **Provide executable permission**
        
    
    ```bash
    sudo chmod +x /usr/local/bin/argocd
    ```
    
    * **Check argocd services**
        
    
    ```bash
    kubectl get svc -n argocd
    ```
    
    * **Change argocd server's service from ClusterIP to NodePort**
        
    
    ```bash
    kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
    ```
    
    * **Confirm service is patched or not**
        
    
    ```bash
    kubectl get svc -n argocd
    ```
    
    * **Check the port where ArgoCD server is running and expose it on security groups of a worker node**
        
        ![image](https://private-user-images.githubusercontent.com/121779953/357419258-a2932e03-ebc7-42a6-9132-82638152197f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3NDE5MjU4LWEyOTMyZTAzLWViYzctNDJhNi05MTMyLTgyNjM4MTUyMTk3Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04ZWFmZGJiMmUyNzBhZWY1Nzk4NTkxYTcwYjk0ZDFlZTZmM2U1MjE2Y2Q2M2E4N2NlZDY5ZDI2OWIyNzNkZmI1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.mZf858Pt4GvliEheC4eDws6d58Vrzr1lrl0PwDQJer4 align="left")
        
    * **Access it on browser, click on advance and proceed with**
        
    
    ```bash
    <public-ip-worker>:<port>
    ```
    
    ![image](https://private-user-images.githubusercontent.com/121779953/357420638-29d9cdbd-5b7c-44b3-bb9b-1d091d042ce3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3NDIwNjM4LTI5ZDljZGJkLTViN2MtNDRiMy1iYjliLTFkMDkxZDA0MmNlMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMDc0N2MwMDI2NDk5NzQxNTgwMWQwMmIwMDUzNDZkYzdmZjIyOWY2YTY4MzBmMjFlZjFiMjk1Y2RjZWRhNGVlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZcvZ-23ewBgERrHsm3ivPZzGAODljpdtNkzC8cFzKb8 align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/357420865-08f4e047-e21c-4241-ba68-f9b719a4a39a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3NDIwODY1LTA4ZjRlMDQ3LWUyMWMtNDI0MS1iYTY4LWY5YjcxOWE0YTM5YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yNzdkYmM4OTA4YjQ2MDEyNThiZmYzMjFlY2Q0OWQzZTAxZTgxMDU5ZWMzOTc3MGZkYjJmMWFkNWJhMGRkNDEzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.xG8CJqgP-ScIstmMrP9T7-A5zno-q_TjqouGXU0z5Po align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/357421043-1ffa85c3-9055-49b4-aab0-0947b95f0dd2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU3NDIxMDQzLTFmZmE4NWMzLTkwNTUtNDliNC1hYWIwLTA5NDdiOTVmMGRkMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YTcwODdkZTc5MWI1MjA4ODU3ZWViNWU0ZDU5YmRjODY3MDlmNjA3OWM1MmUxZjZhOWEwYTE2MmM2N2UyNjBjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PpWET-BDPvB-gs24LTcl0o0o8XXEM-ny2l0fKVz552I align="left")
    
    * **agar Fetch the initial password of argocd server**
        
    
    ```bash
    kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
    ```
    
    * **Username: admin**
        
    * **Now, go to <mark>User Info</mark> and update your argocd password**
        
    * sign in karlo abhi → go to user info - update password .
        
    * abhi apney ko argocd ko b setup karna hey → settings - repositories
        
    * argocd aek delivery tool hey github hey sey kubernates manifest file lekey aatha hey - aur cluster pey update kar detha hey
        
    * toh mujhey ek repository chahiye hogi aur cluster chahiye hoga - &gt; connect repo → https - &gt; project name -default -→ clone url give here -→ conect
        
    * aisa samjo dockerhub credentails do jagah pey docker push karma hey - is valey stage pey mere wala account pey karna next stag emey dusri vala stage pey karna hey -- &gt; toh mai shared libraries use karlunga as a function vo function mai call karletha hun
        
    * same code ko multiple pipelines mey share kar sakthey ho
        

* **Now again, Go to <mark>Manage Jenkins --&gt; System</mark> and search for Global Trusted Pipeline Libraries:&lt;/b**
    
    ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748690653898/3dbbad03-6bf0-4f97-88eb-55eaacee0b26.png align="center")
    
* [https://github.com/DevMadhup/Jenkins\_SharedLib.git](https://github.com/DevMadhup/Jenkins_SharedLib.git)
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358121707-874b2e03-49b9-4c26-9b0f-bd07ce70c0f1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIxNzA3LTg3NGIyZTAzLTQ5YjktNGMyNi05YjBmLWJkMDdjZTcwYzBmMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTEwOTU4MmY2ZGI4NWQ5NmQwNTIyMzdiZTU2Y2U2OWE2ZjJmY2U5YTBjNTk3ZDVhMzIxY2I3MDdmYTA0NzRmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kluSBZmnFl7bdWG2SU_hOGUD9IJWiC3f82Bycf922uo align="left")
    
    * agar ae mai kisi aur node pey chalana hey toh mai label diunga
        
    * environment - sonar\_home : sonar kiun diye → kiunki agar aap apney manage jenkins - tools pey javige - sonarqube tool ko sonar name sey diye hey
        
    * hamara jo project hey - ismey ae frontend - ae backend hey
        
        * toh backend ki image and front end ki image change huegi kabhi na kabhi - isi liye ae humlog parameters liyenge -
            
        * lets say version 4.7 chahiye ,mai yaha pey tags dal saktha hun toh vo vala build hojayega parameters through
            
        * usko imagetag
            
        * phir trivy , owasp , sonar analysis , sonar quality gate everything taken fron shared library
            
        * Ecporting env variables : aisa samjo ki ae jo project hey - backend - mai aapko docker compose through samjatha hun
            
        * is project mey kithni services hey - 4 services - &gt; mongodb : container namee → image ka name: mongo → volume
            
        * aur ek - backend container - name → image: build./backend → env\_file: is ka env file hey backedn file mey env file hey usmey ip port number is key environmnrt specific address hey kuch variables hey
            
        * vo file mey → ip alag hey mera ip alag hey isliye ek directory hey automations
            
        * push to docker hub shared libraries - docker push karneey liye we need credentials - docker hub pey javo - go to my account settings - aur yaha pey personal access token - generate -new-token - read write access deno generate kardo - paste the token in jenkins - managejenkins - credentials
            
    * Argo cd ka kya kaam hey - github sey manifest lekey cluster mey deploy kartha hey
        
    * how to ensure ki github pey hamari our manifest files updated hey .
        
    * deployment depends on the manifest file , if we do the continuos delivery cd - of manifest files and argocd us manifest files ko lekey deploy kardega
        
    * jo b docker image version deyegey hum us image tag sey ci ney docker image ko scan build , sonarqube aur push karega docker hub , ab cd pipeline u docker image ko kubernates manifest file mey update karega
        
    * iskey badh argocd ney us yaml files ko deploy kar dega eks-cluster mey
        
* argocd ka kaam simple hey - manifest lena aur deploy karna
    
* GitOps - -→ Gitops is a practice in which the code is basically pulled from github repo through that repo there are tools like argocd directly rely on git code not any pipeline .
    
    ```bash
    @Library('Shared') _
    pipeline {
        agent {label 'Node'}
        
        environment{
            SONAR_HOME = tool "Sonar"
        }
        
        parameters {
            string(name: 'FRONTEND_DOCKER_TAG', defaultValue: '', description: 'Setting docker image for latest push')
            string(name: 'BACKEND_DOCKER_TAG', defaultValue: '', description: 'Setting docker image for latest push')
        }
        
        stages {
            stage("Validate Parameters") {
                steps {
                    script {
                        if (params.FRONTEND_DOCKER_TAG == '' || params.BACKEND_DOCKER_TAG == '') {
                            error("FRONTEND_DOCKER_TAG and BACKEND_DOCKER_TAG must be provided.")
                        }
                    }
                }
            }
            stage("Workspace cleanup"){
                steps{
                    script{
                        cleanWs()
                    }
                }
            }
            
            stage('Git: Code Checkout') {
                steps {
                    script{
                        code_checkout("https://github.com/LondheShubham153/Wanderlust-Mega-Project.git","main")
                    }
                }
            }
            
            stage("Trivy: Filesystem scan"){
                steps{
                    script{
                        trivy_scan()
                    }
                }
            }
    
            stage("OWASP: Dependency check"){
                steps{
                    script{
                        owasp_dependency()
                    }
                }
            }
            
            stage("SonarQube: Code Analysis"){
                steps{
                    script{
                        sonarqube_analysis("Sonar
    ","wanderlust","wanderlust")
                    }
                }
            }
            
            stage("SonarQube: Code Quality Gates"){
                steps{
                    script{
                        sonarqube_code_quality()
                    }
                }
            }
            
            stage('Exporting environment variables') {
                parallel{
                    stage("Backend env setup"){
                        steps {
                            script{
                                dir("Automations"){
                                    sh "bash updatebackendnew.sh"
                                }
                            }
                        }
                    }
                    
                    stage("Frontend env setup"){
                        steps {
                            script{
                                dir("Automations"){
                                    sh "bash updatefrontendnew.sh"
                                }
                            }
                        }
                    }
                }
            }
            
            stage("Docker: Build Images"){
                steps{
                    script{
                            dir('backend'){
                                docker_build("wanderlust-backend-beta","${params.BACKEND_DOCKER_TAG}","trainwithshubham")
                            }
                        
                            dir('frontend'){
                                docker_build("wanderlust-frontend-beta","${params.FRONTEND_DOCKER_TAG}","trainwithshubham")
                            }
                    }
                }
            }
            
            stage("Docker: Push to DockerHub"){
                steps{
                    script{
                        docker_push("wanderlust-backend-beta","${params.BACKEND_DOCKER_TAG}","trainwithshubham") 
                        docker_push("wanderlust-frontend-beta","${params.FRONTEND_DOCKER_TAG}","trainwithshubham")
                    }
                }
            }
        }
        post{
            success{
                archiveArtifacts artifacts: '*.xml', followSymlinks: false
                build job: "Wanderlust-CD", parameters: [
                    string(name: 'FRONTEND_DOCKER_TAG', value: "${params.FRONTEND_DOCKER_TAG}"),
                    string(name: 'BACKEND_DOCKER_TAG', value: "${params.BACKEND_DOCKER_TAG}")
                ]
            }
        }
    }
    ```
    
    ```bash
    version: "3.8"
    services:
      mongodb:
        container_name: mongo-service
        image: mongo:latest
        volumes:
          - ./backend/data:/data
        ports:
          - "27017:27017"
    
      backend:
        container_name: backend
        build: ./backend
        env_file:
          - ./backend/.env.docker
        ports:
          - "31100:8080"
        depends_on:
          - mongodb
    
      frontend:
        container_name: frontend
        build: ./frontend
        env_file:
          - ./frontend/.env.docker
        ports:
          - "5173:5173"
    
      redis:
        container_name: redis-service
        restart: unless-stopped
        image: redis:7.0.5-alpine 
        expose:
            - 6379
        depends_on:
          - mongodb
    
    volumes:
      data:
    
    -------------------------------------
    updatedbackendenv.sh
    
    #!/bin/bash
    
    # Set the Instance ID and path to the .env file
    INSTANCE_ID="i-030da7d31a1dbbffc"
    
    # Retrieve the public IP address of the specified EC2 instance
    ipv4_address=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)
    
    # Path to the .env file
    file_to_find="../backend/.env.docker"
    
    # Check the current FRONTEND_URL in the .env file
    current_url=$(sed -n "4p" $file_to_find)
    
    # Update the .env file if the IP address has changed
    if [[ "$current_url" != "FRONTEND_URL=\"http://${ipv4_address}:5173\"" ]]; then
        if [ -f $file_to_find ]; then
            sed -i -e "s|FRONTEND_URL.*|FRONTEND_URL=\"http://${ipv4_address}:5173\"|g" $file_to_find
        else
            echo "ERROR: File not found."
        fi
    fi
    
    -------
    --------------
    updatefrontendenv.sh
    
    #!/bin/bash
    
    # Set the Instance ID and path to the .env file
    INSTANCE_ID="i-030da7d31a1dbbffc"
    
    # Retrieve the public IP address of the specified EC2 instance
    ipv4_address=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)
    
    # Path to the .env file
    file_to_find="../frontend/.env.docker"
    
    # Check the current VITE_API_PATH in the .env file
    current_url=$(cat $file_to_find)
    
    # Update the .env file if the IP address has changed
    if [[ "$current_url" != "VITE_API_PATH=\"http://${ipv4_address}:31100\"" ]]; then
        if [ -f $file_to_find ]; then
            sed -i -e "s|VITE_API_PATH.*|VITE_API_PATH=\"http://${ipv4_address}:31100\"|g" $file_to_find
        else
            echo "ERROR: File not found."
        fi
    fi
    ```
    
    ```bash
    @Library('Shared') _
    pipeline {
        agent {label 'Node'}
        
        parameters {
            string(name: 'FRONTEND_DOCKER_TAG', defaultValue: '', description: 'Frontend Docker tag of the image built by the CI job')
            string(name: 'BACKEND_DOCKER_TAG', defaultValue: '', description: 'Backend Docker tag of the image built by the CI job')
        }
    
        stages {
            stage("Workspace cleanup"){
                steps{
                    script{
                        cleanWs()
                    }
                }
            }
            
            stage('Git: Code Checkout') {
                steps {
                    script{
                        code_checkout("https://github.com/LondheShubham153/Wanderlust-Mega-Project.git","main")
                    }
                }
            }
            
            stage('Verify: Docker Image Tags') {
                steps {
                    script{
                        echo "FRONTEND_DOCKER_TAG: ${params.FRONTEND_DOCKER_TAG}"
                        echo "BACKEND_DOCKER_TAG: ${params.BACKEND_DOCKER_TAG}"
                    }
                }
            }
            
            
            stage("Update: Kubernetes manifests"){
                steps{
                    script{
                        dir('kubernetes'){
                            sh """
                                sed -i -e s/wanderlust-backend-beta.*
    /wanderlust-backend-beta:${params.BACKEND_DOCKER_TAG}/g backend.yaml
                            """
                        }
                        
                        dir('kubernetes'){
                            sh """
                                sed -i -e s/wanderlust-frontend-beta.*/wanderlust-frontend-beta:${params.FRONTEND_DOCKER_TAG}/g frontend.yaml
                            """
                        }
                        
                    }
                }
            }
            
            stage("Git: Code update and push to GitHub"){
                steps{
                    script{
                        withCredentials([gitUsernamePassword(credentialsId: 'Github-cred', gitToolName: 'Default')]) {
                            sh '''
                            echo "Checking repository status: "
                            git status
                        
                            echo "Adding changes to git: "
                            git add .
                            
                            echo "Commiting changes: "
                            git commit -m "Updated environment variables"
                            
                            echo "Pushing changes to github: "
                            git push https://github.com/LondheShubham153/Wanderlust-Mega-Project.git main
                        '''
                        }
                    }
                }
            }
        }
      post {
            success {
                script {
                    emailext attachLog: true,
                    from: 'trainwithshubham@gmail.com',
                    subject: "Wanderlust Application has been updated and deployed - '${currentBuild.result}'",
                    body: """
                        <html>
                        <body>
                            <div style="background-color: #FFA07A; padding: 10px; margin-bottom: 10px;">
                                <p style="color: black; font-weight: bold;">Project: ${env.JOB_NAME}</p>
                            </div>
                            <div style="background-color: #90EE90; padding: 10px; margin-bottom: 10px;">
                                <p style="color: black; font-weight: bold;">Build Number: ${env.BUILD_NUMBER}</p>
                            </div>
                            <div style="background-color: #87CEEB; padding: 10px; margin-bottom: 10px;">
                                <p style="color: black; font-weight: bold;">URL: ${env.BUILD_URL}</p>
                            </div>
                        </body>
                        </html>
                """,
                to: 'trainwithshubham@gmail.com',
                mimeType: 'text/html'
                }
            }
          failure {
                script {
                    emailext attachLog: true,
                    from: 'trainwithshubham@gmail.com',
                    subject: "Wanderlust Application build failed - '${currentBuild.result}'",
                    body: """
                        <html>
                        <body>
                            <div style="background-color: #FFA07A; padding: 10px; margin-bottom: 10px;">
                                <p style="color: black; font-weight: bold;">Project: ${env.JOB_NAME}</p>
                            </div>
                            <div style="background-color: #90EE90; padding: 10px; margin-bottom: 10px;">
                                <p style="color: black; font-weight: bold;">Build Number: ${env.BUILD_NUMBER}</p>
                            </div>
                        </body>
                        </html>
                """,
                to: 'trainwithshubham@gmail.com',
                mimeType: 'text/html'
                }
            }
        }
    }
    ```
    
* ---
    
    ---
    
    \-
    
* **Now, go to github repository and under <mark>Automations</mark> directory update the <mark>instance-id</mark> field on both the <mark>updatefrontendnew.sh updatebackendnew.sh</mark> with the k8s worker's instance id**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358123023-3cb044b4-df88-4d68-bf7c-775cf78d5bf2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIzMDIzLTNjYjA0NGI0LWRmODgtNGQ2OC1iZjdjLTc3NWNmNzhkNWJmMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZDk3NzQ4NTIzMjkxOTk1MWU2OGQwNzZiNGExZjdkOGI4N2M1NjZmNGY3MWY3YzFhYzAxNTJmYzRiY2QxNDZmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JhLdvfvLd_4RMG5mgJaqvrPDQ7fwMh2AROgFtnLUZ6g align="left")
    
* **Navigate to <mark>Manage Jenkins --&gt; credentials</mark> and add credentials for docker login to push docker image:**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358123993-1a8287fc-b205-4156-8342-3f660f15e8fa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIzOTkzLTFhODI4N2ZjLWIyMDUtNDE1Ni04MzQyLTNmNjYwZjE1ZThmYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZDVmMmQwMDAxYWZlMmQwNGMzMzgyNmQ3NDRhNzBmMTI2NWU4ZTlkYjJjMjA5NmNlYWY0YWYzOTIwMjQwMzIwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HRF65YDSGNiE-NBxKHqp_9QK8R9OP8DblRK3VwxNztM align="left")
    
* ae sirf CI hey ae success hua then only CD karo - samja
    
    * Now create a pipeline
        
* **Create a <mark>Wanderlust-CI</mark> pipeline**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358123234-55c7b611-3c20-445f-a49c-7d779894e232.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4MTIzMjM0LTU1YzdiNjExLTNjMjAtNDQ1Zi1hNDljLTdkNzc5ODk0ZTIzMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZTBmY2M5ZWUzYTZhOTg1NGJkNmZkZDNmYjZjYzE5MTFiZDI4YTFlYzBhZDBlMzkxZjlmMGYzYTRmYmQ4ODhhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.fLszV77WOTj7WjSrRHkGio7XwDap_QO0vKEdmkkjXLY align="left")
    
* **Create one more pipeline <mark>Wanderlust-CD</mark>**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358482252-23f84a93-901b-45e3-b4e8-a12cbed13986.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDgyMjUyLTIzZjg0YTkzLTkwMWItNDVlMy1iNGU4LWExMmNiZWQxMzk4Ni5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NGEyZjVlODBkZjYxMmZhMzE3ODIwZGUyYTY5ZWM5NTc2ZGVjN2YzOTlmZGZjYTgyODU5OWQ2NmE1MGI5MmRhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.SBmoMO60Jg85BG124Hvt5GPrWc6v1k4ywl9atJUhGwU align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358482407-ac79f7e6-c02c-4431-bb3b-5c7489a93a63.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDgyNDA3LWFjNzlmN2U2LWMwMmMtNDQzMS1iYjNiLTVjNzQ4OWE5M2E2My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lYTkzODU2OTU3Y2IzNWQxOGNmNGNjNDcwZGM2YjQyNmQzZjJkOWNjZmIzOTFiNjc0YjVkMzJkOGEwNzhhMTM2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9._qWTqR5JeGvhCEXB6njWMOyHmlwhP0ZJ6Pf9sqhwn9k align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358482633-46a5937f-e06e-4265-ac0f-42543576a5cd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDgyNjMzLTQ2YTU5MzdmLWUwNmUtNDI2NS1hYzBmLTQyNTQzNTc2YTVjZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZjhhMDk3OTYzMDUxMzY0MzljNTA0YTFmOGNjZTQ1NGYxMWY3N2Y1YWM4YmMyYzIwOWZhNmU4YWNiNzJiOTlmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.i36twuR057dizohtoGK-DxGZY8TK8cWIRKNJt-lGpxQ align="left")
    
* deploy kaisa karega- argocd - aapka ae jo cluster hey us cluster ko argocd key sath connect karna padtha hey
    
* sabsey pehley
    
* argocd login url —usernamme admin → y → password
    
* argocd cluster list
    

* **Provide permission to docker socket so that docker build and push command do not fail (Jenkins Worker)**
    

```bash
chmod 777 /var/run/docker.sock
```

[![image](https://private-user-images.githubusercontent.com/121779953/358484969-e231c62a-7adb-4335-b67e-480758713dbf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDg0OTY5LWUyMzFjNjJhLTdhZGItNDMzNS1iNjdlLTQ4MDc1ODcxM2RiZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04OGExMDNjMGE1YWEzNTIzNDk3NTljM2IxMTJhYTI2ZWI3Y2ZiZjc2OWZlNTZmZTVmYzhmMjI2ZjJkZmJlN2QzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.VPlj5kL-v6vudsnMXrlq_tLgWsEDxpjPPP70QqWNBPQ align="left")](https://private-user-images.githubusercontent.com/121779953/358484969-e231c62a-7adb-4335-b67e-480758713dbf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDg0OTY5LWUyMzFjNjJhLTdhZGItNDMzNS1iNjdlLTQ4MDc1ODcxM2RiZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04OGExMDNjMGE1YWEzNTIzNDk3NTljM2IxMTJhYTI2ZWI3Y2ZiZjc2OWZlNTZmZTVmYzhmMjI2ZjJkZmJlN2QzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.VPlj5kL-v6vudsnMXrlq_tLgWsEDxpjPPP70QqWNBPQ)

* **Go to Master Machine and add our own eks cluster to argocd for application deployment using cli**
    
    * **Login to argoCD from CLI**
        
    
    ```bash
     argocd login 52.53.156.187:32738 --username admin
    ```
    

**Tip**

52.53.156.187:32738 --&gt; This should be your argocd url

[![image](https://private-user-images.githubusercontent.com/121779953/358488344-7d05e5ca-1a16-4054-a321-b99270ca0bf9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDg4MzQ0LTdkMDVlNWNhLTFhMTYtNDA1NC1hMzIxLWI5OTI3MGNhMGJmOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wM2QwMjNkYTRlMzYyNzg3YmVmODYwMzMzN2IwZWM5ODcxNzQ4YTY5YmVjZTY5MGY2ZDBiZmM5MzRkZGZkOWM3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gMmog8PZCOxINHYJWAUKJ1dhzLJneb5xl48TU6oERv0 align="left")](https://private-user-images.githubusercontent.com/121779953/358488344-7d05e5ca-1a16-4054-a321-b99270ca0bf9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDg4MzQ0LTdkMDVlNWNhLTFhMTYtNDA1NC1hMzIxLWI5OTI3MGNhMGJmOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wM2QwMjNkYTRlMzYyNzg3YmVmODYwMzMzN2IwZWM5ODcxNzQ4YTY5YmVjZTY5MGY2ZDBiZmM5MzRkZGZkOWM3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.gMmog8PZCOxINHYJWAUKJ1dhzLJneb5xl48TU6oERv0)

* **Check how many clusters are available in argocd**
    

```bash
argocd cluster list
```

[![image](https://private-user-images.githubusercontent.com/121779953/358492051-76fe7a45-e05c-422d-9652-bdaee02d630f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyMDUxLTc2ZmU3YTQ1LWUwNWMtNDIyZC05NjUyLWJkYWVlMDJkNjMwZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YTFhNzUwMWFkNzA1ODcxYTE5ZGY4ZDJhMDE5ZDExZWU1YTAwMjdlMzgzMzRiZDQ5ZDI1ZjZiNjNhYTkwMTkzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kn9qN78ZAXGaVbekTCdcI1bgr-YL_hzxvAka_QmZp-8 align="left")](https://private-user-images.githubusercontent.com/121779953/358492051-76fe7a45-e05c-422d-9652-bdaee02d630f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyMDUxLTc2ZmU3YTQ1LWUwNWMtNDIyZC05NjUyLWJkYWVlMDJkNjMwZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YTFhNzUwMWFkNzA1ODcxYTE5ZGY4ZDJhMDE5ZDExZWU1YTAwMjdlMzgzMzRiZDQ5ZDI1ZjZiNjNhYTkwMTkzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.kn9qN78ZAXGaVbekTCdcI1bgr-YL_hzxvAka_QmZp-8)

* **Get your cluster name**
    

```bash
kubectl config get-contexts
```

[![image](https://private-user-images.githubusercontent.com/121779953/358492383-4cab99aa-cef3-45f6-9150-05004c2f09f8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyMzgzLTRjYWI5OWFhLWNlZjMtNDVmNi05MTUwLTA1MDA0YzJmMDlmOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNDE3MTczMzJmNWI3YWEyYTQ5NzdlNWFiMjNkYjliM2VkOTg4NjAzZDU2MTdhNjM0M2E0NTQyZTgzN2Q0OGQ2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.UxnuOQ2eA-LSNeOaiqXV9Q4k-GEqjuGduLhTjLJqQhI align="left")](https://private-user-images.githubusercontent.com/121779953/358492383-4cab99aa-cef3-45f6-9150-05004c2f09f8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyMzgzLTRjYWI5OWFhLWNlZjMtNDVmNi05MTUwLTA1MDA0YzJmMDlmOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNDE3MTczMzJmNWI3YWEyYTQ5NzdlNWFiMjNkYjliM2VkOTg4NjAzZDU2MTdhNjM0M2E0NTQyZTgzN2Q0OGQ2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.UxnuOQ2eA-LSNeOaiqXV9Q4k-GEqjuGduLhTjLJqQhI)

* **Add your cluster to argocd**
    

```bash
argocd cluster add Wanderlust@wanderlust.us-west-1.eksctl.io --name wanderlust-eks-cluster
```

**Tip**

[Wanderlust@wanderlust.us-west-1.eksctl.io](mailto:Wanderlust@wanderlust.us-west-1.eksctl.io) --&gt; This should be your EKS Cluster Name.

[![image](https://private-user-images.githubusercontent.com/121779953/358492765-0f36aafd-bab9-4ef8-ba5d-3eb56d850604.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyNzY1LTBmMzZhYWZkLWJhYjktNGVmOC1iYTVkLTNlYjU2ZDg1MDYwNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MjQzMmY1ZGEwNDRmNzE4YzRlMTk0MTI0NWM3YTZmOTNkYThmOGFhYTk0NmUzNmRjNTEwZGM0OTcwMDA5ZDUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.hq6nCj3bzUlW_uKxD1lAI7OF-cw3_afu19iTyXFgYRs align="left")](https://private-user-images.githubusercontent.com/121779953/358492765-0f36aafd-bab9-4ef8-ba5d-3eb56d850604.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkyNzY1LTBmMzZhYWZkLWJhYjktNGVmOC1iYTVkLTNlYjU2ZDg1MDYwNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MjQzMmY1ZGEwNDRmNzE4YzRlMTk0MTI0NWM3YTZmOTNkYThmOGFhYTk0NmUzNmRjNTEwZGM0OTcwMDA5ZDUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.hq6nCj3bzUlW_uKxD1lAI7OF-cw3_afu19iTyXFgYRs)

* **Once your cluster is added to argocd, go to argocd console <mark>Settings --&gt; Clusters</mark> and verify it**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358496259-4490b632-19fd-4499-a341-fabf8488d13c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk2MjU5LTQ0OTBiNjMyLTE5ZmQtNDQ5OS1hMzQxLWZhYmY4NDg4ZDEzYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yM2Y1MmFlOWI1NDJiMWM2MTgzMzQzMGExNjU5ODUzYmNlOGQ0ZmZjNmYzMDcwMmUyNDM4Mzg5YzQzZjNmNzI5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PTYlBUA0mTYdsl-hcr9DWdbAE3dWiWZEV5MOLgjX4Ag align="left")
    
* **Go to <mark>Settings --&gt; Repositories</mark> and click on <mark>Connect repo</mark>**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358486795-cc8728e5-546b-4c46-bd4c-538f4cd6a63d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDg2Nzk1LWNjODcyOGU1LTU0NmItNGM0Ni1iZDRjLTUzOGY0Y2Q2YTYzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMGEyMjBkZDc1ZThlYzRkM2JkYmQ0Y2VlMzFlMzBiZWQzOWYzZGNjZjU3MzJhYjFjYzIyODNiMWRiNzcwNmQ1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.i6AXiJPmTgN0AfQ4ZnlDKUbMPIwlD-C6QWjvOjvo0Vg align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358493734-eb3646e2-db84-4439-a11a-d4168080d9cc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkzNzM0LWViMzY0NmUyLWRiODQtNDQzOS1hMTFhLWQ0MTY4MDgwZDljYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05YzMyZDY5ZDYyN2JkMGE2YjgyMjE1ZmI3MTEyYzc3ZmYzMDFmMmNhYzE2YTUwMTdhMGI4NGIwOTlhYjAxYmZhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Q2KweK-jA8P0vwg_o-Dvka4vUOWYJp4JAIKYo6g8j90 align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358493880-a07f8703-5ef3-4524-aaa7-39a139335eb7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDkzODgwLWEwN2Y4NzAzLTVlZjMtNDUyNC1hYWE3LTM5YTEzOTMzNWViNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wNTdiZTdhYmFhM2ExOGY1MGRmNWEyMTljOTYwYzE0ZDk0NzM4NmJkZGRhMzMzYWM2NmQ3ZDA2Y2Q3ZTVkNDVhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ASuMUkbHh3RvnDGAKjzsBSU0cy7cZUgBCTLXayjJpsc align="left")
    

**Note**

Connection should be successful

* **Now, go to <mark>Applications</mark> and click on <mark>New App</mark>**
    

[![image](https://private-user-images.githubusercontent.com/121779953/358495870-ec2d7a51-d78f-4947-a90b-258944ad59a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk1ODcwLWVjMmQ3YTUxLWQ3OGYtNDk0Ny1hOTBiLTI1ODk0NGFkNTlhMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZjI4OGUzMWVjMTEzMzcyNTgxYTY2MmJhZGU3NWUxM2RhMGYzYjU1ZGNjOTc0ZjQ5OGE3NTcwZTFjOGY5MDgxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-s2-M3a-ceAAfMDerkTd1vIIKW5eqhBoILRPO6av_Dc align="left")](https://private-user-images.githubusercontent.com/121779953/358495870-ec2d7a51-d78f-4947-a90b-258944ad59a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk1ODcwLWVjMmQ3YTUxLWQ3OGYtNDk0Ny1hOTBiLTI1ODk0NGFkNTlhMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZjI4OGUzMWVjMTEzMzcyNTgxYTY2MmJhZGU3NWUxM2RhMGYzYjU1ZGNjOTc0ZjQ5OGE3NTcwZTFjOGY5MDgxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-s2-M3a-ceAAfMDerkTd1vIIKW5eqhBoILRPO6av_Dc)

**Important**

Make sure to click on the <mark>Auto-Create Namespace</mark> option while creating argocd application

[![image](https://private-user-images.githubusercontent.com/121779953/358494979-55dcd3c2-5424-4efb-9bee-1c12bbf7f158.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk0OTc5LTU1ZGNkM2MyLTU0MjQtNGVmYi05YmVlLTFjMTJiYmY3ZjE1OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00YWVhNjEyOTViYzc4NzQ4MmZlYTMxYTNlODZlMTJjOTg2YTk4ZGI1NDkyOTE3MDY0M2Q1ZGYzODNhZWJmNzVhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.1zxw0zHeq_xPMowxU-8gDvFKATTymo3zyM71NgQ2EbI align="left")](https://private-user-images.githubusercontent.com/121779953/358494979-55dcd3c2-5424-4efb-9bee-1c12bbf7f158.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk0OTc5LTU1ZGNkM2MyLTU0MjQtNGVmYi05YmVlLTFjMTJiYmY3ZjE1OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00YWVhNjEyOTViYzc4NzQ4MmZlYTMxYTNlODZlMTJjOTg2YTk4ZGI1NDkyOTE3MDY0M2Q1ZGYzODNhZWJmNzVhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.1zxw0zHeq_xPMowxU-8gDvFKATTymo3zyM71NgQ2EbI)

* Destination select - cluster url and select namespace
    
* **Congratulations, your application is deployed on AWS EKS Cluster**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358496521-bc2d9680-fe00-49f9-81bf-93c5595c20cc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk2NTIxLWJjMmQ5NjgwLWZlMDAtNDlmOS04MWJmLTkzYzU1OTVjMjBjYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNTkxMjk0Y2Q2ZWU3Zjg3MzBlODJiMjIyZThhMDk2YjhiYTBhNzg4MDg0YmNmYWU0YmVmY2RjNTNiMGZhNjliJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.KmvvTrLwlzRBoOhKgBovdxd4R7B5U4lOGLOVXwc3KRU align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358497007-1ea9d486-656e-40f1-804d-2651efb54cf6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk3MDA3LTFlYTlkNDg2LTY1NmUtNDBmMS04MDRkLTI2NTFlZmI1NGNmNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ZGUyYjJiZmQ1NTE0NjZlZjhmNmNiOTUwMzIxZTE3NjZhYmIzZjcyYTRiY2MzMGU3MGY3YzMxODE0NjcwOGI5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.bMymLT8vGXYbdXw_-imryjgoZlA6GthgIwz1D4DpKr0 align="left")
    
* **Open port 31000 and 31100 on worker node and Access it on browser**
    

```bash
<worker-public-ip>:31000
```

[![image](https://private-user-images.githubusercontent.com/121779953/358497382-a4b2a4b4-e1aa-4b22-ac6b-f40003d0723a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk3MzgyLWE0YjJhNGI0LWUxYWEtNGIyMi1hYzZiLWY0MDAwM2QwNzIzYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZGU1MWI1MjEyNDZjZDM4ZDYzYzQzYjU5MGJlYzBlYzJiYzNmMmMzNzlhYWQ5ZjZhMjYwMTE0MWQ4MmFhZjU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.dVzrGEFx_P4yIeLizryKdTz9fcXj_-eAPrIWyVInN24 align="left")](https://private-user-images.githubusercontent.com/121779953/358497382-a4b2a4b4-e1aa-4b22-ac6b-f40003d0723a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NDk3MzgyLWE0YjJhNGI0LWUxYWEtNGIyMi1hYzZiLWY0MDAwM2QwNzIzYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mZGU1MWI1MjEyNDZjZDM4ZDYzYzQzYjU5MGJlYzBlYzJiYzNmMmMzNzlhYWQ5ZjZhMjYwMTE0MWQ4MmFhZjU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.dVzrGEFx_P4yIeLizryKdTz9fcXj_-eAPrIWyVInN24)

* **Email Notification**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/358525165-0ab1ef47-f939-4618-8651-6aa9274721f4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzU4NTI1MTY1LTBhYjFlZjQ3LWY5MzktNDYxOC04NjUxLTZhYTkyNzQ3MjFmNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02N2Y0MzY5OGFkNGNhYmEyMzU4Y2FkNTEzOWViZDZiOTU3NDMxMTI4YzQ3NDBlOWE1MzQwOTZjNzhlZWZjMDdlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.GH9LWhdFq6tsUqEAF8jsFhJuzT_m8TZoHnxx-vziOhQ align="left")
    

\# Meanwhile we will setup prometheus and grafana

* sab sey pehle ae samjo helm kya hotha hey - helm ek package manager
    
    * agar mujhey patha hey eks kya hey - eks is a kubernates service by aws webservice - uskey andar jo jo components humko patha hey
        
    * jo humko pata hey toh baar baar kiun edit karey - kya mai promethus .yaml mey ae saare configurations daldunga
        
    * helm mey ae saari configuration mey already dali hui hey , eks key components already helm mey hey
        
    * aapko helm install karna hey agar ./get-helm.sh run karenge na toh install hojatha hey helm
        
* * once pipeline deployment is done
        
* * jenkins mey ek iam role banana bhulge - iam - create a role - aws service - ec2→ specific role - admin access → ec2-wanderlust-role
        
    * is role ko master node pey attach karne wala - actions - security - modify iam role - select the iam role - and attach it .
        
    * now i will run v1.1.
        

kya aap grafana through dashnoards mey - merey k8s key namespaces key pods hey uska dashboard dikha sakthey ho

## **How to monitor EKS cluster, kubernetes components and workloads using prometheus and grafana via HELM (On Master machine)**

* **Install Helm Chart**
    

```bash
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
```

```bash
chmod 700 get_helm.sh
```

```bash
./get_helm.sh
```

* **Add Helm Stable Charts for Your Local Client**
    

```bash
helm repo add stable https://charts.helm.sh/stable
```

* **Add Prometheus Helm Repository**
    

```bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
```

* **Create Prometheus Namespace**
    

```bash
kubectl create namespace prometheus
```

```bash
kubectl get ns
```

* **Install Prometheus using Helm**
    

```bash
helm install stable prometheus-community/kube-prometheus-stack -n prometheus
```

* **Verify prometheus installation**
    

```bash
kubectl get pods -n prometheus
```

* **Check the services file (svc) of the Prometheus**
    

```bash
kubectl get svc -n prometheus
```

* **Expose Prometheus and Grafana to the external world through Node Port**
    

**Important**

change it from Cluster IP to NodePort after changing make sure you save the file and open the assigned nodeport to the service.

```bash
kubectl edit svc stable-kube-prometheus-sta-prometheus -n prometheus
```

[![image](https://private-user-images.githubusercontent.com/121779953/361246828-90f5dc11-23de-457d-bbcb-944da350152e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ2ODI4LTkwZjVkYzExLTIzZGUtNDU3ZC1iYmNiLTk0NGRhMzUwMTUyZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04MDVhMDE4NzkzNjhjZDhmMDkxMTEyODNmZmVlYzc4MGUwZWM2MmI5YWM3NzI1ZGRiZWUyZjMxMDE1MDUyOWY0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.blu4U0_ZdKQ6uQWc0Y6UBrOJIpU3xslnqtQfiETK4n0 align="left")](https://private-user-images.githubusercontent.com/121779953/361246828-90f5dc11-23de-457d-bbcb-944da350152e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ2ODI4LTkwZjVkYzExLTIzZGUtNDU3ZC1iYmNiLTk0NGRhMzUwMTUyZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04MDVhMDE4NzkzNjhjZDhmMDkxMTEyODNmZmVlYzc4MGUwZWM2MmI5YWM3NzI1ZGRiZWUyZjMxMDE1MDUyOWY0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.blu4U0_ZdKQ6uQWc0Y6UBrOJIpU3xslnqtQfiETK4n0)

* **Verify service**
    

```bash
kubectl get svc -n prometheus
```

* **Now,let’s change the SVC file of the Grafana and expose it to the outer world**
    

```bash
kubectl edit svc stable-grafana -n prometheus
```

[![image](https://private-user-images.githubusercontent.com/121779953/361246947-4a2afc1f-deba-48da-831e-49a63e1a8fb6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ2OTQ3LTRhMmFmYzFmLWRlYmEtNDhkYS04MzFlLTQ5YTYzZTFhOGZiNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mMmEzY2QzYmY1MTM0Y2M1MDMyODQwY2ExOGU3Mjk2OTIzOTdlZDdlNmJhYmYwYTliMTNjNDdhYTIyNTE2Y2M1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZnKwiL3vFVN82AOiGgLMVlRKw3TEtmyNSkc4XS7zzF0 align="left")](https://private-user-images.githubusercontent.com/121779953/361246947-4a2afc1f-deba-48da-831e-49a63e1a8fb6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ2OTQ3LTRhMmFmYzFmLWRlYmEtNDhkYS04MzFlLTQ5YTYzZTFhOGZiNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mMmEzY2QzYmY1MTM0Y2M1MDMyODQwY2ExOGU3Mjk2OTIzOTdlZDdlNmJhYmYwYTliMTNjNDdhYTIyNTE2Y2M1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZnKwiL3vFVN82AOiGgLMVlRKw3TEtmyNSkc4XS7zzF0)

* **Check grafana service**
    

```bash
kubectl get svc -n prometheus
```

* **Get a password for grafana**
    

```bash
kubectl get secret --namespace prometheus stable-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
```

**Note**

Username: admin

* **Now, view the Dashboard in Grafana**
    
    ![image](https://private-user-images.githubusercontent.com/121779953/361247153-d2e7ff2f-059d-48c4-92bb-9711943819c4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ3MTUzLWQyZTdmZjJmLTA1OWQtNDhjNC05MmJiLTk3MTE5NDM4MTljNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yYTgwOThkYWNlZWM4NjdjZGViZmJlYTUzY2NhZTRkYWRiYzYyZTM1MDhhNDNlZWVkMzAwMmU5MzVjNDllNzlmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZWmu8weiPPiscFK20bqPblsDfrXIn_4BO3cbIsB84qU align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/361247192-3d6652d0-7795-4fe9-8919-f33eac88db73.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ3MTkyLTNkNjY1MmQwLTc3OTUtNGZlOS04OTE5LWYzM2VhYzg4ZGI3My5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMWJhMWZlYWYwZmQ5MDU3NDRkZDRkMmE0MzMzM2NlNjcxNzZjYjcxZmVlNzc2MDVjZDk3NDZlNjdhMjdiZDdlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ntB-2wepdK6I7gXOr7z0lmuO6S5IR14wle779zadnwg align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/361247261-13321ee5-5d7b-4976-b409-25d3b865a42a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ3MjYxLTEzMzIxZWU1LTVkN2ItNDk3Ni1iNDA5LTI1ZDNiODY1YTQyYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMjVmMDA4ZTY0ODFmYTc5ZTY0MmVlMzY3Njc1NTM1NjViNTQ4YjM4MDJiOTQ3NWQ2ZWE3NjBmODY1MGU5NTVmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.hO1eB2AfPk6gJ9TqIG8tjahfgrvK2iltPnxMIurAdbk align="left")
    
    ![image](https://private-user-images.githubusercontent.com/121779953/361247331-75a22e4b-ae81-4cad-9c92-21dd90d126a8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDg2ODEzODMsIm5iZiI6MTc0ODY4MTA4MywicGF0aCI6Ii8xMjE3Nzk5NTMvMzYxMjQ3MzMxLTc1YTIyZTRiLWFlODEtNGNhZC05YzkyLTIxZGQ5MGQxMjZhOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwNTMxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDUzMVQwODQ0NDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hMDJiNTZlNTFlNTE3MDc2NmE0ZTE4MmIzZjhlZTZkNTdhYjU5Mjk2NzE5MDI5OGZlMTIxMjIzMzUxZjdmNGY5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ubIoIZvSIftgV-6BVZ94jVHcy7bOB7PFuokJc6tG6A8 align="left")
    

## **Clean Up**

* **Delete eks cluster**
    

```bash
eksctl delete cluster --name=wanderlust --region=us-west-1
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1748716924874/0fb1cdf2-9679-4ff2-a6df-d166427d70ad.png align="center")
