<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Complete Real time CI-CD devops project]]></title><description><![CDATA[Complete Real time CI-CD devops project]]></description><link>https://cicd-devops-project.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 08:08:35 GMT</lastBuildDate><atom:link href="https://cicd-devops-project.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[End-to-End Kubernetes Cluster Implementation with CI/CD Pipeline and Monitoring Tools]]></title><description><![CDATA[devops project]]></description><link>https://cicd-devops-project.hashnode.dev/end-to-end-kubernetes-cluster-implementation-with-cicd-pipeline-and-monitoring-tools</link><guid isPermaLink="true">https://cicd-devops-project.hashnode.dev/end-to-end-kubernetes-cluster-implementation-with-cicd-pipeline-and-monitoring-tools</guid><category><![CDATA[Devops]]></category><category><![CDATA[DevOps Journey]]></category><category><![CDATA[ci-cd]]></category><category><![CDATA[cicd]]></category><category><![CDATA[Jenkins]]></category><category><![CDATA[Grafana]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Kubernetes]]></category><dc:creator><![CDATA[Neha Sawant]]></dc:creator><pubDate>Fri, 01 Aug 2025 17:31:20 GMT</pubDate><content:encoded><![CDATA[<p><mark>Project structure:</mark></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754077784402/dbe82db6-3b0e-4470-8a9e-0ce83e2f242e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-stage-1"><mark>Stage 1:</mark></h3>
<ol>
<li><p><mark>Create Instances:</mark></p>
<ol>
<li>Edit security group:</li>
</ol>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753899409697/8a190229-5800-4c32-b10a-bf036e1f349b.png" alt class="image--center mx-auto" /></p>
<ol start="2">
<li>Create 3 VMs: Master, Slave-1, Slave-2</li>
</ol>
<ul>
<li>To create an Ubuntu EC2 instance in AWS, follow these steps:</li>
</ul>
<ol>
<li><p><strong>Sign in to the AWS Management Console</strong>:</p>
<ul>
<li><p>Go to the AWS Management Console at <a target="_blank" href="https://aws.amazon.com/console/">https://aws.amazon.com/console/.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Sign in with your AWS a</a>ccount cred<a target="_blank" href="https://aws.amazon.com/console/">entials.</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Navigate to EC2</strong>:</a></p>
<ul>
<li>Once logged in, navigate to the EC2 da<a target="_blank" href="https://aws.amazon.com/console/">shboard by typing "EC2" in the</a> search bar at the <a target="_blank" href="https://aws.amazon.com/console/">top or by selecting "Services" and then "EC2" unde</a>r the "Compute" section.</li>
</ul>
</li>
<li><p><strong>Launch Instance</strong>:</p>
<ul>
<li><p>Click on the "Instances" link in the EC2 dashboard sidebar.</p>
</li>
<li><p>Click the "Launch Insta<a target="_blank" href="https://aws.amazon.com/console/">nce" button.</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Choose an Amazon Machine Image (A</strong></a><strong>MI)</strong>:</p>
<ul>
<li><p>In the "Step 1: Choose a<a target="_blank" href="https://aws.amazon.com/console/">n Amazon Machine Image (AMI)" s</a>ection, se<a target="_blank" href="https://aws.amazon.com/console/">lect "Ubuntu" from the list of</a> available <a target="_blank" href="https://aws.amazon.com/console/">AMIs.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Choose the Ubuntu vers</a>ion you want to use. For example, "Ubuntu Server 20.04 LTS".</p>
</li>
<li><p>Click "Select".</p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Choose an Instance Type</strong>:</a></p>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">In</a> the "Step 2: Choose an Instance Type" section, select <a target="_blank" href="https://aws.amazon.com/console/">the instance type that fits your requirements. The default option (usually a t2.</a>micro instance) is suitable for testing and small workloads.</p>
</li>
<li><p>Click "Next: Configure Instance Details".</p>
</li>
</ul>
</li>
<li><p><strong>Configure Instance Details</strong>:</p>
<ul>
<li><p>Optionally, configure instan<a target="_blank" href="https://aws.amazon.com/console/">ce details such as network sett</a>ings, subnets, I<a target="_blank" href="https://aws.amazon.com/console/">AM role, etc. You can leave these settings as default for now.</a></p>
</li>
<li><p>Click "Next: Add Storage".</p>
</li>
</ul>
</li>
<li><p><strong>Add Storage</strong>:</p>
<ul>
<li><p>Specify the size of the root volume:25 (default is usually fi<a target="_blank" href="https://aws.amazon.com/console/">ne for testing purposes).</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Cl</a>i<a target="_blank" href="https://aws.amazon.com/console/">ck "Next: Add Tags".</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Add Tags</strong>:</a></p>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Optional</a>ly, add tags to your instance for better organization an<a target="_blank" href="https://aws.amazon.com/console/">d management.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Click "Next: Configure Security Group".</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Configure S</strong></a><strong>ecurity Group</strong>:</p>
<ul>
<li><p>In the "Step 6: Configure Securi<a target="_blank" href="https://aws.amazon.com/console/">ty Group" section, configure th</a>e security gro<a target="_blank" href="https://aws.amazon.com/console/">up to allow SSH access (port 22) from your IP address.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Yo</a>u may also want to allow other ports based on your requirements (e.g., HTTP, HTTPS) as in this pic</p>
</li>
<li><p>C<a target="_blank" href="https://aws.amazon.com/console/">lick "Review and Launch".</a></p>
</li>
</ul>
</li>
<li><p><strong>Review and Launch</strong>:</p>
<ul>
<li><p>Review the configuration of your instance.</p>
</li>
<li><p>Click <a target="_blank" href="https://aws.amazon.com/console/">"Launch".</a></p>
</li>
</ul>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/"><strong>Select Key Pair</strong>:</a></p>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">In the pop-up window, select an existing key pair</a> or create a new <a target="_blank" href="https://aws.amazon.com/console/">one.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Check the acknowledgment box.</a></p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Click "Launch Instances".</a></p>
</li>
</ul>
</li>
</ol>
<ol start="2">
<li><p><mark>Access your instance:</mark></p>
<ul>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">Download tool- MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home Edition</a></p>
</li>
<li><p>install it.</p>
</li>
<li><p><a target="_blank" href="https://aws.amazon.com/console/">sett</a>ings → configuration→ ssh → checked ssh keepalive</p>
</li>
<li><p>click on session → Give ip address of master → username: Ubuntu</p>
<p>  session name: Master</p>
</li>
<li><p>Create duplicate session for slave-1, slave-2, Dont forget to enter their ip address.</p>
</li>
<li><p>open master, slave-1, slave-2</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753947950074/4bb2ee78-f73c-4a65-82e1-11d030ef95fe.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Enter this command on 3 instance.</p>
<p>  #sudo su</p>
</li>
</ul>
</li>
<li><p><mark>Setup k8s cluster":</mark></p>
<ul>
<li><p>Create 1.sh on all three instance.</p>
<p>  #vi 1.sh</p>
<p>  Enter below data:</p>
<pre><code class="lang-bash">  <span class="hljs-comment">#Update System Packages [On Master &amp; Worker Node]</span>
  sudo apt-get update

  <span class="hljs-comment">#Install Docker[On Master &amp; Worker Node]</span>
  sudo apt install docker.io -y
  sudo chmod 666 /var/run/docker.sock

  <span class="hljs-comment">#Install Required Dependencies for Kubernetes[On Master &amp; Worker Node]</span>
  sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
  sudo mkdir -p -m 755 /etc/apt/keyrings

  <span class="hljs-comment">#Add Kubernetes Repository and GPG Key[On Master &amp; Worker Node]</span>
  curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  <span class="hljs-built_in">echo</span> <span class="hljs-string">'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /'</span> | sudo tee /etc/apt/sources.list.d/kubernetes.list

  <span class="hljs-comment">#Give permission to execute:</span>
  chmod +x 1.sh
  ls

  <span class="hljs-comment">#run the file</span>
  ./1.sh

  <span class="hljs-comment">#Update Package List[On Master &amp; Worker Node]</span>
  sudo apt update

  <span class="hljs-comment">#Install Kubernetes Components[On Master &amp; Worker Node]</span>
  sudo apt install -y kubeadm=1.28.1-1.1 kubelet=1.28.1-1.1 kubectl=1.28.1-1.1
</code></pre>
<pre><code class="lang-bash">  <span class="hljs-comment">#Initialize Kubernetes Master Node [On MasterNode]</span>
  sudo kubeadm init --pod-network-cidr=10.244.0.0/16
</code></pre>
</li>
<li><p>you will get output like this:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753948428185/083f29b8-0181-4239-ac1a-659e4ad6cafe.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>and copy this and run on worker nodes i.e. slave-1, slave-2. You can save this command if you want to add another virtual machine as a worker node you can use this.</p>
</li>
<li><p>You will get output like this on both slave</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753948502834/229c32fe-e5a3-43ef-aaa7-d0e4863dbe78.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">  <span class="hljs-comment">#Configure Kubernetes Cluster [On MasterNode]</span>
  mkdir -p <span class="hljs-variable">$HOME</span>/.kube

  <span class="hljs-comment">#containing all info about k8s</span>
  sudo cp -i /etc/kubernetes/admin.conf <span class="hljs-variable">$HOME</span>/.kube/config
  sudo chown $(id -u):$(id -g) <span class="hljs-variable">$HOME</span>/.kube/config

  <span class="hljs-comment">#Deploy Networking Solution (Calico) [On MasterNode]</span>
  kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

  <span class="hljs-comment">#Deploy Ingress Controller (NGINX) [On MasterNode]</span>
  kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.49.0/deploy/static/provider/baremetal/deploy.yaml
</code></pre>
<pre><code class="lang-bash">  <span class="hljs-comment">#to see all worker node</span>
  kubectl get nodes
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753949265762/57c9dd95-2b32-4efa-8f16-03409454b4df.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p><mark>Security scan of k8s cluster:</mark></p>
<ul>
<li><p>Visit this site: github.com/shopify/kubeaudit/releases</p>
</li>
<li><p>copy this link <a target="_blank" href="https://github.com/Shopify/kubeaudit/releases/download/v0.22.2/kubeaudit_0.22.2_linux_amd64.tar.gz">https://github.com/Shopify/kubeaudit/releases/download/v0.22.2/kubeaudit_0.22.2_linux_amd64.tar.gz</a></p>
<pre><code class="lang-bash">  <span class="hljs-comment">#download this on master node</span>
  wget https://github.com/Shopify/kubeaudit/releases/download/v0.22.2/kubeaudit_0.22.2_linux_amd64.tar.gz

  tar -xvzf kubeaudit_0.22.2_linux_amd64.tar.gz

  <span class="hljs-comment">#move this executable file:</span>
  sudo mv kubeaudit /usr/<span class="hljs-built_in">local</span>/bin/

  <span class="hljs-comment">#to audit Kubernetes clusters against common security</span>
  kubeaudit all
</code></pre>
</li>
</ul>
</li>
<li><p><mark>Create VM for jenkins, sonar and nexus.</mark></p>
<p> Create 2 instance for sonarcube server and nexus server.</p>
<p> AMI: ubuntu server 20.04LTS</p>
<p> Instance type: t2.medium</p>
<p> key: key.pem</p>
<p> security group: default</p>
<p> storage: 20</p>
<p> launch instance</p>
<p> name: SonarQube, Nexus</p>
<p> Create instance for jenkins:</p>
<p> AMI: ubuntu server 20.04LTS</p>
<p> Instance type: t2.large</p>
<p> key: key.pem</p>
<p> security group: default</p>
<p> storage: 30</p>
<p> launch instance</p>
<p> name: jenkins</p>
<p> launch instance</p>
<p> Create duplicate session for three of them in MobaXterm:</p>
<p> Enter ip address, session name.</p>
</li>
<li><p><mark>Setup sonarQube and Nexus:</mark></p>
<pre><code class="lang-bash"> <span class="hljs-comment"># Update package manager repositories</span>
 sudo apt-get update

 <span class="hljs-comment"># Install necessary dependencies</span>
 sudo apt-get install -y ca-certificates curl

 <span class="hljs-comment"># Create directory for Docker GPG key</span>
 sudo install -m 0755 -d /etc/apt/keyrings

 <span class="hljs-comment"># Download Docker's GPG key</span>
 sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

 <span class="hljs-comment"># Ensure proper permissions for the key</span>
 sudo chmod a+r /etc/apt/keyrings/docker.asc

 <span class="hljs-comment"># Add Docker repository to Apt sources</span>
 <span class="hljs-built_in">echo</span> <span class="hljs-string">"deb [arch=<span class="hljs-subst">$(dpkg --print-architecture)</span> signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
 <span class="hljs-subst">$(. /etc/os-release &amp;&amp; echo <span class="hljs-string">"<span class="hljs-variable">$VERSION_CODENAME</span>"</span>)</span> stable"</span> | \
 sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

 <span class="hljs-comment"># Update package manager repositories</span>
 sudo apt-get update

 sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 

 sudo chmod 666 /var/run/docker.sock

 <span class="hljs-comment">#check if docker is present or not.</span>
 docker pull hello-world

 <span class="hljs-comment">#Create Sonarqube Docker container</span>
 <span class="hljs-comment">#To run SonarQube in a Docker container with the provided command, you can follow these steps:</span>
 <span class="hljs-comment">#Run the following command on SonarQube instance:</span>
 docker run -d --name sonar -p 9000:9000 sonarqube:lts-community
 docker ps

 <span class="hljs-comment">#Create Nexus using docker container</span>
 <span class="hljs-comment">#Run the following command on Nexus instance:</span>
 docker run -d --name Nexus -p 8081:8081 sonartype/nexus3
 docker ps
</code></pre>
<p> <mark>Run SonarQube:</mark></p>
<p> take sonarQube instance ip:port_number and run it on browser</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753964470174/3aa2a511-158b-47c4-af15-3de76d8644d8.png" alt class="image--center mx-auto" /></p>
<ul>
<li>default username and password is: admin. You can update later.</li>
</ul>
</li>
</ol>
<p>    <mark>Run Nexus:</mark></p>
<p>    take Nexus instance ip:port_number and run it on browser</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753964742432/db6380d1-4ba2-48fa-b2eb-f00d7aba87cf.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>to login username is admin and password is located in /nexus-data/admin.password</p>
</li>
<li><p>Go to nexus server:</p>
<pre><code class="lang-bash">  docker ps
  docker <span class="hljs-built_in">exec</span> -it &lt;containerid&gt; /bin/bash
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753965061425/42b6f484-d23e-4c35-a701-23d0434b0d57.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>copy this selected part and that will be your password. You can update the password later.</p>
</li>
<li><p>check the box enable anonymous access.</p>
</li>
</ul>
</li>
</ul>
<ol start="7">
<li><p><mark>Setup jenkins:</mark></p>
<pre><code class="lang-bash"> <span class="hljs-comment">#Installing Jenkins on Ubuntu</span>
 sudo apt update

 <span class="hljs-comment"># Install OpenJDK 17 JRE Headless</span>
 sudo apt install openjdk-17-jre-headless -y

 <span class="hljs-comment"># Download Jenkins GPG key</span>
 sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
   https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

 <span class="hljs-comment"># Add Jenkins repository to package manager sources</span>
 <span class="hljs-built_in">echo</span> 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 &gt; /dev/null

 <span class="hljs-comment"># Update package manager repositories</span>
 sudo apt-get update

 <span class="hljs-comment"># Install Jenkins</span>
 sudo apt-get install jenkins -y

 <span class="hljs-comment"># Update package manager repositories</span>
 sudo apt-get update

 <span class="hljs-comment"># Install necessary dependencies</span>
 sudo apt-get install -y ca-certificates curl

 <span class="hljs-comment"># Create directory for Docker GPG key</span>
 sudo install -m 0755 -d /etc/apt/keyrings

 <span class="hljs-comment"># Download Docker's GPG key</span>
 sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

 <span class="hljs-comment"># Ensure proper permissions for the key</span>
 sudo chmod a+r /etc/apt/keyrings/docker.asc

 <span class="hljs-comment"># Add Docker repository to Apt sources</span>
 <span class="hljs-built_in">echo</span> <span class="hljs-string">"deb [arch=<span class="hljs-subst">$(dpkg --print-architecture)</span> signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
 <span class="hljs-subst">$(. /etc/os-release &amp;&amp; echo <span class="hljs-string">"<span class="hljs-variable">$VERSION_CODENAME</span>"</span>)</span> stable"</span> | \
 sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null

 <span class="hljs-comment"># Update package manager repositories</span>
 sudo apt-get update

 sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</code></pre>
<p> <mark>Run jenkins:</mark></p>
<p> Take Nexus instance ip:port_number and run it on browser.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753966613014/45f26342-dbb3-4abf-bea6-65b44d4f7893.png" alt class="image--center mx-auto" /></p>
<ul>
<li>to get a password copy /var/lib/jenkins/secrets/initialAdminPassword and paste in shell.</li>
</ul>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753966682631/79a2c1eb-6adf-46f2-ab3d-845472b7bbd1.png" alt class="image--center mx-auto" /></p>
<ul>
<li>Customize jenkins → install suggested plugins → create user → save password for later use. → jenkins is ready.</li>
</ul>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753966769115/316ba33b-92d9-4dfc-8f25-d47fd225d39e.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-stage-2"><mark>Stage 2:</mark></h3>
<ol>
<li><p><strong><mark>Create a Private Git Repository</mark></strong><mark>:</mark></p>
<ul>
<li><p>Go to your preferred Git hosting platform (e.g., GitHub, GitLab, Bitbucket).</p>
</li>
<li><p>Log in to your account or sign up if you don't have one.</p>
</li>
<li><p>Create a new repository and set it as private.</p>
</li>
</ul>
</li>
<li><p><strong><mark>Generate a Personal Access Token</mark></strong><mark>:</mark></p>
<ul>
<li><p>Navigate to your account settings or profile settings.</p>
</li>
<li><p>Look for the "Developer settings" or "Personal access tokens" section.</p>
</li>
<li><p>Generate a new token, providing it with the necessary permissions (e.g., repo access).</p>
</li>
</ul>
</li>
<li><p><strong><mark>Clone the Repository Locally</mark></strong><mark>:</mark></p>
<ul>
<li><p>Open Git Bash or your terminal.</p>
</li>
<li><p>Navigate to the directory where you want to clone the repository.</p>
</li>
<li><p>Use the <code>git clone</code> command followed by the repository's URL. For example:</p>
<pre><code class="lang-bash">  git <span class="hljs-built_in">clone</span> &lt;repository_URL&gt;
</code></pre>
</li>
</ul>
</li>
</ol>
<p>    Replace <code>&lt;repository_URL&gt;</code> with the URL of your private repository.</p>
<ol start="4">
<li><p><strong><mark>Add Your Source Code Files</mark></strong><mark>:</mark></p>
<ul>
<li><p>Navigate into the cloned repository directory.</p>
</li>
<li><p>Paste your source code files or create new ones inside this directory.</p>
</li>
</ul>
</li>
<li><p><strong><mark>Stage and Commit Changes</mark></strong><mark>:</mark></p>
<ul>
<li><p>Use the <code>git add</code> command to stage the changes:</p>
<pre><code class="lang-bash">  git add .
</code></pre>
</li>
<li><p>Use the <code>git commit</code> command to commit the staged changes along with a meaningful message:</p>
<pre><code class="lang-bash">  git commit -m <span class="hljs-string">"done"</span>
</code></pre>
</li>
</ul>
</li>
<li><p><strong><mark>Push Changes to the Repository</mark></strong><mark>:</mark></p>
<ul>
<li><p>Use the <code>git push</code> command to push your committed changes to the remote repository:</p>
<pre><code class="lang-bash">  git push
</code></pre>
</li>
<li><p>If it's your first time pushing to this repository, you might need to specify the remote and branch:</p>
<pre><code class="lang-bash">  git push -u origin master
</code></pre>
</li>
</ul>
</li>
</ol>
<p>    Replace <code>master</code> with the branch name if you're pushing to a different branch.</p>
<ol start="7">
<li><p><strong><mark>Enter Personal Access Token as Authentication</mark></strong><mark>:</mark></p>
<ul>
<li>When prompted for credentials during the push, enter your username (usually your email) and use your personal access token as the password</li>
</ul>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753971102298/ed594dd5-ac54-4647-aa7c-2463a728ac07.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-stage-3"><mark>Stage 3:</mark></h3>
<ol>
<li><mark>Install Plugins for CI-CD pipeline</mark></li>
</ol>
<ul>
<li>Go to jenkins. Run it on browser.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753972117536/f87106f9-8aea-4172-a33b-115681b5ef04.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Manage jenkins → plugin → available plugin</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753972200977/56218197-caba-43d1-a627-b4639e6020e2.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Plugins: Eclipse Temurin installer, config file provider, maven integration, SonarQube Scanner, docker, docker pipeline, docker-build-step, kubernetes, kubernetes CLI, kubernetes client API, Kubernetes credentials</p>
</li>
<li><p>Install it.</p>
</li>
</ul>
</li>
</ul>
<ol start="2">
<li><p><mark>Configure Plugins:</mark></p>
<ul>
<li><p>Configure Plugin: manage plugin → tools →</p>
<ol>
<li><p>add jdk → name: jdk17 → select install automatically → add installer → install from adoptium.net</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753973846459/a01bc37f-392b-4a22-9e8c-bf8f815abd01.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>add SonarQube Scanner → name: sonar-scanner → install auto.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753974019808/81fb0b8e-b7a6-4a3f-a33c-9f88ddf071dd.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>add maven→ name: maven3 → install auto.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753974092182/ba19e565-61af-4dac-935f-f3147b7651a0.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>add docker→ name: docker → install auto.→ select download from docker.com → apply</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753974141870/a7448a75-7ae0-4f5c-8076-8e230cb33a0c.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
</li>
</ul>
</li>
<li><p><mark>Create pipeline</mark></p>
<ul>
<li>New item → name: Boardgame → select pipeline → ok → configure → discard old builds → max of build to keep: 2</li>
</ul>
</li>
</ol>
<p>        <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753974725155/201c47f3-dab5-453c-ab20-9e01c47d95ce.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Write script: select hello world template.</p>
</li>
<li><p>Add creddentials for github, sonarQube</p>
<p>  For github: go to manage jenkins→ credential → system → global credential → add credential → username:neha-sawant7 → password: token → id:giev any → create</p>
<p>  For SonarQube: go to manage jenkins→ credential → system → global credential → add credential → kind: secret text→ go to sonarqube server → Administration → security → users → tokens → name: sonar-token → generate → copy→ paste in credential section in jenkins→ id: sonar-token → create</p>
</li>
</ul>
<p>        <mark>Pipeline script:</mark></p>
<p>        <code>Stage: Git checkout</code></p>
<ul>
<li><p>If you dont know how to write script. select pipeline syntax.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753979563283/a66e37e2-e41a-459e-89f8-7fb4cdb68320.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>To generate script for git checkout:</p>
<p>  Steps→ sample step: select git → repo url:give your repo url → branch:main → credential: add → go to pipeline syntax → sample step: git → repo:<a target="_blank" href="https://github.com/neha-sawant7/Board-game.git">https://github.com/neha-sawant7/Board-game.git</a> → branch:main → select added creditials → generate pipeline script</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753979879547/cf6ba133-b9f6-472f-93d2-7acecf2441d5.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031643912/7ed2cf8d-1796-4e1f-b900-a7c867c8352a.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: compile</code></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037621989/629470d6-0199-4c53-a295-1977e1d56897.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: test</code></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037687442/fcf96a70-e7b6-4a57-a23a-56d2b69f9aee.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: File System Scan</code></p>
</li>
<li><p>To install trivy:</p>
</li>
<li><p>run below commands on jenkins instance:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753980669730/dbeada44-2407-41c9-8061-375841411580.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">  trivy --version
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037761549/34ca006d-7b0f-4f7f-be95-88e2da1e07a3.png" alt class="image--center mx-auto" /></p>
<p>  <code>stage: SonarQube Analsyis</code></p>
</li>
<li><p>Configure sonarQube server:</p>
<p>  Manage jenkins → system → SonarQube server → add → name:sonar → url:ipaddress of sonarqube server(dont froget to remove last slash) → server auth token: sonar-token → save</p>
</li>
<li><p>To generate script for sonarqube:</p>
<p>  pipeline syntax → sample step: sonarqube → server auth token: sonar-token→ generate pipeline script</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037959240/a830d6a1-6794-4fb4-a2a4-89f0c692d069.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754037778939/8243f42f-3e7b-4f4e-9156-488bb28f5251.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: Quality Gate</code></p>
</li>
<li><p>To write quality gate:</p>
<p>  go to sonarcube site→ administration → configuration → webhook → create → name: jenkins→ URL: as in below snip</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753982570895/488f5137-7687-4966-b075-d9ccdabcf033.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: Build</code></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754038186359/50fe4923-5581-4e81-8e20-1fbe5a65ce7f.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: Publish To Nexus</code></p>
</li>
<li><p>manage jenkins → managed files → add new config → select global maven setting.xml → id:global settings → next → you will get content → scroll until you find server section →</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753983173206/3c6079eb-d17c-46b0-a711-4efee0748838.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>To generate script for Maven :</p>
<p>  pipeline syntax → sample step: withmaven → maven: maven3 JDK: jdk17 → global maven setting config: myglobalsetting → generate pipeline script</p>
<p>  <code>Stage: Build &amp; Tag Docker Image</code></p>
</li>
<li><p>To generate script for docker :</p>
<p>  pipeline syntax → sample step: withdockerregistry → add cred: add → username → password which we setup for jenkins alreadyID: docker-cred → select ad registry cred → docker installation: docker → generate pipeline script</p>
</li>
<li><p>save pipeline.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754038490064/f71e7885-c86d-4a55-9192-fd5330741878.png" alt class="image--center mx-auto" /></p>
<p>  <code>Stage: Deploy To Kubernetes</code></p>
</li>
<li><p>Create service account:</p>
</li>
<li><p>go to master instance→ vi svc.yaml → content down here.</p>
</li>
</ul>
</li>
</ul>
<pre><code class="lang-bash">            apiVersion: v1
            kind: ServiceAccount
            metadata:
              name: jenkins
              namespace: webapps
</code></pre>
<ul>
<li><p>Create namespace:</p>
<pre><code class="lang-bash">  kubectl create ns webapps
  kubectl apply -f svc.yaml
</code></pre>
</li>
<li><p>Create role: vi role.yaml</p>
<pre><code class="lang-bash">  apiVersion: rbac.authorization.k8s.io/v1
  kind: Role
  metadata:
    name: app-role
    namespace: webapps
  rules:
    - apiGroups:
          - <span class="hljs-string">""</span>
          - apps
          - autoscaling
          - batch
          - extensions
          - policy
          - rbac.authorization.k8s.io
      resources:
        - pods
        - secrets
        - componentstatuses
        - configmaps
        - daemonsets
        - deployments
        - events
        - endpoints
        - horizontalpodautoscalers
        - ingress
        - <span class="hljs-built_in">jobs</span>
        - limitranges
        - namespaces
        - nodes
        - pods
        - persistentvolumes
        - persistentvolumeclaims
        - resourcequotas
        - replicasets
        - replicationcontrollers
        - serviceaccounts
        - services
      verbs: [<span class="hljs-string">"get"</span>, <span class="hljs-string">"list"</span>, <span class="hljs-string">"watch"</span>, <span class="hljs-string">"create"</span>, <span class="hljs-string">"update"</span>, <span class="hljs-string">"patch"</span>, <span class="hljs-string">"delete"</span>]
</code></pre>
<pre><code class="lang-bash">  kubectl apply -f role.yaml
</code></pre>
</li>
<li><p>Bind the role to service account: vi bind.yaml</p>
<pre><code class="lang-bash">  apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
  metadata:
    name: app-rolebinding
    namespace: webapps 
  roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: app-role 
  subjects:
  - namespace: webapps 
    kind: ServiceAccount
    name: jenkins
</code></pre>
<pre><code class="lang-bash">  kubectl apply -f bind.yaml
</code></pre>
</li>
<li><p>Now we want to connect jenkins to k8s cluster. So need to create token for auth.</p>
</li>
<li><p>vi sec.yaml</p>
<pre><code class="lang-bash">  apiVersion: v1
  kind: Secret
  <span class="hljs-built_in">type</span>: kubernetes.io/service-account-token
  metadata:
    name: mysecretname
    annotations:
      kubernetes.io/service-account.name: jenkins
</code></pre>
<pre><code class="lang-bash">  kubectl apply -f sec.yaml -n webapps
  kubectl describe secret mysecretname -n webapps
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753984807243/aa9500d9-24cc-4f1d-b928-f5658c0ad7a6.png" alt class="image--center mx-auto" /></p>
<ul>
<li>we have got token</li>
</ul>
</li>
</ul>
<ul>
<li><p>Add credentials for jenkins to k8s</p>
<p>  go to manage jenkins→ credential → system → global credential → add credential → kind: secret text → secret: is mention in above snip →ID: k8-cred→</p>
<p>  description: k8-cred→ create</p>
</li>
<li><p>To generate script for k8 :</p>
<p>  configure →pipeline syntax → sample step: withkubeconfig → cred : k8-cred → kubernetes server endpoint:<a target="_blank" href="https://172.31.8.146:6443">https://172.31.8.146:6443</a> → cluster:kubernetes → namespace: webapps → generate pipeline script</p>
</li>
<li><p>to get kubernetes server endpoint go to master node.</p>
<p>  #cd ~/.kube</p>
<p>  #ls</p>
<p>  #cat config</p>
<p>  Server endpoint and cluster name as below in snip.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754029206576/6fc9967e-aa6a-4a32-9b0b-7cfb875b2d51.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754029322681/1dcaf895-4f3a-4751-9fad-7167c6c28322.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<ul>
<li><p>Write deployment-service.yaml</p>
<p>  ```bash
  apiVersion: apps/v1
  kind: Deployment # Kubernetes resource kind we are creating
  metadata:
    name: boardgame-deployment
  spec:
    selector:
      matchLabels:
        app: boardgame
    replicas: 2 # Number of replicas that will be created for this deployment
    template:
      metadata:
        labels:
          app: boardgame
      spec:
        containers:</p>
<ul>
<li>name: boardgame
image: adijaiswal/boardshack:latest # Image that will be used to containers in the cluster
imagePullPolicy: Always
ports:<ul>
<li>containerPort: 8080 # The port that the container is running on in the cluster</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr />
<p>    apiVersion: v1 # Kubernetes API version
    kind: Service # Kubernetes resource kind we are creating
    metadata: # Metadata of the resource kind we are creating
      name: boardgame-ssvc
    spec:
      selector:
        app: boardgame
      ports:</p>
<ul>
<li>protocol: "TCP"
port: 80
targetPort: 8080 
type: LoadBalancer # type of the service.
```</li>
</ul>
<ul>
<li><p>install kubectl on jenkins:</p>
<p>  go to jenkins instance → enter below commands:</p>
<pre><code class="lang-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/<span class="hljs-built_in">local</span>/bin
  kubectl version --short --client
</code></pre>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754030093177/b554eb04-6d19-4623-af4d-6fbb8d9749ae.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754038823115/08dd406b-c4b7-4a30-ad08-2a685879a11d.png" alt class="image--center mx-auto" /></p>
<ol start="4">
<li><mark>Enable mail notification:</mark></li>
</ol>
</li>
</ul>
<ul>
<li>go to google account → security → 2 step verification → enter password → app passwords → app name:jenkins create → generated app password copy password</li>
</ul>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754030362033/d4f6ef5e-38b0-4161-9c91-be515c495876.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>manage jenkins → system → scroll down → extended email notification→ SMTP server: smtp.gmail.com → SMTP port: 465 → cred → add → tick use SSL → add →jenkins → username: emailid → password: mention in above image → ID: mail-cred → description: mail-cred→ add → now select added cred →</p>
</li>
<li><p>scroll down → email notification→ SMTP server:smtp.gmail.com →advanced → tick use SSl → SMTP port:465 → tick SMTP auth → username:emailid → password: as mention in above snip</p>
</li>
<li><p>tick test configuration by sending test email→ test e-mail recipient:emailid →click test onfiguration → check email box</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754030951550/f9287dd8-aa54-4e2a-9984-e02295baebc1.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>boardgame→ configuration → pipeline →write script for mail notification</p>
<pre><code class="lang-bash">  post {
      always {
          script {
              def jobName = env.JOB_NAME
              def buildNumber = env.BUILD_NUMBER
              def pipelineStatus = currentBuild.result ?: <span class="hljs-string">'UNKNOWN'</span>
              def bannerColor = pipelineStatus.toUpperCase() == <span class="hljs-string">'SUCCESS'</span> ? <span class="hljs-string">'green'</span> : <span class="hljs-string">'red'</span>

              def body = <span class="hljs-string">""</span><span class="hljs-string">"
                  &lt;html&gt;
                  &lt;body&gt;
                  &lt;div style="</span>border: 4px solid <span class="hljs-variable">${bannerColor}</span>; padding: 10px;<span class="hljs-string">"&gt;
                  &lt;h2&gt;<span class="hljs-variable">${jobName}</span> - Build <span class="hljs-variable">${buildNumber}</span>&lt;/h2&gt;
                  &lt;div style="</span>background-color: <span class="hljs-variable">${bannerColor}</span>; padding: 10px;<span class="hljs-string">"&gt;
                  &lt;h3 style="</span>color: white;<span class="hljs-string">"&gt;Pipeline Status: <span class="hljs-variable">${pipelineStatus.toUpperCase()}</span>&lt;/h3&gt;
                  &lt;/div&gt;
                  &lt;p&gt;Check the &lt;a href="</span><span class="hljs-variable">${BUILD_URL}</span><span class="hljs-string">"&gt;console output&lt;/a&gt;.&lt;/p&gt;
                  &lt;/div&gt;
                  &lt;/body&gt;
                  &lt;/html&gt;
              "</span><span class="hljs-string">""</span>

              emailext (
                  subject: <span class="hljs-string">"<span class="hljs-variable">${jobName}</span> - Build <span class="hljs-variable">${buildNumber}</span> - <span class="hljs-variable">${pipelineStatus.toUpperCase()}</span>"</span>,
                  body: body,
                  to: <span class="hljs-string">'nehasawant719@gmail.com'</span>,
                  from: <span class="hljs-string">'jenkins@example.com'</span>,
                  replyTo: <span class="hljs-string">'jenkins@example.com'</span>,
                  mimeType: <span class="hljs-string">'text/html'</span>,
                  attachmentsPattern: <span class="hljs-string">'trivy-image-report.html'</span>
              )
          }
      }
  }
</code></pre>
<ol start="5">
<li><mark>Run this pipeline</mark></li>
</ol>
</li>
</ul>
<p>        we have artifact and trivy report also. You can check sonarQube also.-</p>
<p>        <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031064996/52312251-4eb3-48ae-9b90-5015c4f7e52f.png" alt class="image--center mx-auto" /></p>
<p>        <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031088132/10e41f61-e618-4dfd-8b29-0fccc4ab875d.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Run on browser:</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031262816/b132264e-04ed-44cb-9a05-5cb4cd6dbbdd.png" alt class="image--center mx-auto" /></p>
<p>  slave-1 ip:port</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031333547/0a1ca522-caa7-472d-b7dc-7ad78ae36d8c.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031377445/ec2abc4b-33b9-4a7d-b3d3-1bf147d0b21a.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031404206/db3495f3-9771-4a57-bf7f-27bd13d0d62b.png" alt class="image--center mx-auto" /></p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754031422073/8b2d8b57-1bd3-4b37-8240-c351d1aae93c.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-phase-4"><mark>Phase 4:</mark></h3>
<ol>
<li><p><mark>create server for monitoring.</mark></p>
<p> name: monitor</p>
<p> AMI: ubuntu 22.04</p>
<p> Instance type: t2.large</p>
<p> key: key.pem</p>
<p> security group: default</p>
<p> storage:20</p>
<p> Launch instance.</p>
</li>
<li><p><mark>Connect vm on Mobxterm.</mark></p>
<pre><code class="lang-bash"> sudo apt update
</code></pre>
</li>
<li><p><mark>Install prometheus</mark></p>
<pre><code class="lang-bash"> wget  https://github.com/prometheus/prometheus/releases/download/v3.5.0/prometheus-3.5.0.linux-amd64.tar.gz
 ls
 <span class="hljs-comment">#you will get prometheus version</span>
 tar -xvf promethues-3.5-rc.0.linux-amd64.tar.gz
 rm -rd promethues-3.5-rc.0.linux-amd64.tar.gz
 ls
 you will get prometheus
 <span class="hljs-built_in">cd</span> promethues-3.5-rc.0.linux-amd64/
 ls
 ./prometheus &amp;
</code></pre>
</li>
<li><p><mark>Access prometheus on browser:</mark></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754040021242/d9bf594d-d542-47be-b540-2e04ef1a69c2.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><mark>Install Grafana:</mark></p>
<p> visit: <a target="_blank" href="https://grafana.com/grafana/download?platform=linux">Download Grafana | Grafana Labs</a></p>
<p> select linux:</p>
<pre><code class="lang-bash"> sudo apt-get install -y adduser libfontconfig1 musl
 wget https://dl.grafana.com/enterprise/release/grafana-enterprise_12.1.0_amd64.deb
 sudo dpkg -i grafana-enterprise_12.1.0_amd64.de
</code></pre>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754040345777/c4af48da-179c-4cb2-9a4c-56301f67bde4.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash"> sudo /bin/systemctl start grafana-serve
</code></pre>
</li>
<li><p><mark>run it on browser:</mark></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754040419158/26ea7f4d-6b97-4ccf-bc8b-5ae32cd42125.png" alt class="image--center mx-auto" /></p>
<ol start="5">
<li><p>Default username and password is: admin</p>
</li>
<li><p><mark>Install blackbox exporter:</mark></p>
<pre><code class="lang-bash"> wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.27.0/blackbox_exporter-0.27.0.linux-amd64.tar.gz
 tar -xvf blackbox_exporter-0.27.0.linux0amd64.tar.gz
 ls
 <span class="hljs-comment">#yo u will see tar file remove that</span>
 rm -rf blackbox_exporter-0.27.0.linux0amd64.tar.gz
 ls
 <span class="hljs-built_in">cd</span> blackbox_exporter-0.27.0.linux0amd64/
 ./blackbox_exporter &amp;
</code></pre>
</li>
</ol>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754040723685/ec41a1c0-6901-4453-a819-7a7befc97226.png" alt class="image--center mx-auto" /></p>
<ol start="8">
<li><p><mark>Edit prometheus.yaml</mark></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754040979539/bb7da686-adbe-4d57-b08c-4ad1e7f44b18.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash"> scrape_configs:
   - job_name: <span class="hljs-string">'blackbox'</span>
     metrics_path: /probe
     params:
       module: [http_2xx]  <span class="hljs-comment"># Look for a HTTP 200 response.</span>
     static_configs:
       - targets:
         - http://prometheus.io    <span class="hljs-comment"># Target to probe with http.</span>
         - http://13.234.66.128:30119 9<span class="hljs-comment">#where our application is running</span>
     relabel_configs:
       - source_labels: [__address__]
         target_label: __param_target
       - source_labels: [__param_target]
         target_label: instance
       - target_label: __address__
         replacement: 127.0.0.1:9115  <span class="hljs-comment"># The blackbox exporter's real hostname:port.</span>
</code></pre>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041092683/3d7243f1-0040-4baf-a0fa-b75b8b0c27fe.png" alt class="image--center mx-auto" /></p>
<ol start="9">
<li><p><mark>Restart prometheus:</mark></p>
<pre><code class="lang-bash"> pgrep prometheus
 <span class="hljs-comment">#you will get id of process running, kill that id</span>
 <span class="hljs-built_in">kill</span> &lt;id&gt;

 <span class="hljs-comment">#restart prometheus</span>
 ./prometheus &amp;
</code></pre>
</li>
</ol>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041210587/99e0fa76-f0ea-4919-91b6-8dcd6a8536e2.png" alt class="image--center mx-auto" /></p>
<p>    Now our app up and running.</p>
<p>    <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041320124/72374741-bf54-4f4a-8f22-37d5edfecd27.png" alt class="image--center mx-auto" /></p>
<ol start="10">
<li><p><mark>Add data source as prometheus in grafana.</mark></p>
<p>Grafana→ connections → data source → add data source → promethues → provide ip address of prometheus. i.e. 12.232.255.214:9000</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041414707/338bb52c-f0a2-478d-8b49-2343babaf24a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041533337/1a2a34b8-1074-43b8-91de-b2f0e0deab33.png" alt class="image--center mx-auto" /></p>
<p>save test.</p>
</li>
<li><p><mark>Import dashboard</mark></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754041587704/89624389-00a1-4ed2-9aaf-cbba010a3aab.png" alt class="image--center mx-auto" /></p>
<p>Go to <a target="_blank" href="https://grafana.com/grafana/dashboards/7587-prometheus-blackbox-exporter/">Prometheus Blackbox Exporter | Grafana Labs</a>.</p>
<p>Copy the dashboard</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754053540209/5af42eaa-b0ae-4604-9457-efef5e38d3e3.png" alt class="image--center mx-auto" /></p>
<p>Paste here and and select the data source : prometheus then click on import</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754053566754/32f04802-980b-442e-a854-a2018c9db47a.png" alt class="image--center mx-auto" /></p>
<p>You will see the all charts here.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754053670011/f7f82851-0ea6-464e-bbc5-f91b04fb3c63.png" alt class="image--center mx-auto" /></p>
<p>Here you can select targets you want to monitor:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754053737973/47a9173f-0b85-4a62-83f7-91935a9dc50c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><mark>System level monitoring:</mark></p>
<p>jenkins → manage jenkins → plugins → search prometheus → install it. → if doesnt work restart server.</p>
<p>go to jenkins instance → install node exporter</p>
<pre><code class="lang-bash">wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054095950/feab60d6-5755-495d-94c8-bf2c79da949b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054119726/fa21d6fc-33c8-4c5e-a452-2b32dede4fd7.png" alt class="image--center mx-auto" /></p>
<p>Run it on browser:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054198934/45b37a67-077f-4fab-95ee-8d1ae0ceca63.png" alt class="image--center mx-auto" /></p>
<p>Now go to monitor instance.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054304191/ed9efe62-939c-49da-9f48-e620f8bc8bd2.png" alt class="image--center mx-auto" /></p>
<p>edit the yaml file:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054405151/432361ab-3977-43af-940b-d964ec81e51f.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">pgrep prometheus
<span class="hljs-built_in">kill</span> &lt;id&gt;
./prometheus &amp;
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054526630/c08e299d-8620-47d6-9e7a-79d522ff895d.png" alt class="image--center mx-auto" /></p>
<p>Take dashboard from browser and add id load it and give data source: prometheus.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754054616308/cdae6ab0-c140-47e8-b51d-d684a4249b88.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
]]></content:encoded></item></channel></rss>