🏗️ 1. Ensure Your GitLab Project Is Maven-Ready
To store your Java packages (JAR/WAR) into the GitLab Package Registry using GitLab CI/CD (SaaS, version 18.x), you can use GitLab’s built-in Maven repository support.
Here’s a step-by-step guide to:
✅ Build your Java project
✅ Upload the .jar
or .war
to GitLab’s Maven Package Registry
✅ Do this all through your .gitlab-ci.yml
pipeline
In your project root:
Ensure pom.xml
(for Maven) is set up with:
<project>
...
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
...
</project>
Code language: HTML, XML (xml)
🧪 2. GitLab Package Registry URL
GitLab SaaS Maven registry endpoint:
https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/maven
Code language: HTML, XML (xml)
You can find <PROJECT_ID>
in your GitLab project settings or by using:
https://gitlab.com/<namespace>/<project_name>
Code language: HTML, XML (xml)
🔐 3. Create a CI/CD Job to Publish Artifact
.gitlab-ci.yml
example for Maven:
stages:
- build
- publish
variables:
MAVEN_CLI_OPTS: "-B -DskipTests"
build-job:
stage: build
image: maven:3.8.7-jdk-11
script:
- mvn $MAVEN_CLI_OPTS clean package
artifacts:
paths:
- target/*.jar
- target/*.war
publish-job:
stage: publish
image: maven:3.8.7-jdk-11
script:
- mvn deploy -s settings.xml
only:
- main
Code language: PHP (php)
⚙️ 4. Add settings.xml
for GitLab Auth
In the root of your repo (or dynamically generate in CI):
<settings>
<servers>
<server>
<id>gitlab</id>
<username>gitlab-ci-token</username>
<password>${env.CI_JOB_TOKEN}</password>
</server>
</servers>
</settings>
Code language: HTML, XML (xml)
Ensure your pom.xml
contains:
<distributionManagement>
<repository>
<id>gitlab</id>
<url>https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/maven</url>
</repository>
</distributionManagement>
Code language: HTML, XML (xml)
🛡️ 5. Use the CI_JOB_TOKEN
Securely
gitlab-ci-token
is a special user recognized by GitLab’s package registry.CI_JOB_TOKEN
is auto-injected in GitLab CI/CD and scoped to your project.
📦 6. Check Published Packages
After the pipeline completes:
- Go to your GitLab project
- Click on Packages & Registries → Package Registry
- You’ll see your
.jar
or.war
listed
🧠 Bonus: Clean Up or Promote Packages
You can add manual jobs to:
- Promote packages to another environment
- Delete old versions via API
- Install them in another Java project using Maven:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
</dependency>
Code language: HTML, XML (xml)
✅ Summary
Step | Description |
---|---|
Build Artifact | Use mvn package in CI job |
Upload to GitLab | Use mvn deploy with GitLab Maven repo |
Auth | Use CI_JOB_TOKEN with gitlab-ci-token |
View | Packages tab in GitLab UI |
How to use Package registry using Gradle
Here is a step-by-step guide to publish JAR/WAR packages from a Gradle-based Java project to GitLab’s Maven Package Registry, using GitLab SaaS 18.x.
✅ Overview
- You’ll use GitLab’s Maven-compatible Package Registry
- You’ll configure Gradle to use GitLab as a Maven repo
- You’ll automate it using
.gitlab-ci.yml
andCI_JOB_TOKEN
📁 1. Setup Your Gradle Project
In your build.gradle
file:
plugins {
id 'java'
id 'maven-publish'
}
group = 'com.example'
version = '1.0.0'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
maven {
name = "GitLab"
url = uri("https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/maven")
credentials {
username = project.findProperty("gitlabUser") ?: System.getenv("CI_JOB_TOKEN")
password = project.findProperty("gitlabToken") ?: System.getenv("CI_JOB_TOKEN")
}
}
}
}
Code language: JavaScript (javascript)
Replace
<PROJECT_ID>
with your GitLab project ID. You can find it on the project homepage (e.g.,gitlab.com/api/v4/projects/1234567
).
🔐 2. No Hardcoded Credentials
Do not store username/token in code.
In CI/CD, GitLab will inject CI_JOB_TOKEN
automatically. For local testing, you can override via gradle.properties
or CLI:
gitlabUser=gitlab-ci-token
gitlabToken=<your personal access token>
Code language: HTML, XML (xml)
🧪 3. Test Locally (Optional)
./gradlew publish \
-PgitlabUser=gitlab-ci-token \
-PgitlabToken=<your GitLab personal access token>
Code language: HTML, XML (xml)
⚙️ 4. Create .gitlab-ci.yml
stages:
- build
- publish
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
build-job:
stage: build
image: gradle:8.2.1-jdk17
script:
- gradle build
publish-job:
stage: publish
image: gradle:8.2.1-jdk17
script:
- gradle publish
only:
- main
Code language: JavaScript (javascript)
This will publish the JAR/WAR file to GitLab Package Registry on
main
branch only.
📦 5. Where to View Packages
After successful pipeline execution:
- Navigate to Your Project → Packages & Registries → Package Registry
- You’ll see the
.jar
or.war
under your published Maven group.
🔁 6. How to Use in Other Projects
In another Gradle project, consume the published package:
repositories {
maven {
url = uri("https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/maven")
credentials {
username = 'gitlab-ci-token'
password = System.getenv("CI_JOB_TOKEN") // or use .env or gradle.properties
}
}
}
dependencies {
implementation 'com.example:your-artifact:1.0.0'
}
Code language: JavaScript (javascript)
✅ Summary Table
Step | Action |
---|---|
build.gradle | Add maven-publish , configure GitLab Maven repo |
Credentials | Use CI_JOB_TOKEN with gitlab-ci-token |
.gitlab-ci.yml | Run gradle publish from CI/CD |
Registry URL | https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/maven |
View Packages | Project → Packages & Registries → Package Registry |
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I have worked at Cotocus. I share tech blog at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow , and SEO strategies at Wizbrand.
Do you want to learn Quantum Computing?
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at WIZBRAND