Implementation of CI/CD in Java application(Linux) Using Shell and Docker Executor on GitLab
Last Updated :
15 Apr, 2025
There are many executors available to implement CI/CD with GitLab Runner. However, Shell and Docker are more popular among them, and we can easily configure a repository with these runners. These runners can be chosen based on the requirements and availability of the resources. This article mainly focuses on Shell and Docker executors of Java Linux application and code is written in bash script. The application can build and test using a bash script.
Shell Executor: Shell Executor is a very simple executor which helps to build the solution locally on the machine, where GitLab Runner is installed. In this case, GitLab Runner is installed on Linux Machine, so need to install the required software in the same system.
Docker Executor: It is a powerful tool that includes much software and it can be accessed by image. The advantage of this executor is that, we do not need to install any software manually, everything will be taken care of through docker and the required image will be downloaded from the docker hub. However, the disadvantage is that this communication is blocked in some organizations due to security purposes. So, If this is the case Shell Executor is the best alternative.
Implementation of Java on Shell Executor
Requirements
These are the basic software that needs to install on a Linux machine. However, it can be changed based on the compilation script and need to download other software if needed.
Software | Description |
---|
Git | This is the first requirement, to commit the changes on GitLab. It is a version control software that tracks the changing set of files |
JDK | Need to install a specific version of JDK on the machine which you have targeted, to build the jar file. For example, OpenJDK-8 |
Apache Ant | This is a tool that helps to build processes and generate the jar file of the project while running this file. It contains more information about the project and add this information inside the jar. |
Path Configuration
After successful installation, you need to set the path of this installed software in the machine, if it is not set. Run the below command on the machine.
Variable / File | Path |
---|
Git | Set the path of Git in the Linux machine, if it already not set. Can check with which git export Git = /usr/bin/git |
JAVA | export JAVA=/usr/bin/java Can check with which java |
Apache Ant | export ANT=/usr/bin/ant Can check with which ant |
Permission | Give Permission to build.xml before it runs: chmod -R 777 * |
build.xml | It will build the project, and generate the jar based on containing information |
.gitlab-ci.yml | This file should be inside the root directory of the project which contains all the CI/CD configuration including software and script path. Here, you can mention how this repository should run. Before adding this file to the root directory, should check it is a valid yml file or not. |
GitLab Runner Set Up
Follow the below steps to download and configure the GitLab Runner.
1. Download GitLab Runner on Linux Machine
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2. Give it permissions to execute using the following command:
sudo chmod +x /usr/local/bin/gitlab-runner
3. Create a GitLab CI use the following command:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
4. Install and run as a service using the following command:
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
5. Start GitLab Runner using the following command:
sudo gitlab-runner start
6. Stop the GitLab Runner before registering the repository using the following command:
sudo gitlab-runner stop
7. Once GitLab Runner is successfully stopped enter the following command in the terminal for repository registration.
sudo gitlab-runner register
8. When you do repository registration with GitLab Runner, the below questions have to answer.
- Enter your GitLab instance URL: It can be different with each organization and the format will be like http://gitlab.example.com
- Path: Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner
- Enter the gitlab-ci token for this runner: It will be a unique token of each project which will need while registration and it can be found
- Path: Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner
- Enter the gitlab-ci description for this runner: Put Runner name(any name), which will help you to remember that which runner' is running
- Enter the gitlab-ci tags for this runner: It is optional if you want to start GitLab runner when a specific tag is available in yml file.
- Enter the executor: There will be a list of several executors, and type shell(as GitLab Runner will run our system)
9. After successful registration, start the GitLab Runner using the following command
sudo gitlab-runner start
To verify that GitLab Runner has registered the respective repository and the runner has been started. Go to GitLab Account → Select repository which you want to register with runner → Settings → CI/CD → Expand Runner, There will be a green color circle will be available, and displaying message will be Runners activated for this project.
Note: If the circle is gray, it means the runner has not started and starts again.
Linux GitLab Runner Commands
Command | Description |
---|
sudo gitlab-runner register | Register the project with GitLab Runner |
sudo gitlab-runner register | Start the runner |
sudo gitlab-runner stop | Stop the runner |
sudo gitlab-runner status | To know the status of gitlab-runner |
sudo gitlab-runner unregister --name test-runner | Unregister the Runner of a project and replace the test-runner with your runner name and this name can be found inside the config.toml file (where your gitlab-runner ) available. |
sudo gitlab-runner unregister --url http://gitlab.example.com/ --token t0k3n | Remove Runner by URL and token |
sudo gitlab-runner unregister --all-runners | Unregister All Runners |
sudo gitlab-runner restart | This command stops and then starts the GitLab Runner service |
sudo gitlab-runner uninstall | This command stops and uninstalls the GitLab Runner from being run as a service |
sudo gitlab-runner exec | To see a list of available executors, run |
sudo gitlab-runner --help | Check a recent list of commands by executing |
sudo gitlab-runner run --help | Can see the name of the environment variable |
sudo gitlab-runner --debug | To run a command in debug mode |
sudo gitlab-runner exec shell | To see a list of all available options for the shell executor, run |
.gitlab-ci.yml_shell Executor: Below is the content of .gitlab-ci.yml on shell executor mode. However, change it if needed based on requirements.
stages:
- build
- execute
build:
stage: build
script:
- ant -f build.xml
artifacts:
paths:
- abc.jar
execute:
stage: execute
script:
- pwd
- cd scripts
- chmod -R 777 *
- pwd
- ./run.sh
Implementation of Java on Docker Executor
There is no need to install any software manually, everything will be taken from the docker container. However, you can install the required software inputting the name in yml file and also can export the path. To run the GitLab runner on docker executor mode, Go to GitLab Runner Set-Up(above), and select docker instead of shell.
.gitlab-ci.yml_ Docker Executor: Below are the content of .gitlab-ci.yml on docker executor mode. However, change it if needed.
image: ubuntu:latest
stages:
- build
- execute
before_script:
- echo "Before script section"
- apt-get update && apt-get -y install openjdk-8-jdk && apt-get -y install ant
build:
stage: build
script:
- ant -f build.xml
artifacts:
paths:
- abc.jar
execute:
stage: execute
script:
- pwd
- cd scripts
- chmod -R 777 *
- pwd
- ./runtest.sh
Similar Reads
Java Tutorial
Java is a high-level, object-oriented programming language used to build web apps, mobile applications, and enterprise software systems. It is known for its Write Once, Run Anywhere capability, which means code written in Java can run on any device that supports the Java Virtual Machine (JVM).Java s
10 min read
GeeksforGeeks Practice - Leading Online Coding Platform
GeeksforGeeks Practice is an online coding platform designed to help developers and students practice coding online and sharpen their programming skills with the following features. GfG 160: This consists of 160 most popular interview problems organized topic wise and difficulty with with well writt
6 min read
Java OOP(Object Oriented Programming) Concepts
Java Object-Oriented Programming (OOPs) is a fundamental concept in Java that every developer must understand. It allows developers to structure code using classes and objects, making it more modular, reusable, and scalable.The core idea of OOPs is to bind data and the functions that operate on it,
13 min read
Java Interview Questions and Answers
Java is one of the most popular programming languages in the world, known for its versatility, portability, and wide range of applications. Java is the most used language in top companies such as Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon, and many more because of its features and per
15+ min read
Arrays in Java
Arrays in Java are one of the most fundamental data structures that allow us to store multiple values of the same type in a single variable. They are useful for storing and managing collections of data. Arrays in Java are objects, which makes them work differently from arrays in C/C++ in terms of me
15+ min read
Inheritance in Java
Java Inheritance is a fundamental concept in OOP(Object-Oriented Programming). It is the mechanism in Java by which one class is allowed to inherit the features(fields and methods) of another class. In Java, Inheritance means creating new classes based on existing ones. A class that inherits from an
13 min read
7 Different Ways to Take a Screenshot in Windows 10
Quick Preview to Take Screenshot on Windows 10:-Use the CTRL + PRT SC Keys to take a quick screenshot.Use ALT + PRT SC Keys to take a Screenshot of any application window.Use Windows + Shift + S Keys to access the Xbox Game Bar.Use Snip & Sketch Application as well to take screenshotTaking Scree
7 min read
Collections in Java
Any group of individual objects that are represented as a single unit is known as a Java Collection of Objects. In Java, a separate framework named the "Collection Framework" has been defined in JDK 1.2 which holds all the Java Collection Classes and Interface in it. In Java, the Collection interfac
15+ min read
Java Exception Handling
Exception handling in Java allows developers to manage runtime errors effectively by using mechanisms like try-catch block, finally block, throwing Exceptions, Custom Exception handling, etc. An Exception is an unwanted or unexpected event that occurs during the execution of a program, i.e., at runt
10 min read
ACID Properties in DBMS
In the world of Database Management Systems (DBMS), transactions are fundamental operations that allow us to modify and retrieve data. However, to ensure the integrity of a database, it is important that these transactions are executed in a way that maintains consistency, correctness, and reliabilit
8 min read