├── Dockerfile ├── Jenkinsfile ├── README.md ├── docker-compose.yml ├── docker-compose_mysql.yml ├── docker-compose_mysql_phpMyAdmin.yml ├── docker-compose_tomcat.yml ├── index.html ├── mysql-dump └── USER.sql ├── pom.xml ├── src └── main │ └── webapp │ ├── WEB-INF │ └── web.xml │ ├── index.jsp │ ├── logout.jsp │ ├── register.jsp │ ├── success.jsp │ ├── userRegistration.jsp │ └── welcome.jsp └── target ├── LoginWebApp-1.war └── LoginWebApp-1 ├── WEB-INF ├── lib │ ├── mysql-connector-java-5.1.30.jar │ └── servlet-api-2.5.jar └── web.xml ├── index.jsp ├── logout.jsp ├── register.jsp ├── success.jsp ├── userRegistration.jsp └── welcome.jsp /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM tomcat:latest 2 | 3 | LABEL maintainer="Nidhi Gupta" 4 | 5 | ADD ./target/LoginWebApp-1.war /usr/local/tomcat/webapps/ 6 | 7 | EXPOSE 8080 8 | 9 | CMD ["catalina.sh", "run"] 10 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | agent any 3 | 4 | tools 5 | { 6 | maven "Maven" 7 | } 8 | stages { 9 | stage('checkout') { 10 | steps { 11 | 12 | git branch: 'master', url: 'https://github.com/devops4solutions/CI-CD-using-Docker.git' 13 | 14 | } 15 | } 16 | stage('Execute Maven') { 17 | steps { 18 | 19 | sh 'mvn package' 20 | } 21 | } 22 | 23 | 24 | stage('Docker Build and Tag') { 25 | steps { 26 | 27 | sh 'docker build -t samplewebapp:latest .' 28 | sh 'docker tag samplewebapp nikhilnidhi/samplewebapp:latest' 29 | //sh 'docker tag samplewebapp nikhilnidhi/samplewebapp:$BUILD_NUMBER' 30 | 31 | } 32 | } 33 | 34 | stage('Publish image to Docker Hub') { 35 | 36 | steps { 37 | withDockerRegistry([ credentialsId: "dockerHub", url: "" ]) { 38 | sh 'docker push nikhilnidhi/samplewebapp:latest' 39 | // sh 'docker push nikhilnidhi/samplewebapp:$BUILD_NUMBER' 40 | } 41 | 42 | } 43 | } 44 | 45 | stage('Run Docker container on Jenkins Agent') { 46 | 47 | steps 48 | { 49 | sh "docker run -d -p 8003:8080 nikhilnidhi/samplewebapp" 50 | 51 | } 52 | } 53 | stage('Run Docker container on remote hosts') { 54 | 55 | steps { 56 | sh "docker -H ssh://jenkins@172.31.28.25 run -d -p 8003:8080 nikhilnidhi/samplewebapp" 57 | 58 | } 59 | } 60 | } 61 | } 62 | 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CI-CD-using-Docker 2 | This repository will run a java application in a tomcat container using Jenkins and Docker 3 | 4 | 5 | # Youtube Link 6 | 7 | https://www.youtube.com/watch?v=B1sjiq1wD_Y&feature=youtu.be 8 | 9 | # Blog Link 10 | https://devops4solutions.com/ci-cd-using-jenkins-and-docker-2/ 11 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | db: 4 | image: mysql:5.7 5 | volumes: 6 | - db_vol:/var/lib/mysql 7 | - ./mysql-dump:/docker-entrypoint-initdb.d 8 | environment: 9 | MYSQL_ROOT_PASSWORD: root 10 | MYSQL_DATABASE: testdb1 11 | MYSQL_USER: testuser 12 | MYSQL_PASSWORD: root 13 | ports: 14 | - 3306:3306 15 | phpmyadmin: 16 | depends_on: 17 | - db 18 | image: phpmyadmin/phpmyadmin 19 | ports: 20 | - '8081:80' 21 | environment: 22 | PMA_HOST: db 23 | MYSQL_ROOT_PASSWORD: root 24 | web: 25 | build: 26 | context: . 27 | depends_on: 28 | - db 29 | image: tomcat 30 | volumes: 31 | - ./target/LoginWebApp-1.war:/usr/local/tomcat/webapps/LoginWebApp-1.war 32 | ports: 33 | - '8082:8080' 34 | environment: 35 | MYSQL_ROOT_PASSWORD: root 36 | MYSQL_DATABASE: testdb1 37 | MYSQL_USER: testuser 38 | MYSQL_PASSWORD: root 39 | volumes: 40 | db_vol: 41 | -------------------------------------------------------------------------------- /docker-compose_mysql.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | db: 4 | image: mysql:5.7 5 | volumes: 6 | - db_data1:/var/lib/mysql 7 | environment: 8 | MYSQL_ROOT_PASSWORD: root 9 | MYSQL_DATABASE: testdb1 10 | MYSQL_USER: testuser 11 | MYSQL_PASSWORD: root 12 | ports: 13 | - 3306:3306 14 | volumes: 15 | db_data1: 16 | name: db_data1 17 | -------------------------------------------------------------------------------- /docker-compose_mysql_phpMyAdmin.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | db: 4 | image: mysql:5.7 5 | volumes: 6 | - /opt/test:/var/lib/mysql 7 | environment: 8 | MYSQL_ROOT_PASSWORD: root 9 | MYSQL_DATABASE: testdb1 10 | MYSQL_USER: testuser 11 | MYSQL_PASSWORD: root 12 | ports: 13 | - 3306:3306 14 | phpmyadmin: 15 | depends_on: 16 | - db 17 | image: phpmyadmin/phpmyadmin 18 | ports: 19 | - '8081:80' 20 | environment: 21 | PMA_HOST: db 22 | MYSQL_ROOT_PASSWORD: root 23 | -------------------------------------------------------------------------------- /docker-compose_tomcat.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | web: 4 | image: tomcat 5 | ports: 6 | - "8081:8080" 7 | volumes: 8 | - ./index.html:/usr/local/tomcat/webapps/test/index.html 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | This is a index page 2 | -------------------------------------------------------------------------------- /mysql-dump/USER.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 5.0.2 3 | -- https://www.phpmyadmin.net/ 4 | -- 5 | -- Host: db 6 | -- Generation Time: Sep 12, 2020 at 11:53 PM 7 | -- Server version: 5.7.31 8 | -- PHP Version: 7.4.9 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | START TRANSACTION; 12 | SET time_zone = "+00:00"; 13 | 14 | 15 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 16 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 17 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 18 | /*!40101 SET NAMES utf8mb4 */; 19 | 20 | -- 21 | -- Database: `testdb1` 22 | -- 23 | 24 | -- -------------------------------------------------------- 25 | 26 | -- 27 | -- Table structure for table `USER` 28 | -- 29 | 30 | CREATE TABLE `USER` ( 31 | `first_name` varchar(20) NOT NULL, 32 | `last_name` varchar(20) NOT NULL, 33 | `email` varchar(20) NOT NULL, 34 | `username` varchar(20) NOT NULL, 35 | `password` varchar(20) NOT NULL 36 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 37 | COMMIT; 38 | 39 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 40 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 41 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 42 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.devops4solutions 5 | LoginWebApp 6 | war 7 | 1 8 | LoginWebApp Maven Webapp 9 | http://maven.apache.org 10 | 11 | 12 | javax.servlet 13 | servlet-api 14 | 2.5 15 | 16 | 17 | mysql 18 | mysql-connector-java 19 | 5.1.30 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.apache.maven.plugins 27 | maven-jar-plugin 28 | 2.4 29 | 30 | 31 | org.apache.maven.plugins 32 | maven-war-plugin 33 | 2.4 34 | 35 | 36 | org.apache.maven.plugins 37 | maven-source-plugin 38 | 2.1.2 39 | 40 | 41 | 42 | 43 | 44 | 45 | org.apache.maven.plugins 46 | maven-jar-plugin 47 | 48 | 49 | false 50 | 51 | 52 | 53 | 54 | org.apache.maven.plugins 55 | maven-war-plugin 56 | 57 | 58 | false 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | false 68 | 69 | central 70 | bintray 71 | https://jcenter.bintray.com 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Archetype Created Web Application 7 | 8 | -------------------------------------------------------------------------------- /src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | 3 | 4 | 5 | 6 | JSP Example 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
Login Page
Username
Password
New User Register Here
35 |
36 |
37 | 38 | -------------------------------------------------------------------------------- /src/main/webapp/logout.jsp: -------------------------------------------------------------------------------- 1 | <% 2 | session.setAttribute("userName", null); 3 | session.invalidate(); 4 | response.sendRedirect("index.jsp"); 5 | %> -------------------------------------------------------------------------------- /src/main/webapp/register.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | 3 | 4 | 5 | 6 | Registration 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
Enter Information Here
First Name
Last Name
Email
User Name
Password
Already registered!! Login Here
47 |
48 |
49 | -------------------------------------------------------------------------------- /src/main/webapp/success.jsp: -------------------------------------------------------------------------------- 1 | Registration is Successful. 2 | Please Login Here Go to Login -------------------------------------------------------------------------------- /src/main/webapp/userRegistration.jsp: -------------------------------------------------------------------------------- 1 | <%@ page import="java.sql.*"%> 2 | <% 3 | String userName = request.getParameter("userName"); 4 | String password = request.getParameter("password"); 5 | String firstName = request.getParameter("firstName"); 6 | String lastName = request.getParameter("lastName"); 7 | String email = request.getParameter("email"); 8 | Class.forName("com.mysql.jdbc.Driver"); 9 | Connection con = DriverManager.getConnection("jdbc:mysql://db:3306/testdb1", 10 | "testuser", "root"); 11 | Statement st = con.createStatement(); 12 | int i = st.executeUpdate("insert into USER(first_name, last_name, email, username, password, regdate) values ('" + firstName + "','" 13 | + lastName + "','" + email + "','" + userName + "','" + password + "', CURDATE())"); 14 | if (i > 0) { 15 | response.sendRedirect("welcome.jsp"); 16 | 17 | } else { 18 | response.sendRedirect("index.jsp"); 19 | } 20 | %> 21 | -------------------------------------------------------------------------------- /src/main/webapp/welcome.jsp: -------------------------------------------------------------------------------- 1 | <% 2 | if ((session.getAttribute("userName") == null) || (session.getAttribute("userName") == "")) { 3 | %> 4 | You are not logged in
5 | Please Login 6 | <%} else { 7 | %> 8 | Welcome <%=session.getAttribute("userid")%> 9 | Log out 10 | <% 11 | } 12 | %> -------------------------------------------------------------------------------- /target/LoginWebApp-1.war: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops4solutions/CI-CD-using-Docker/a0359d1468134e7970d01639b5e349fee0e4c37c/target/LoginWebApp-1.war -------------------------------------------------------------------------------- /target/LoginWebApp-1/WEB-INF/lib/mysql-connector-java-5.1.30.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops4solutions/CI-CD-using-Docker/a0359d1468134e7970d01639b5e349fee0e4c37c/target/LoginWebApp-1/WEB-INF/lib/mysql-connector-java-5.1.30.jar -------------------------------------------------------------------------------- /target/LoginWebApp-1/WEB-INF/lib/servlet-api-2.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devops4solutions/CI-CD-using-Docker/a0359d1468134e7970d01639b5e349fee0e4c37c/target/LoginWebApp-1/WEB-INF/lib/servlet-api-2.5.jar -------------------------------------------------------------------------------- /target/LoginWebApp-1/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Archetype Created Web Application 7 | 8 | -------------------------------------------------------------------------------- /target/LoginWebApp-1/index.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | 3 | 4 | 5 | 6 | JSP Example 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
Login Page
Username
Password
New User Register Here
35 |
36 |
37 | 38 | -------------------------------------------------------------------------------- /target/LoginWebApp-1/logout.jsp: -------------------------------------------------------------------------------- 1 | <% 2 | session.setAttribute("userName", null); 3 | session.invalidate(); 4 | response.sendRedirect("index.jsp"); 5 | %> -------------------------------------------------------------------------------- /target/LoginWebApp-1/register.jsp: -------------------------------------------------------------------------------- 1 | <%@page contentType="text/html" pageEncoding="UTF-8"%> 2 | 3 | 4 | 5 | 6 | Registration 7 | 8 | 9 |
10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
Enter Information Here
First Name
Last Name
Email
User Name
Password
Already registered!! Login Here
47 |
48 |
49 | -------------------------------------------------------------------------------- /target/LoginWebApp-1/success.jsp: -------------------------------------------------------------------------------- 1 | Registration is Successful. 2 | Please Login Here Go to Login -------------------------------------------------------------------------------- /target/LoginWebApp-1/userRegistration.jsp: -------------------------------------------------------------------------------- 1 | <%@ page import="java.sql.*"%> 2 | <% 3 | String userName = request.getParameter("userName"); 4 | String password = request.getParameter("password"); 5 | String firstName = request.getParameter("firstName"); 6 | String lastName = request.getParameter("lastName"); 7 | String email = request.getParameter("email"); 8 | Class.forName("com.mysql.jdbc.Driver"); 9 | Connection con = DriverManager.getConnection("jdbc:mysql://db:3306/testdb1", 10 | "testuser", "root"); 11 | Statement st = con.createStatement(); 12 | int i = st.executeUpdate("insert into USER(first_name, last_name, email, username, password, regdate) values ('" + firstName + "','" 13 | + lastName + "','" + email + "','" + userName + "','" + password + "', CURDATE())"); 14 | if (i > 0) { 15 | response.sendRedirect("welcome.jsp"); 16 | 17 | } else { 18 | response.sendRedirect("index.jsp"); 19 | } 20 | %> 21 | -------------------------------------------------------------------------------- /target/LoginWebApp-1/welcome.jsp: -------------------------------------------------------------------------------- 1 | <% 2 | if ((session.getAttribute("userName") == null) || (session.getAttribute("userName") == "")) { 3 | %> 4 | You are not logged in
5 | Please Login 6 | <%} else { 7 | %> 8 | Welcome <%=session.getAttribute("userid")%> 9 | Log out 10 | <% 11 | } 12 | %> --------------------------------------------------------------------------------