Iβll show you how to configure Gradle build for a Java/Scala project and integrate it with GitLab CI/CD so that it can be automatically released and published to a Maven repository.
The example uses Axion release Gradle plugin to manage version number using git tags and Maven Publish Gradle plugin to upload artifacts to a Maven (Nexus) repository.
As an extra step Iβm demonstrating how to publish a distribution zip file to the Maven repository and then how to add a link to GitLab release. You can see distZip in the code below which is provided by the Distribution Gradle plugin.
Create new variables CI_REPOSITORY_USERNAME and CI_REPOSITORY_PASSWORD in your GitLab project (Settings > CI/CD > Variables). Set them to Maven repository authentication credentials. The user must have permissions to publish to the repository.
Interesting parts of ./build.gradle:
plugins {
id 'application'
id 'maven-publish'
id 'pl.allegro.tech.build.axion-release' version '1.13.6'
}
ext {
repository_username = System.env.CI_REPOSITORY_USERNAME
repository_password = System.env.CI_REPOSITORY_PASSWORD
}
group = 'com.example'
version = scmVersion.version
publishing {
repositories {
maven {
name 'nexus'
// Enter your Maven repository URL here:
def releasesRepoUrl = 'https://.../repositories/releases'
def snapshotsRepoUrl = 'https://.../repositories/snapshots'
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
credentials {
username repository_username
password repository_password
}
}
}
publications {
// This is an extra (optional) publication:
mavenJava(MavenPublication) {
from components.java
artifact distZip
}
}
}
scmVersion {
// Not really needed, but I like it:
useHighestVersion = true
}
// Other parts which are not related to release & publish
...Hereβs the ./.gitlab-ci.yml file. Check GitLab documentation for more details:
default: image: openjdk:8 variables: GIT_STRATEGY: clone # Make sure that you get tags from git repository otherwise the release # Gradle plugin will not be able to create the next version number: GIT_FETCH_EXTRA_FLAGS: --tags GRADLE_OPTS: "-Dorg.gradle.daemon=false" before_script: - export GRADLE_USER_HOME=`pwd`/.gradle stages: - build - deploy build_job: stage: build script: - ./gradlew build publish_job: stage: deploy rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - ./gradlew createRelease -Prelease.disableChecks - ./gradlew publish - echo "TAG=$(./gradlew currentVersion -q -Prelease.quiet)" >> variables.env artifacts: reports: dotenv: variables.env release_job: stage: deploy image: registry.gitlab.com/gitlab-org/release-cli:latest needs: - job: publish_job artifacts: true rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - echo "Releasing $TAG" release: name: 'Release v$TAG' description: $CI_COMMIT_MESSAGE tag_name: v$TAG ref: $CI_COMMIT_SHA assets: links: - name: 'Installation zip' url: "https://...your Nexus.../service/local/artifact/maven/redirect?g=com.example&a=example-app&v=$TAG&r=releases&e=zip"
Published on Java Code Geeks with permission by Rado Buransky, partner at our JCG program. See the original article here: Release a Gradle Project Using GitLab CI/CD Pipeline Opinions expressed by Java Code Geeks contributors are their own. |
Thank you!
We will contact you soon.
Rado BuranskyFebruary 5th, 2022Last Updated: February 1st, 2022

This site uses Akismet to reduce spam. Learn how your comment data is processed.