Ant and Docker in a Jenkins pipeline

There are many ways to approach a Jenkins build with Apache Ant, but by far the most manageable and maintainable integration path is to delegate to a Docker container and remove the Jenkins administrator from the burden of having to maintain all of the various resources needed to perform a complex build job. In this example, we will show you just how easy it is to build with Apache Ant, Docker and a Jenkins pipeline.

One challenge you encounter when creating a Docker based, Jenkins pipeline for your Apache Ant builds is the fact that there is no official Apache Ant image maintained on Docker Hub. Official containers exist for Maven and the JDK, but not for Apache Ant, so you need to search for an existing one you can use, or build your own. For this Jenkins, Ant and Docker example, I composed my own and made it publicly available. It can be pulled through the following command:

docker pull cameronmcnz/ant-jdk8-git:latest

If you were to look at the Dockerfile used to build this container, you’d see that it contains Git, Ant and version 8 of the JDK.

Ant on Docker Jenkinsfile example

With the path to the container on hand, the creation of a Jenkins pipeline with Ant and Docker is a relatively simple task. The Jenkinsfile is written as though you were to run the Ant build locally, with the only difference being the reference at the start of the Jenkins pipeline to the Docker agent. Here’s how the full Jenkinsfile that runs an Apache Ant build on Docker looks:

Your intro to GitHub Actions training course

Here’s how to get started with GitHub Actions:

  • Create your first GitHub Actions Workflow issues
  • Poke around in the Actions’ Docker container
  • Learn about a multi-step GitHub workflows
  • See how a multi-job GitHub Action works
  • Familiarize yourself with GitHub Actions environment variables on Ubuntu, Windows and MacOS

Follow these tutorials to learn GitHub Actions fast.

pipeline {

  agent { docker { image 'cameronmcnz/ant-jdk8-git:latest' } }

  stages {

    stage('Log the Jenkins Docker Ant Git and Java version info') {

      steps {

        sh 'ant -version'

	sh 'java -version'

	sh 'git --version'

      }

    }

    stage('GitHub Jenkins Ant Docker Build') {

      steps {

        git 'https://github.com/learn-devops-fast/rps-ant.git'

        sh 'ant clean compile test package war'

      }

    }

  }

}

When this Jenkins pipeline runs, the Docker agent pulls from GitHub, builds the Java web application with Apache Ant and then copies all of the build artifacts to the local Jenkins workspace on the host machine.

Jenkins Ant Docker Pipeline

When the Jenkins Ant pipeline runs, the Docker container builds the Java app successfully.


Docker and Apache Ant Dockerfile

For those interested in how the Apache Ant Docker container was built, here is the contents of the Dockerfile:

FROM alpine:3.5







#Create Ant Dir in Docker container



RUN mkdir -p /opt/ant/



#Download Ant 1.9.8



RUN wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.8-bin.tar.gz -P /opt/ant



#Unpack Apache Ant for Java builds



RUN tar -xvzf /opt/ant/apache-ant-1.9.8-bin.tar.gz -C /opt/ant/



# Remove tar file



RUN rm -f /opt/ant/apache-ant-1.9.8-bin.tar.gz



#Add Sonarqube lib



RUN wget https://downloads.sonarsource.com/plugins/org/codehaus/sonar-plugins/sonar-ant-task/2.3/sonar-ant-task-2.3.jar -P /opt/ant/apache-ant-1.9.8/lib/



#Install JDK 1.8



RUN apk --update add openjdk8



#Install GIT for GitHub pulls



RUN apk --update add git



#Install Curl



RUN apk --update add curl



#Set Ant Home in Docker container for Jenkins



ENV ANT_HOME=/opt/ant/apache-ant-1.9.8



#Set Ant Params in Docker for Jenkins



ENV ANT_OPTS="-Xms256M -Xmx512M"



#Update Path



ENV PATH="${PATH}:${HOME}/bin:${ANT_HOME}/bin"

Cameron McKenzie Cameron McKenzie is an AWS Certified AI Practitioner, Machine Learning Engineer, Solutions Architect and author of many popular books in the software development and Cloud Computing space. His growing YouTube channel training devs in Java, Spring, AI and ML has well over 30,000 subscribers.