Skip to content
12 changes: 6 additions & 6 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,14 @@ void copyRPMs() {
sh """
cd src
if [ -z ${env.ML_RPM} ]; then
wget --no-verbose https://bed-artifactory.bedford.progress.com:443/artifactory/ml-rpm-tierpoint/${RPMbranch}/server/MarkLogic-${RPMversion}${RPMsuffix}.x86_64.rpm
wget --no-check-certificate --no-verbose https://bed-artifactory.bedford.progress.com:443/artifactory/ml-rpm-tierpoint/${RPMbranch}/server/MarkLogic-${RPMversion}${RPMsuffix}.x86_64.rpm
else
wget --no-verbose ${ML_RPM}
wget --no-check-certificate --no-verbose ${ML_RPM}
fi
if [ -z ${env.ML_CONVERTERS}]; then
wget --no-verbose https://bed-artifactory.bedford.progress.com:443/artifactory/ml-rpm-tierpoint/${RPMbranch}/converters/MarkLogicConverters-${RPMversion}${RPMsuffix}.x86_64.rpm
wget --no-check-certificate --no-verbose https://bed-artifactory.bedford.progress.com:443/artifactory/ml-rpm-tierpoint/${RPMbranch}/converters/MarkLogicConverters-${RPMversion}${RPMsuffix}.x86_64.rpm
else
wget --no-verbose ${ML_CONVERTERS}
wget --no-check-certificate --no-verbose ${ML_CONVERTERS}
fi
"""
script {
Expand Down Expand Up @@ -438,7 +438,7 @@ void scapScan() {
pipeline {
agent {
label {
label 'cld-docker'
label 'cld-docker-temp'
}
}
options {
Expand Down Expand Up @@ -471,7 +471,7 @@ pipeline {
parameters {
string(name: 'emailList', defaultValue: emailList, description: 'List of email for build notification', trim: true)
string(name: 'dockerVersion', defaultValue: '2.2.3', description: 'ML Docker version. This version along with ML rpm package version will be the image tag as {ML_Version}_{dockerVersion}', trim: true)
choice(name: 'dockerImageType', choices: 'ubi-rootless\nubi\nubi9-rootless\nubi9', description: 'Platform type for Docker image. Will be made part of the docker image tag')
choice(name: 'dockerImageType', choices: 'ubi-rootless\nubi\nubi9-rootless\nubi9\nubi9-arm', description: 'Platform type for Docker image. Will be made part of the docker image tag')
string(name: 'upgradeDockerImage', defaultValue: '', description: 'Docker image for testing upgrades. Defaults to ubi image if left blank.\n Currently upgrading to ubi-rotless is not supported hence the test is skipped when ubi-rootless image is provided.', trim: true)
choice(name: 'marklogicVersion', choices: '12\n11\n10', description: 'MarkLogic Server Branch. used to pick appropriate rpm')
string(name: 'ML_RPM', defaultValue: '', description: 'URL for RPM to be used for Image creation. \n If left blank nightly ML rpm will be used.\n Please provide Jenkins accessible path e.g. /project/engineering or /project/qa', trim: true)
Expand Down
23 changes: 19 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,22 +1,37 @@
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
dockerTag?=internal
package?=MarkLogic.rpm
repo_dir=marklogic
docker_build_options=--compress --platform linux/amd64
docker_build_options=--compress
build_branch?=local
docker_image_type?=ubi
upgrade_docker_image_type?=ubi
upgrade_image?=${repo_dir}/marklogic-server-${upgrade_docker_image_type}:${dockerTag}
current_image?=${repo_dir}/marklogic-server-${docker_image_type}:${dockerTag}
open_scap_version?=0.1.74

#***************************************************************************
# set docker platform based on the docker image type
#***************************************************************************
ifeq ($(findstring arm,$(docker_image_type)),arm)
docker_build_options += --platform linux/arm64
export DOCKER_PLATFORM=linux/arm64
else
docker_build_options += --platform linux/amd64
export DOCKER_PLATFORM=linux/amd64
endif

#***************************************************************************
# build docker image
#***************************************************************************
build:
# NOTICE file need to be in the build context to be included in the built image
cp NOTICE.txt src/NOTICE.txt

ifeq ($(findstring arm,$(docker_image_type)),arm)
docker run --privileged --rm tonistiigi/binfmt --install arm64
endif

# rootless images use the same dependencies as ubi image so we copy the file
ifeq ($(docker_image_type),ubi9)
cp dockerFiles/marklogic-server-ubi\:base dockerFiles/marklogic-server-ubi9\:base
Expand All @@ -29,7 +44,7 @@ endif

# retrieve and copy open scap hardening script
ifeq ($(findstring rootless,$(docker_image_type)),rootless)
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lo scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lso scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
#UBI9 needs a different version of the remediation script
ifeq ($(findstring ubi9,$(docker_image_type)),ubi9)
unzip -p scap-security-guide-${open_scap_version}.zip scap-security-guide-${open_scap_version}/bash/rhel9-script-cis.sh > src/rhel-script-cis.sh
Expand Down Expand Up @@ -133,7 +148,7 @@ endif
#***************************************************************************
scap-scan:
mkdir -p scap
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lo scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
[ -f scap-security-guide-${open_scap_version}.zip ] || curl -Lso scap-security-guide-${open_scap_version}.zip https://github.com/ComplianceAsCode/content/releases/download/v${open_scap_version}/scap-security-guide-${open_scap_version}.zip
#UBI9 needs a different version of the evaluation profile
ifeq ($(findstring ubi9,$(current_image)),ubi9)
unzip -p scap-security-guide-${open_scap_version}.zip scap-security-guide-${open_scap_version}/ssg-rhel9-ds.xml > scap/ssg-rhel-ds.xml
Expand Down
2 changes: 1 addition & 1 deletion NOTICE.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MarkLogic® Docker Container Image v2

Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.

This project is licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at

Expand Down
28 changes: 28 additions & 0 deletions dockerFiles/marklogic-deps-ubi9-arm:base
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
###############################################################
#
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

FROM registry.access.redhat.com/ubi9/ubi-minimal:9.7-1764794109
LABEL "com.marklogic.maintainer"="docker@marklogic.com"

###############################################################
# install libnsl rpm package
###############################################################

RUN rpm -i https://download.rockylinux.org/pub/rocky/9/BaseOS/aarch64/os/Packages/l/libnsl-2.34-231.el9_7.2.aarch64.rpm

###############################################################
# install networking, base deps and tzdata for timezone
###############################################################
# hadolint ignore=DL3006
RUN echo "NETWORKING=yes" > /etc/sysconfig/network \
&& microdnf -y install --setopt install_weak_deps=0 gdb nss libtool-ltdl cpio tzdata util-linux hostname \
&& microdnf clean all


###############################################################
# Enable FIPS Mode
###############################################################
RUN update-crypto-policies --set FIPS
2 changes: 1 addition & 1 deletion dockerFiles/marklogic-deps-ubi9:base
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
###############################################################
#
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

Expand Down
2 changes: 1 addition & 1 deletion dockerFiles/marklogic-deps-ubi:base
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
###############################################################
#
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

Expand Down
4 changes: 2 additions & 2 deletions dockerFiles/marklogic-server-ubi-rootless:base
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ ENV MARKLOGIC_INSTALL_DIR=/opt/MarkLogic \
MARKLOGIC_DOCKER_VERSION="${ML_DOCKER_VERSION}" \
MARKLOGIC_IMAGE_TYPE="$ML_DOCKER_TYPE" \
MARKLOGIC_BOOTSTRAP_HOST=bootstrap \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_user \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_password_user \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_username \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_admin_password \
MARKLOGIC_WALLET_PASSWORD_FILE=mldb_wallet_password \
BUILD_BRANCH=${BUILD_BRANCH} \
MARKLOGIC_JOIN_TLS_ENABLED=false \
Expand Down
151 changes: 151 additions & 0 deletions dockerFiles/marklogic-server-ubi9-arm:base
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
###############################################################
#
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
#
###############################################################

ARG BASE_IMAGE=marklogic-ubi/marklogic-deps-ubi9-arm:11-internal
FROM ${BASE_IMAGE} AS builder

###############################################################
# set build args
###############################################################

ARG ML_RPM=marklogic.rpm
ARG ML_USER="marklogic_user"
ARG ML_VERSION=11-internal
ARG ML_CONVERTERS=marklogic.converters
####################################################
# inject init, start and clustering scripts
###############################################################

COPY scripts/start-marklogic.sh /usr/local/bin/start-marklogic.sh

###############################################################
# install MarkLogic server, sudo, and remove mlcmd packages
###############################################################
COPY ${ML_RPM} /tmp/marklogic-server.rpm
RUN rpm -i /tmp/marklogic-server.rpm \
&& rm /tmp/marklogic-server.rpm \
&& microdnf -y install --setopt install_weak_deps=0 sudo \
&& microdnf -y clean all \
&& rm -rf ./opt/MarkLogic/mlcmd/lib/* \
&& rm -rf ./opt/MarkLogic/mlcmd/ext/*

###############################################################
# Add TINI to serve as PID 1 process
###############################################################
ENV TINI_VERSION=v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-arm64 /tini
RUN chmod +x /tini

###############################################################
# Copy converters package
###############################################################
WORKDIR /
COPY ${ML_CONVERTERS} converters.rpm
###############################################################
# create system user
###############################################################

RUN adduser --gid users --uid 1000 ${ML_USER} \
&& echo ${ML_USER}" ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

###############################################################
# second stage for flattening layers
###############################################################
FROM ${BASE_IMAGE}

COPY --from=builder / /

ARG ML_USER="marklogic_user"
ARG ML_VERSION=11-internal
ARG ML_DOCKER_VERSION=local
ARG BUILD_BRANCH=local
ARG ML_DOCKER_TYPE=ubi
###############################################################
# define docker labels
###############################################################

LABEL "com.marklogic.maintainer"="docker@marklogic.com"
LABEL "com.marklogic.name"="MarkLogic Server ${ML_VERSION}"
LABEL "com.marklogic.docker-version"="${ML_DOCKER_VERSION}"
LABEL "com.marklogic.release-version"="${ML_VERSION}"
LABEL "com.marklogic.build-branch"="${BUILD_BRANCH}"
LABEL "com.marklogic"="MarkLogic"
LABEL "com.marklogic.release-type"="production"
LABEL "com.marklogic.license"="MarkLogic EULA"
LABEL "com.marklogic.license.description"="By subscribing to this product, you agree to the terms and conditions outlined in MarkLogic's End User License Agreement (EULA) here https://developer.marklogic.com/eula "
LABEL "com.marklogic.license.url"="https://developer.marklogic.com/eula"
LABEL "com.marklogic.description"="MarkLogic is the only Enterprise NoSQL database. It is a new generation database built with a flexible data model to store, manage, and search JSON, XML, RDF, and more - without sacrificing enterprise features such as ACID transactions, certified security, backup, and recovery. With these capabilities, MarkLogic is ideally suited for making heterogeneous data integration simpler and faster, and for delivering dynamic content at massive scale. The current release of the MarkLogic Server Developer Docker image includes all features and is limited to developer use."
LABEL docker.cmd="docker run -it -p 7997-8010:7997-8010 -e MARKLOGIC_INIT=true -e MARKLOGIC_ADMIN_USERNAME=<INSERT USERNAME> -e MARKLOGIC_ADMIN_PASSWORD=<INSERT PASSWORD> --mount src=MarkLogic,dst=/var/opt/MarkLogic progressofficial/marklogic-db:${ML_VERSION}"

###############################################################
# copy notice file
###############################################################
COPY --chown=${ML_USER}:users NOTICE.txt /home/${ML_USER}/NOTICE.txt

###############################################################
# set env vars
###############################################################

ENV MARKLOGIC_INSTALL_DIR=/opt/MarkLogic \
MARKLOGIC_DATA_DIR=/var/opt/MarkLogic \
MARKLOGIC_USER=${ML_USER} \
MARKLOGIC_PID_FILE=/var/run/MarkLogic.pid \
MARKLOGIC_UMASK=022 \
LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH:/opt/MarkLogic/lib \
MARKLOGIC_VERSION="${ML_VERSION}" \
MARKLOGIC_DOCKER_VERSION="${ML_DOCKER_VERSION}" \
MARKLOGIC_IMAGE_TYPE="$ML_DOCKER_TYPE" \
MARKLOGIC_BOOTSTRAP_HOST=bootstrap \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_user \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_password_user \
MARKLOGIC_WALLET_PASSWORD_FILE=mldb_wallet_password \
BUILD_BRANCH=${BUILD_BRANCH} \
MARKLOGIC_JOIN_TLS_ENABLED=false \
OVERWRITE_ML_CONF=true \
MARKLOGIC_EC2_HOST=0

################################################################
# Set Timezone
################################################################

RUN microdnf -y reinstall tzdata

###############################################################
# Remove optional packages that have known vulnerabilities
###############################################################
RUN for package in vim-minimal cups-client cups-libs tar python3-pip-wheel platform-python python3-libs platform-python-setuptools avahi-libs binutils expat libarchive python3 python3-libs python-unversioned-command; \
do rpm -e --nodeps $package || true; \
done;

###############################################################
# expose MarkLogic server ports
###############################################################

EXPOSE 25 7997-8010

###############################################################
# set system user
###############################################################

USER ${ML_USER}

####################################################
# Set Linux Language Settings
###############################################################

ENV LANG=en_US.UTF-8
ENV LC_ALL=C.UTF-8

###############################################################
# define volume for persistent MarkLogic server data
###############################################################

VOLUME /var/opt/MarkLogic

###############################################################
# set entrypoint
###############################################################
ENTRYPOINT ["/tini", "--", "/usr/local/bin/start-marklogic.sh"]
4 changes: 2 additions & 2 deletions dockerFiles/marklogic-server-ubi:base
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ ENV MARKLOGIC_INSTALL_DIR=/opt/MarkLogic \
MARKLOGIC_DOCKER_VERSION="${ML_DOCKER_VERSION}" \
MARKLOGIC_IMAGE_TYPE="$ML_DOCKER_TYPE" \
MARKLOGIC_BOOTSTRAP_HOST=bootstrap \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_user \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_password_user \
MARKLOGIC_ADMIN_USERNAME_FILE=mldb_admin_username \
MARKLOGIC_ADMIN_PASSWORD_FILE=mldb_admin_password \
MARKLOGIC_WALLET_PASSWORD_FILE=mldb_wallet_password \
BUILD_BRANCH=${BUILD_BRANCH} \
MARKLOGIC_JOIN_TLS_ENABLED=false \
Expand Down
4 changes: 3 additions & 1 deletion test/keywords.resource
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright © 2018-2025 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
# Copyright © 2018-2026 Progress Software Corporation and/or its subsidiaries or affiliates. All Rights Reserved.
*** Settings ***
Library Process
Library String
Expand All @@ -8,6 +8,8 @@ Library Collections
Library DateTime

*** Variables ***
${DOCKER_PLATFORM} %{DOCKER_PLATFORM=linux/amd64}
@{DOCKER DEFAULTS} -it -d -p 8000:8000 -p 8001:8001 -p 8002:8002 -p7997:7997 --platform ${DOCKER_PLATFORM}
@{DOCKER DEFAULTS} -it -d -p 8000:8000 -p 8001:8001 -p 8002:8002 -p7997:7997 --platform linux/amd64
${DEFAULT ADMIN USER} test_admin
${DEFAULT ADMIN PASS} test_admin_pass
Expand Down