From 571c4ab4752ffc7abde5e0c02778e77b964088bd Mon Sep 17 00:00:00 2001 From: Preethika1223 Date: Thu, 30 Jan 2025 09:19:18 +0530 Subject: [PATCH 01/29] change content change content and backgroung color --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index d971cf9e0..e90fc3281 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,7 @@ + body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color:white; + text-align: center; + } + .container { + width: 50%; + height: 50%; + margin: 50px auto; + background:pink; + padding: 20px; + border-radius: 10px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + } + h1 { + color: black; + } + p { + font-size: 16px; + color: black; + line-height: 1.6; + } + -
-

Congratulations!

-

This is F018824-Preethika P ,software engineer and I have successfully created a pipeline that retrieved this source application from an Amazon S3 bucket and deployed it - to three Amazon EC2 instances using AWS CodeDeploy.

-

For next steps, read the AWS CodePipeline Documentation.

-
+
+

My Profile

+

Name: Preethika P

+

Education: Computer Science Engineering

+

Skills:Java FullStack Developer, Cloud Engineer

+

Gmail:preethikapalanisamy1228@gmail.com

From bb81d98dd95185a34c803acfccba0fa629d852ae Mon Sep 17 00:00:00 2001 From: Preethika1223 Date: Thu, 30 Jan 2025 15:03:40 +0530 Subject: [PATCH 05/29] name and background change name changed into full name and background color also changed --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 7f46bc9bc..b720b14ff 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ width: 50%; height: 50%; margin: 50px auto; - background:pink; + background:blue; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); @@ -33,7 +33,7 @@

My Profile

-

Name: Preethika P

+

Name: Preethika Palanisamy

Education: Computer Science Engineering

Skills:Java FullStack Developer, Cloud Engineer

Gmail:preethikapalanisamy1228@gmail.com

From 58ca42fb3991cd6fe3eaf880819e940aabf73827 Mon Sep 17 00:00:00 2001 From: Preethika1223 Date: Thu, 30 Jan 2025 15:11:08 +0530 Subject: [PATCH 06/29] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index b720b14ff..943434f24 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ width: 50%; height: 50%; margin: 50px auto; - background:blue; + background:green; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); From 7fac1b90c8b13e31a1f8778dd3751c031bda1b2e Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 5 Feb 2025 09:10:45 +0530 Subject: [PATCH 07/29] Create new --- new | 1 + 1 file changed, 1 insertion(+) create mode 100644 new diff --git a/new b/new new file mode 100644 index 000000000..260e3740a --- /dev/null +++ b/new @@ -0,0 +1 @@ +welcome to git From dc5c285fdcb3db1b65b7eb65c97e34711cdb8250 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 5 Feb 2025 09:15:36 +0530 Subject: [PATCH 08/29] Update and rename new to new.txt --- new => new.txt | 1 + 1 file changed, 1 insertion(+) rename new => new.txt (71%) diff --git a/new b/new.txt similarity index 71% rename from new rename to new.txt index 260e3740a..b4b8f66c9 100644 --- a/new +++ b/new.txt @@ -1 +1,2 @@ welcome to git +hiiii From 473b5b74bbde34d4577590e60c56af59c730f45a Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 5 Feb 2025 14:37:01 +0530 Subject: [PATCH 09/29] Update new.txt --- new.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/new.txt b/new.txt index b4b8f66c9..48156fa6c 100644 --- a/new.txt +++ b/new.txt @@ -1,2 +1,3 @@ welcome to git hiiii +testing purpose From d077996e91d962253c1d6fa62d96d973e5130b84 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 5 Feb 2025 14:44:02 +0530 Subject: [PATCH 10/29] Update new.txt --- new.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/new.txt b/new.txt index 48156fa6c..7a10c4f99 100644 --- a/new.txt +++ b/new.txt @@ -1,3 +1,3 @@ -welcome to git +welcome to git hub hiiii testing purpose From 02680fce9bd82dc9c9405c1e4fcad2a212ee5d79 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 5 Feb 2025 14:44:48 +0530 Subject: [PATCH 11/29] Update new.txt --- new.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/new.txt b/new.txt index 7a10c4f99..7fae261e5 100644 --- a/new.txt +++ b/new.txt @@ -1,3 +1,4 @@ welcome to git hub hiiii testing purpose +IS the page is useful From c5d3127925127716ce666c3f1d1aa62ddf6d4a65 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 20:35:30 +0530 Subject: [PATCH 12/29] background color change for testing background color changing --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 943434f24..805e39bb2 100644 --- a/index.html +++ b/index.html @@ -15,13 +15,13 @@ width: 50%; height: 50%; margin: 50px auto; - background:green; + background:gray; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { - color: black; + color: pink; } p { font-size: 16px; From 25f1d8cecfecc40d27d4faee33e471b3c522545d Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 20:37:03 +0530 Subject: [PATCH 13/29] text color changing --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 805e39bb2..41d39fa66 100644 --- a/index.html +++ b/index.html @@ -25,7 +25,7 @@ } p { font-size: 16px; - color: black; + color: pink; line-height: 1.6; } From 7823ce9de31af78dd07d305f5d3af5a19778e178 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 20:39:25 +0530 Subject: [PATCH 14/29] text color pink to black --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 41d39fa66..7bd7293ca 100644 --- a/index.html +++ b/index.html @@ -21,11 +21,11 @@ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { - color: pink; + color: black; } p { font-size: 16px; - color: pink; + color: black; line-height: 1.6; } From 9a220286bf93cd2ed62a3781e6167277f9cb07ef Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 21:00:38 +0530 Subject: [PATCH 15/29] Add files via upload --- bg for code.jpg | Bin 0 -> 68810 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bg for code.jpg diff --git a/bg for code.jpg b/bg for code.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d64031f8518213c0cd05ac87e70a360452025b24 GIT binary patch literal 68810 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 z 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 literal 0 HcmV?d00001 From ece3f7eac3ddda4e023e111749a0656c08062bf4 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 21:05:32 +0530 Subject: [PATCH 16/29] add bg --- index.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 7bd7293ca..14dc19f3b 100644 --- a/index.html +++ b/index.html @@ -21,17 +21,18 @@ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { - color: black; + color: white; } p { font-size: 16px; - color: black; + color: white; line-height: 1.6; } -
+ bg +

My Profile

Name: Preethika Palanisamy

Education: Computer Science Engineering

From a1935c4bf6909152bbbfbeaeaa6c354da87d8099 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 21:09:56 +0530 Subject: [PATCH 17/29] Update index.html --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 14dc19f3b..44a7d2761 100644 --- a/index.html +++ b/index.html @@ -31,8 +31,9 @@ +
bg -
+

My Profile

Name: Preethika Palanisamy

Education: Computer Science Engineering

From 38fb6f8bc151e95711f308990c01a2b09833a431 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 21:13:08 +0530 Subject: [PATCH 18/29] Update index.html --- index.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 44a7d2761..ed6ef6574 100644 --- a/index.html +++ b/index.html @@ -30,10 +30,9 @@ } - -
- bg - + + +

My Profile

Name: Preethika Palanisamy

Education: Computer Science Engineering

From acaed1c042ec1626f51446e84cc920724a156de9 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 6 Feb 2025 21:17:27 +0530 Subject: [PATCH 19/29] Update index.html --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index ed6ef6574..2c1b5f5af 100644 --- a/index.html +++ b/index.html @@ -30,9 +30,9 @@ } - + -
+

My Profile

Name: Preethika Palanisamy

Education: Computer Science Engineering

From 058cc58402649fea152374db375489a30591fb34 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Fri, 7 Feb 2025 09:22:41 +0530 Subject: [PATCH 20/29] update name update in background color, font color, and name --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 2c1b5f5af..1bf8e4e03 100644 --- a/index.html +++ b/index.html @@ -15,17 +15,17 @@ width: 50%; height: 50%; margin: 50px auto; - background:gray; + background:pink; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { - color: white; + color: black; } p { font-size: 16px; - color: white; + color: black; line-height: 1.6; } @@ -34,7 +34,7 @@

My Profile

-

Name: Preethika Palanisamy

+

Name: Preethika P

Education: Computer Science Engineering

Skills:Java FullStack Developer, Cloud Engineer

Gmail:preethikapalanisamy1228@gmail.com

From 936778b33ea7e7f7cd73d08703d4f214e830ec4c Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Mon, 17 Feb 2025 11:37:48 +0530 Subject: [PATCH 21/29] Add files via upload --- Pipeline.md | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 Pipeline.md diff --git a/Pipeline.md b/Pipeline.md new file mode 100644 index 000000000..aa1be4282 --- /dev/null +++ b/Pipeline.md @@ -0,0 +1,153 @@ +**Create 3 EC2 instances :** + +Jenkins - ID_jenkins +Sonar Qube -ID_SonarQube +Dockers - ID_Dockers + +Note : All required security group ports/firewall to be open (8080 / 9000 / 80) + +**Install Jenkins and connect to Github and SonarQube (pipeline)** + +sudo apt update +sudo apt install openjdk-17-jre +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 +sudo apt-get install jenkins + + +----------------------------------------------------- +Jenkins Web URL - http://ec2IP:8080/ +User ID / PWD - admin/admin + +Created a webhook in your Github account to send code changes to Jenkins. +Click Settings - Webhook - Add webhook - https://jenkinsIP:8080/github-webhook/ (ensure tick in push and pull - update webhook) + +Go to Jenkins website - +Created a Freestyle project in Jenkins for pipeline (A10001pipeline). +(Any changes in Github triggers the pipeline) + +**Install SonarQube and Configure on Jenkins (connect to pipeline)** + +sudo apt update +sudo apt install openjdk-17-jre +wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip?_gl=1*w7u3a6*_gcl_au*NDQwODQxNjEuMTczODUwNzk2MA..*_ga*NTQzMzY5NjA4LjE3Mzg1MDc5NjA.*_ga_9JZ0GZ5TC6*MTczODUwNzk1OS4xLjEuMTczODUwODA2Ny41Ny4wLjA. + +sudo apt install unzip +unzip +./sonar.sh start +./sonar.sh console + +visit Sonarqube URL -http://EC2IP:9000/ +User Id : admin +Password : admin +Change the password on first login + +Create a Project - Name is ID - Select Github - Others. +Note down the project Key - sonar.projectKey=Id + +Click your user profile logo (on top right corner) - My account -Security - generate Token - give a name - type is Global - Click generate +Note down the long key as below (this is example):- +Security key token - sqa_0bd83a93e687e1cd1cfc1025e48fe51dff9d1b12 + +Code To paste in Jenkins (if needed) +node { + stage('SCM') { + checkout scm + } + stage('SonarQube Analysis') { + def scannerHome = tool 'SonarScanner'; + withSonarQubeEnv() { + sh "${scannerHome}/bin/sonar-scanner" + } + } +} + +On Jenkins website - +Manage Jenkins Plugins - Install 4 plugins - Sonarqube scanner, SSH2easy, SSHServer, Docker, CloudBees Docker Build and Publish & SSH Agent +Under Manage jenkins - Tools (Global tool config) - SonarQube Scanner installations +Add sonarqube scanner - Just give a name and save +Under System configure tools - Sonarcube servers -Added sonarcube +Name : SonarQube and Given URL of sonarqube +Server authentication - Added - Jenkins - secret text (pasted security key as above from SonarQube) +select the pipeline we created- Configure - BUILD STEPS - choosen Add build step - execute sonarqube scanner +Paste the Project key taken from SonarQube under the box Analysis properties & saved. + +Now Github - Jenkins - SonarQube Pipeline is running and make changes in Github index.html to see the changes in jenkins. Pipeline should trigger immediately on making any change to github code. + +**Install Dockers** + +sudo apt-get +sudo apt-get install ca-certificates curl +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io -y +sudo docker --version +sudo docker run hello-world +sudo systemctl enable docker +sudo systemctl start docker + +sudo usermod -aG docker ubuntu + +sudo vi /lib/systemd/system/docker.service +Find the line starting with ExecStart. Comment the existing line with # and add a new line as below: +ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock +Restart 2 services - +sudo systemctl daemon-reload +sudo service docker restart +------------ + +**Integration Dockers to Jenkins** + +Install docker in Jenkins EC2 also - (using this to build images) - Follow same steps as above. +Then run this command - important - sudo usermod -aG docker ubuntu (OR) sudo usermod -aG docker $USER +Go to Jenkins website - Manage Jenkins - Tools - Configure Docker installation - give any name (docker- version latest - install automatically) - Save +Go to pipeline - configuration - Add a build step after Sonarqube - Select Docker build and push + Repository Name : anilmidna/a10001 (this is docker hub repository name) + Tag : latest +Registry credentials Click Add and create docker hub username and password credentials +Once done select it from drop down (very important) +Click the Advanced drop down - ensure we have tick in Force pull, Create fingerprints. , under Docker installation – select docker (same name we configured above step 2). +Move down and under Execute Shell (box) paste the below command : + +ssh -o StrictHostKeyChecking=no ubuntu@DOCKEREC2IP " + echo 'Pulling latest Docker image...'; + docker pull abcdefg(dockerhub repo)/xyz:latest; + echo 'Stopping and removing old container...'; + docker stop my-website || true; + docker rm my-website || true; + echo 'Starting new container...'; + docker run -d -p 80:80 --name my-website abcdefg(dockerhub repo)/xyz:latest; + echo 'Deployment successful!'; +" +Save + +**Run the Jenkins pipeline** + +Take the IP Address of Dockers EC2 and paste in a browser to see the contents of the index.html in GITHUB. Make changes to index.html in github and check if Jenkins pipeline runs automatically and Dockers website is showing the updated content. + +------------------------------------------------------------------------------ +Note : This is only for information - no action needed - Build is based on Dockerfile in the Github repository :- + +Basic nginx used Dockerfile (reference) +# Use the official Nginx image as a base +FROM nginx:1.25 +# Copy the index.html file to the default Nginx web directory +COPY index.html /usr/share/nginx/html/ + # Expose port 80 +EXPOSE 80 +# Start Nginx +CMD ["nginx", "-g", "daemon off;"] + From 4f14007eeb2382af88501f27480dce5180633022 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Mon, 17 Feb 2025 11:40:04 +0530 Subject: [PATCH 22/29] Add files via upload --- pipeline.txt | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 pipeline.txt diff --git a/pipeline.txt b/pipeline.txt new file mode 100644 index 000000000..aa1be4282 --- /dev/null +++ b/pipeline.txt @@ -0,0 +1,153 @@ +**Create 3 EC2 instances :** + +Jenkins - ID_jenkins +Sonar Qube -ID_SonarQube +Dockers - ID_Dockers + +Note : All required security group ports/firewall to be open (8080 / 9000 / 80) + +**Install Jenkins and connect to Github and SonarQube (pipeline)** + +sudo apt update +sudo apt install openjdk-17-jre +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 +sudo apt-get install jenkins + + +----------------------------------------------------- +Jenkins Web URL - http://ec2IP:8080/ +User ID / PWD - admin/admin + +Created a webhook in your Github account to send code changes to Jenkins. +Click Settings - Webhook - Add webhook - https://jenkinsIP:8080/github-webhook/ (ensure tick in push and pull - update webhook) + +Go to Jenkins website - +Created a Freestyle project in Jenkins for pipeline (A10001pipeline). +(Any changes in Github triggers the pipeline) + +**Install SonarQube and Configure on Jenkins (connect to pipeline)** + +sudo apt update +sudo apt install openjdk-17-jre +wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip?_gl=1*w7u3a6*_gcl_au*NDQwODQxNjEuMTczODUwNzk2MA..*_ga*NTQzMzY5NjA4LjE3Mzg1MDc5NjA.*_ga_9JZ0GZ5TC6*MTczODUwNzk1OS4xLjEuMTczODUwODA2Ny41Ny4wLjA. + +sudo apt install unzip +unzip +./sonar.sh start +./sonar.sh console + +visit Sonarqube URL -http://EC2IP:9000/ +User Id : admin +Password : admin +Change the password on first login + +Create a Project - Name is ID - Select Github - Others. +Note down the project Key - sonar.projectKey=Id + +Click your user profile logo (on top right corner) - My account -Security - generate Token - give a name - type is Global - Click generate +Note down the long key as below (this is example):- +Security key token - sqa_0bd83a93e687e1cd1cfc1025e48fe51dff9d1b12 + +Code To paste in Jenkins (if needed) +node { + stage('SCM') { + checkout scm + } + stage('SonarQube Analysis') { + def scannerHome = tool 'SonarScanner'; + withSonarQubeEnv() { + sh "${scannerHome}/bin/sonar-scanner" + } + } +} + +On Jenkins website - +Manage Jenkins Plugins - Install 4 plugins - Sonarqube scanner, SSH2easy, SSHServer, Docker, CloudBees Docker Build and Publish & SSH Agent +Under Manage jenkins - Tools (Global tool config) - SonarQube Scanner installations +Add sonarqube scanner - Just give a name and save +Under System configure tools - Sonarcube servers -Added sonarcube +Name : SonarQube and Given URL of sonarqube +Server authentication - Added - Jenkins - secret text (pasted security key as above from SonarQube) +select the pipeline we created- Configure - BUILD STEPS - choosen Add build step - execute sonarqube scanner +Paste the Project key taken from SonarQube under the box Analysis properties & saved. + +Now Github - Jenkins - SonarQube Pipeline is running and make changes in Github index.html to see the changes in jenkins. Pipeline should trigger immediately on making any change to github code. + +**Install Dockers** + +sudo apt-get +sudo apt-get install ca-certificates curl +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io -y +sudo docker --version +sudo docker run hello-world +sudo systemctl enable docker +sudo systemctl start docker + +sudo usermod -aG docker ubuntu + +sudo vi /lib/systemd/system/docker.service +Find the line starting with ExecStart. Comment the existing line with # and add a new line as below: +ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock +Restart 2 services - +sudo systemctl daemon-reload +sudo service docker restart +------------ + +**Integration Dockers to Jenkins** + +Install docker in Jenkins EC2 also - (using this to build images) - Follow same steps as above. +Then run this command - important - sudo usermod -aG docker ubuntu (OR) sudo usermod -aG docker $USER +Go to Jenkins website - Manage Jenkins - Tools - Configure Docker installation - give any name (docker- version latest - install automatically) - Save +Go to pipeline - configuration - Add a build step after Sonarqube - Select Docker build and push + Repository Name : anilmidna/a10001 (this is docker hub repository name) + Tag : latest +Registry credentials Click Add and create docker hub username and password credentials +Once done select it from drop down (very important) +Click the Advanced drop down - ensure we have tick in Force pull, Create fingerprints. , under Docker installation – select docker (same name we configured above step 2). +Move down and under Execute Shell (box) paste the below command : + +ssh -o StrictHostKeyChecking=no ubuntu@DOCKEREC2IP " + echo 'Pulling latest Docker image...'; + docker pull abcdefg(dockerhub repo)/xyz:latest; + echo 'Stopping and removing old container...'; + docker stop my-website || true; + docker rm my-website || true; + echo 'Starting new container...'; + docker run -d -p 80:80 --name my-website abcdefg(dockerhub repo)/xyz:latest; + echo 'Deployment successful!'; +" +Save + +**Run the Jenkins pipeline** + +Take the IP Address of Dockers EC2 and paste in a browser to see the contents of the index.html in GITHUB. Make changes to index.html in github and check if Jenkins pipeline runs automatically and Dockers website is showing the updated content. + +------------------------------------------------------------------------------ +Note : This is only for information - no action needed - Build is based on Dockerfile in the Github repository :- + +Basic nginx used Dockerfile (reference) +# Use the official Nginx image as a base +FROM nginx:1.25 +# Copy the index.html file to the default Nginx web directory +COPY index.html /usr/share/nginx/html/ + # Expose port 80 +EXPOSE 80 +# Start Nginx +CMD ["nginx", "-g", "daemon off;"] + From 7fb05cd4a8dfe4c3944f57e31f3b467e20948825 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Tue, 18 Feb 2025 09:31:33 +0530 Subject: [PATCH 23/29] Add files via upload --- Dockerfile.txt | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Dockerfile.txt diff --git a/Dockerfile.txt b/Dockerfile.txt new file mode 100644 index 000000000..75506fd7e --- /dev/null +++ b/Dockerfile.txt @@ -0,0 +1,28 @@ +# # Use the official Nginx image as a base +# FROM nginx:1.25 + +# # Create a non-root user and switch to it +# RUN addgroup --system nginx && adduser --system --ingroup nginx nginx +# USER nginx + +# # Copy your custom configuration or HTML files if needed +# COPY --chown=nginx:nginx index.html /usr/share/nginx/html/ + +# # Expose port 80 +# EXPOSE 80 + +# # Start Nginx +# CMD ["nginx", "-g", "daemon off;"] + +# Use the official Nginx image as a base +FROM nginx:1.25 + +# Copy the index.html file to the default Nginx web directory +COPY index.html /usr/share/nginx/html/ + +# Expose port 80 +EXPOSE 80 + +# Start Nginx +CMD ["nginx", "-g", "daemon off;"] + From 0fa72b3ca95c02dea2226803dfea358420540779 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 19 Feb 2025 09:00:36 +0530 Subject: [PATCH 24/29] Create Dockerfile --- Dockerfile | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..c2250fc02 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +# # Use the official Nginx image as a base +# FROM nginx:1.25 + +# # Create a non-root user and switch to it +# RUN addgroup --system nginx && adduser --system --ingroup nginx nginx +# USER nginx + +# # Copy your custom configuration or HTML files if needed +# COPY --chown=nginx:nginx index.html /usr/share/nginx/html/ + +# # Expose port 80 +# EXPOSE 80 + +# # Start Nginx +# CMD ["nginx", "-g", "daemon off;"] + +# Use the official Nginx image as a base +FROM nginx:1.25 + +# Copy the index.html file to the default Nginx web directory +COPY index.html /usr/share/nginx/html/ + +# Expose port 80 +EXPOSE 80 + +# Start Nginx +CMD ["nginx", "-g", "daemon off;"] From ef93e464fe6ebd5048e8710216ef527d37ee0528 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 19 Feb 2025 09:19:06 +0530 Subject: [PATCH 25/29] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 1bf8e4e03..b13df64a4 100644 --- a/index.html +++ b/index.html @@ -34,7 +34,7 @@

My Profile

-

Name: Preethika P

+

Name: Preethika Palanisamy

Education: Computer Science Engineering

Skills:Java FullStack Developer, Cloud Engineer

Gmail:preethikapalanisamy1228@gmail.com

From 268bf050ed3b9cac3400ce4e417240886a81c22d Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 19 Feb 2025 09:21:17 +0530 Subject: [PATCH 26/29] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index b13df64a4..8f7cb9403 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ width: 50%; height: 50%; margin: 50px auto; - background:pink; + background:gray; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); From 85dc94047382ec83d666b83d5ebe589ff8ffd339 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Wed, 19 Feb 2025 09:21:51 +0530 Subject: [PATCH 27/29] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8f7cb9403..26e2a0c56 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ width: 50%; height: 50%; margin: 50px auto; - background:gray; + background:green; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); From 6d38ceefe8e9dc0ae241146879af0d794f6d3947 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Thu, 27 Feb 2025 19:18:20 +0530 Subject: [PATCH 28/29] Delete Dockerfile.txt delete the file because of text file --- Dockerfile.txt | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 Dockerfile.txt diff --git a/Dockerfile.txt b/Dockerfile.txt deleted file mode 100644 index 75506fd7e..000000000 --- a/Dockerfile.txt +++ /dev/null @@ -1,28 +0,0 @@ -# # Use the official Nginx image as a base -# FROM nginx:1.25 - -# # Create a non-root user and switch to it -# RUN addgroup --system nginx && adduser --system --ingroup nginx nginx -# USER nginx - -# # Copy your custom configuration or HTML files if needed -# COPY --chown=nginx:nginx index.html /usr/share/nginx/html/ - -# # Expose port 80 -# EXPOSE 80 - -# # Start Nginx -# CMD ["nginx", "-g", "daemon off;"] - -# Use the official Nginx image as a base -FROM nginx:1.25 - -# Copy the index.html file to the default Nginx web directory -COPY index.html /usr/share/nginx/html/ - -# Expose port 80 -EXPOSE 80 - -# Start Nginx -CMD ["nginx", "-g", "daemon off;"] - From 6b37a728f74d695119aa00721138beff8edf4d42 Mon Sep 17 00:00:00 2001 From: Preethika Palanisamy Date: Fri, 28 Feb 2025 10:50:54 +0530 Subject: [PATCH 29/29] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 26e2a0c56..b13df64a4 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ width: 50%; height: 50%; margin: 50px auto; - background:green; + background:pink; padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);