Skip to main content

Maven Project

Integrating Maven With CI/CD

Learn how to integrate Maven with CI/CD pipelines using Jenkins and GitHub Actions. Understand skipping tests with -DskipTests and deploying Maven artifacts to Nexus or Artifactory.

Introduction

Modern software development relies on Continuous Integration (CI) and Continuous Delivery (CD) pipelines to automate building, testing, and deploying applications.

Maven integrates seamlessly with CI/CD tools such as Jenkins and GitHub Actions, making it easy to automate builds, run tests, and publish artifacts to repositories like Nexus and Artifactory.

In this lesson, you’ll learn:

  • How to run Maven in Jenkins and GitHub Actions
  • How to skip tests for faster builds (-DskipTests)
  • How to deploy Maven artifacts to Nexus/Artifactory

1. Running Maven in Jenkins

Jenkins is one of the most widely used CI/CD tools, and Maven integrates with it out-of-the-box.

Example: Jenkins Pipeline with Maven:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/example/my-app.git'
            }
        }
        stage('Build with Maven') {
            steps {
                sh 'mvn clean install'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}

✅ Jenkins can automatically detect your pom.xml and run Maven commands.
✅ Build results, test reports, and artifacts can be stored and displayed in Jenkins.

2. Running Maven in GitHub Actions

GitHub Actions is a cloud-native CI/CD platform directly integrated with GitHub repositories.

Example: GitHub Actions Workflow with Maven:

Create .github/workflows/maven.yml in your repo:

name: Java CI with Maven

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: '17'
        cache: 'maven'
    - name: Build with Maven
      run: mvn clean install

✅ Automatically runs mvn clean install on every push or pull request.
✅ Caches dependencies for faster builds.

3. Skipping Tests for Faster Builds

In CI/CD pipelines, sometimes you want to build quickly without running unit tests (e.g., during prototyping).

Maven provides the -DskipTests flag:

mvn clean install -DskipTests
  • -DskipTests → Compiles test code but does not run tests.
  • -Dmaven.test.skip=true → Skips compiling and running test code.

📌 Use this only when necessary — skipping tests in production pipelines is risky.

4. Deploying Artifacts to Nexus/Artifactory

Maven can automatically deploy build artifacts (JARs, WARs, POMs) to artifact repositories such as Sonatype Nexus or JFrog Artifactory.

Step 1: Configure distributionManagement in pom.xml

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://nexus.example.com/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://nexus.example.com/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

Step 2: Add Credentials in settings.xml

Located at ~/.m2/settings.xml:

<servers>
    <server>
        <id>releases</id>
        <username>deploy_user</username>
        <password>deploy_password</password>
    </server>
    <server>
        <id>snapshots</id>
        <username>deploy_user</username>
        <password>deploy_password</password>
    </server>
</servers>

Step 3: Deploy Artifact

mvn clean deploy

✅ Uploads the artifact to Nexus/Artifactory
✅ Used in enterprise projects for sharing artifacts across teams

Best Practices for Maven in CI/CD

  • Always run tests in production pipelines (skip tests only in dev builds).
  • Cache Maven dependencies in CI/CD for faster builds.
  • Use profiles (dev, test, prod) to adapt builds to environments.
  • Keep credentials in CI/CD secrets, not hardcoded in pom.xml.

Key Takeaways

  • Maven integrates seamlessly with CI/CD tools like Jenkins and GitHub Actions.
  • Use -DskipTests for faster builds, but avoid skipping tests in production.
  • Artifacts can be deployed to Nexus or Artifactory using Maven’s deploy phase.