This document explains Build Tools, Jenkins CI/CD pipelines, Docker, Dockerfile, Docker Compose, and containerizing real applications like Node.js, Java, and React.
Build tools automate compiling, packaging, testing, and deploying code.
Maven uses pom.xml file and follows a standard directory structure.
Install Maven:
sudo apt install maven mvn -version
Gradle is faster and uses build.gradle.
Install Gradle:
sudo apt install gradle gradle -v
mvn clean → Removes old build filesmvn compile → Compiles sourcemvn test → Runs testsmvn package → Creates JAR/WARReference: Maven Docs | Gradle Docs
Jenkins automates testing, integration, building, and deployment.
sudo apt update sudo apt install openjdk-11-jdk wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update sudo apt install jenkins sudo systemctl enable --now jenkins
Access Jenkins in browser:
http://localhost:8080
Create Jenkinsfile inside your project:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Docker Build') {
steps {
sh 'docker build -t myapp .'
}
}
}
}
Reference: Jenkins Official Docs
Docker packages your application along with environment so it runs anywhere.
sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker sudo usermod -aG docker $USER
docker pull <image>docker run -it <image>docker imagesdocker ps -aFROM node:18 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]
Use it for multi-container apps (API + Database).
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
mongo:
image: mongo
ports:
- "27017:27017"
Reference: Docker Docs
FROM node:18 WORKDIR /app COPY . . RUN npm install EXPOSE 3000 CMD ["npm", "start"]
FROM node:18 as build WORKDIR /app COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80
FROM openjdk:17-jdk-slim COPY target/myapp.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]