Exercise-12
12. Practical Exercise and Wrap-Up: Build and Deploy a Complete DevOps Pipeline, Discussion on Best Practices and Q&A
Objective:
To integrate the knowledge gained from previous experiments by designing and executing a complete DevOps pipeline for a Java-based application. This includes stages such as version control, build automation, testing, packaging, deployment, and optional containerization and monitoring.
Part A: Practical Hands-On Exercise
1. Project Setup
-
Choose a Java Application: You can use a sample application (e.g., a Spring Boot app or a basic Java servlet).
-
Version Control:
-
Create a new GitHub repository.
-
Push the project code to the repository.
-
Ensure
.gitignore
excludes target/, .idea/, and other unnecessary files.
-
2. Build Automation with Maven or Gradle
-
Create or validate your
pom.xml
(Maven) orbuild.gradle
(Gradle) file. -
Include:
-
Project dependencies
-
Build plugins
-
Test configuration
-
-
Example (for Maven):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build>
3. Configure Jenkins
-
Install Jenkins (local/cloud – AWS EC2 preferred)
-
Install Plugins:
-
Git Plugin
-
Maven Integration Plugin
-
Docker (if using containerization)
-
-
Create a Jenkins Job (Freestyle or Pipeline):
-
Source Code Management: GitHub Repo
-
Build Trigger: "Poll SCM" or Webhook from GitHub
-
Build Steps:
-
mvn clean install
-
Optional: Run test cases, create artifacts
-
-
4. Unit Testing
-
Write unit test cases using JUnit or TestNG.
-
Ensure Jenkins is configured to fail builds on test failures.
-
Sample Test (JUnit):
@Test public void testAdd() { assertEquals(5, Calculator.add(2, 3)); }
5. Artifact Management
-
Local Option: Save the
.jar
or.war
file in Jenkins workspace or shared location. -
Advanced Option: Use Nexus/Artifactory to store the generated build artifacts.
6. Containerization (Optional but Encouraged)
-
Create a
Dockerfile
:FROM openjdk:11 COPY target/myapp.jar myapp.jar ENTRYPOINT ["java", "-jar", "myapp.jar"]
-
Build Docker Image:
docker build -t yourusername/myapp:v1 .
-
Push to Docker Hub:
docker push yourusername/myapp:v1
7. Deployment
-
Local Deployment:
-
Run the
.jar
or use Docker:docker run -p 8080:8080 yourusername/myapp:v1
-
-
Cloud Deployment:
-
SCP the artifact to AWS EC2 or use Jenkins to automate deployment.
-
Start the application on the cloud server.
-
8. Monitoring and Logging (Optional/Advanced)
-
Introduce basic logging using
Log4j
orSLF4J
. -
If time permits:
-
Set up Prometheus for metrics collection.
-
Use Grafana for visualization.
-
Configure alerts for failed builds or crashed containers.
-
Part B: Best Practices Discussion
Topic | Description |
---|---|
CI/CD | Importance of continuous integration & delivery for faster feedback loops. |
Fast & Reliable Builds | Keep builds short and optimized. Use build caching and parallel test execution. |
Security | Never hardcode credentials. Use environment variables or tools like HashiCorp Vault. |
Infrastructure as Code | Use tools like Terraform or Ansible for consistent, automated infra setup. |
Branching Strategies | Use GitFlow or trunk-based development to manage feature and release branches. |
Deployment Strategies | Use Blue-Green or Canary deployment to reduce risk. |
Container Orchestration | Learn basics of Kubernetes for managing container-based apps. |
Part C: Q&A Session
Encourage open interaction on:
-
Common Errors:
-
Jenkins build failures
-
Docker image issues
-
Maven dependency problems
-
-
Clarification on Concepts:
-
Difference between CI and CD
-
Use of webhooks
-
Real-world Jenkins pipelines
-
-
Career & Industry Insights:
-
DevOps engineer roles
-
Certification paths (AWS, Docker, Jenkins)
-
Popular tools in the market
-
Comments
Post a Comment