


Building a Custom Ubuntu Image with SDKMAN and Using It in a GitLab CI/CD Pipeline
This article details creating a custom Ubuntu Docker image pre-configured with SDKMAN, a versatile SDK manager, and integrating it into a GitLab CI/CD pipeline. This ensures consistent development and CI/CD environments.
Step 1: Building the Custom Docker Image
The following Dockerfile creates an Ubuntu 20.04 image, installs dependencies, and sets up SDKMAN with specific Java, Scala, and sbt versions:
# Dockerfile FROM ubuntu:20.04 # Install dependencies RUN apt-get update && apt-get install -y curl unzip zip bash git vim wget jq tmux # Install SDKMAN! RUN curl -s "https://get.sdkman.io" | bash # Set shell and source SDKMAN SHELL ["/bin/bash", "-c"] RUN source "$HOME/.sdkman/bin/sdkman-init.sh" && \ sdk install java 21.0.2-open && \ sdk install sbt 1.8.2 && \ sdk install scala 2.13.10 # Set working directory WORKDIR /app
Explanation: The Dockerfile utilizes ubuntu:20.04
as its base. Essential tools are installed using apt-get
. SDKMAN is installed via its script, and specific SDK versions are then installed. Finally, the working directory is set to /app
.
Building and Pushing the Image
Build the image using:
docker build -t bansikah/gitlab-ci:v1.0.1 .
Push the image to your Docker registry (e.g., Docker Hub): (Image omitted for brevity, but the process is shown visually.)
Step 2: GitLab CI/CD Integration
This .gitlab-ci.yml
file uses the custom image and verifies the SDKMAN installation:
# .gitlab-ci.yml image: bansikah/gitlab-ci:v1.0.1 stages: - test test-job: stage: test script: - echo "Checking SDKMAN version..." - source "$HOME/.sdkman/bin/sdkman-init.sh" - sdk version - echo "Checking installed SDKs..."
Explanation: The .gitlab-ci.yml
specifies the custom image. A test
stage runs a job that sources SDKMAN, checks its version, and (implicitly) verifies the SDK installations by attempting to run sdk version
.
Step 3: Running the Pipeline
Pushing the .gitlab-ci.yml
to your GitLab repository triggers the pipeline. The test-job
utilizes the custom image, verifying SDKMAN and its installed SDKs.
Conclusion
This custom Docker image streamlines development and CI/CD by providing a consistent environment with pre-installed SDKs. Further customization is possible by adding more SDKs or tools as needed. Refer to the SDKMAN, Docker, and GitLab CI/CD documentation for more information.
The above is the detailed content of Building a Custom Ubuntu Image with SDKMAN and Using It in a GitLab CI/CD Pipeline. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.
