SKILL.md
Gradle CI/CD Integration
Table of Contents
- [Purpose](#purpose)
- [When to Use](#when-to-use)
- [Quick Start](#quick-start)
- [Instructions](#instructions)
- [Requirements](#requirements)
- [See Also](#see-also)
Purpose
Configure Gradle builds for continuous integration and deployment with caching, artifact management, test reporting, and Docker image building. Covers GitHub Actions, GitLab CI, Jenkins, and CircleCI with production-ready optimizations.
When to Use
Use this skill when you need to:
- Set up automated builds in GitHub Actions, GitLab CI, Jenkins, or CircleCI
- Configure dependency and build caching for faster CI pipelines
- Generate and publish test reports in CI/CD
- Build and push Docker images in automated pipelines
- Optimize CI build performance with parallel execution
- Handle build artifacts and code coverage reports
Quick Start
GitHub Actions .github/workflows/build.yml:
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
- run: ./gradlew build --parallel --build-cache --scan
GitLab CI .gitlab-ci.yml:
image: gradle:8.11-jdk21-alpine
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.caching=true"
build:
script:
- ./gradlew build --parallel --build-cache
cache:
paths:
- .gradle/wrapper
- .gradle/caches
Instructions
Step 1: Use Gradle Wrapper in CI
Always use the Gradle wrapper for consistent versions:
# Use wrapper (recommended)
./gradlew build
# Not this
gradle build
Ensure wrapper is executable:
chmod +x ./gradlew
git add gradlew
Step 2: Configure Build Caching
Enable caching in your CI configuration:
GitHub Actions:
- uses: gradle/actions/setup-gradle@v4
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
GitLab CI:
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .gradle/wrapper
- .gradle/caches
Jenkins:
agent {
docker {
image 'gradle:8.11-jdk21'
args '-v $HOME/.gradle:/home/gradle/.gradle'
}
}
See [references/detailed-guide.md](./references/detailed-guide.md) for complete caching strategies.
Step 3: Optimize Build Performance
Use these flags for faster CI builds:
./gradlew build \
--parallel \ # Parallel execution
--build-cache \ # Remote build cache
--configuration-cache \ # Configuration cache (Gradle 8+)
--scan # Build scan for analysis
Configure in gradle.properties:
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.daemon=false # Disable for CI
Step 4: Configure Test Reporting
JUnit XML reports:
# GitHub Actions
- name: Publish Test Results
uses: mikepenz/action-junit-report@v4
if: always()
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
GitLab CI:
test:
script:
- ./gradlew test
artifacts:
reports:
junit: build/test-results/test/TEST-*.xml
See [references/detailed-guide.md](./references/detailed-guide.md) for coverage reporting with JaCoCo.
Step 5: Build and Push Docker Images
GitHub Actions with Jib:
- name: Build Docker Image (PR)
if: github.event_name == 'pull_request'
run: ./gradlew jibDockerBuild
- name: Build and Push (Main)
if: github.ref == 'refs/heads/main'
run: ./gradlew jib
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
GitLab CI:
docker-build:
stage: deploy
only:
- main
script:
- ./gradlew jib
environment:
name: production
See [references/detailed-guide.md](./references/detailed-guide.md) for Jenkins and CircleCI configurations.
Step 6: Handle Build Artifacts
Upload artifacts:
# GitHub Actions
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: |
build/libs/
build/reports/
GitLab CI:
build:
artifacts:
paths:
- build/libs/
expire_in: 1 day
Step 7: Implement Build Scans
Enable build scans for troubleshooting:
// build.gradle.kts
plugins {
id("com.gradle.enterprise") version "3.16.1"
}
gradleEnterprise {
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
publishAlways()
}
}
Run with --scan:
./gradlew build --scan
Requirements
- Gradle Wrapper: 8.11+ recommended
- Java: JDK 17+ (21 recommended for latest features)
- CI Platform: GitHub Actions, GitLab CI, Jenkins, or CircleCI
- Dependencies:
- gradle/actions/setup-gradle@v4 for GitHub Actions - Docker for container-based builds
- Secrets: Store credentials securely
- GRADLEENCRYPTIONKEY for cache encryption - DOCKERUSERNAME, DOCKERPASSWORD for registry auth
See Also
- [references/detailed-guide.md](./references/detailed-guide.md) - Comprehensive examples for all CI platforms, commands reference, best practices, and troubleshooting
- [gradle-performance-optimization](../gradle-performance-optimization/SKILL.md) - Optimize build caching
- [gradle-docker-jib](../gradle-docker-jib/SKILL.md) - Build Docker images
- [gradle-testing-setup](../gradle-testing-setup/SKILL.md) - Configure test reporting
- GitHub Actions Gradle Setup - Official Gradle Actions