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.
The following Dockerfile creates an Ubuntu 20.04 image, installs dependencies, and sets up SDKMAN with specific Java, Scala, and sbt versions:
<code class="language-dockerfile"># 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</code>
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
.
Build the image using:
<code class="language-bash">docker build -t bansikah/gitlab-ci:v1.0.1 .</code>
Push the image to your Docker registry (e.g., Docker Hub): (Image omitted for brevity, but the process is shown visually.)
This .gitlab-ci.yml
file uses the custom image and verifies the SDKMAN installation:
<code class="language-yaml"># .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..."</code>
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
.
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.
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!