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) or build.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 or SLF4J.

  • 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