From ac1191f1c63263e753f1985072c28671d9a6512c Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Tue, 13 Dec 2022 12:53:54 +0100 Subject: [PATCH] - added CI/CD support --- .gitlab-ci.yml | 89 ++++++++++++++++++++++++++++++++++++++++++++ Makefile | 18 ++++----- gitlab-ci/Dockerfile | 26 +++++++++++++ 3 files changed, 124 insertions(+), 9 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100644 gitlab-ci/Dockerfile diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..7a5649f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,89 @@ +# This file is a template, and might need editing before it works on your project. +# To contribute improvements to CI/CD templates, please follow the Development guide at: +# https://docs.gitlab.com/ee/development/cicd/templates.html +# This specific template is located at: +# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml + +# This is a sample GitLab CI/CD configuration file that should run without any modifications. +# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts, +# it uses echo commands to simulate the pipeline execution. +# +# A pipeline is composed of independent jobs that run scripts, grouped into stages. +# Stages run in sequential order, but jobs within stages run in parallel. +# +# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages + +stages: # List of stages for jobs, and their order of execution + - build + - test + - packaging + +variables: + EXLIBRIS_SDK_DIR: "/exlibris" + ROSETTASDK: "${EXLIBRIS_SDK_DIR}/7.3/lib/" + IMAGE_TARGET: "$CI_REGISTRY_IMAGE/bullseye_subapp" + FF_USE_FASTZIP: "true" + # These can be specified per job or per pipeline + ARTIFACT_COMPRESSION_LEVEL: "fast" + CACHE_COMPRESSION_LEVEL: "fast" +# CI_DEBUG_TRACE: "true" + +default: + image: + # use this image for all later stages that happen after the build stage + name: "${IMAGE_TARGET}:latest" + +before_script: # These steps are run before EACH job. + - export ROSETTASDK="${ROSETTASDK}" + +build-env-job: # This job runs in the build stage, which runs first. + stage: build + timeout: 30m + tags: + - "docker" + image: + # Use Kaniko base image to build a Docker image to use as the base image for later jobs. + name: gcr.io/kaniko-project/executor:debug + entrypoint: [""] + # Do not run the before_script tasks here, they wouldn't be included in the Docker image. Instead, provide an empty list of tasks. + before_script: [] + # docu: https://docs.gitlab.com/ee/ci/docker/using_kaniko.html, this is basically copy-pasted from there + script: + - mkdir -p /kaniko/.docker + - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "$CI_REGISTRY_USER" "$CI_REGISTRY_PASSWORD" | base64 | tr -d '\n')\"},\"$(printf "%s" "$CI_DEPENDENCY_PROXY_SERVER" | cut -d':' -f1)\":{\"auth\":\"$(printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json + # In this task, Kaniko executor is called to build the Image based on the Dockerfile provided with "--dockerfile". + - echo "CI_PROJECT_DIR=${CI_PROJECT_DIR}" + - >- + /kaniko/executor + --context "${CI_PROJECT_DIR}" + --dockerfile "${CI_PROJECT_DIR}/gitlab-ci/Dockerfile" + --destination "${IMAGE_TARGET}:latest" + --build-arg "GITDIR=${CI_PROJECT_DIR}" + --cache=true + --cache-repo=${CI_REGISTRY_IMAGE} + --cache-copy-layers=true + --snapshotMode=redo + --use-new-run + --ignore-var-run + +test-job: + stage: test + timeout: 3h + tags: + - "docker" + script: + - ls -lha /exlibris/ + - ROSETTASDK=$ROSETTASDK make -e check_prerequisites + - ROSETTASDK=$ROSETTASDK make -e test + + +packaging-job: + stage: packaging + timeout: 3h + tags: + - "docker" + script: + - ROSETTASDK=$ROSETTASDK make -e + artifacts: + paths: + - SLUBRetroMonographieTIFFFormatValidationPlugin.jar diff --git a/Makefile b/Makefile index 3872367..3c51479 100644 --- a/Makefile +++ b/Makefile @@ -7,26 +7,26 @@ JAVAPATH=/usr/lib/jvm/java-1.17.0-openjdk-*/bin/ JAVARELEASE=17 # Verwendete Rosetta-Version -ROSETTAVERSION=7.3.0 +ROSETTAVERSION:=7.3.0 # Pfad zum Rosetta-SDK ROSETTASDK=/exlibris/dps/d4_1/system.dir/dps-sdk-${ROSETTAVERSION}/lib/ # Pfad zum Rosetta-SDK, Deposit-Module -ROSETTASDKDEPOSIT=${ROSETTASDK}/../dps-sdk-projects/dps-sdk-deposit/lib -ROSETTASDKPLUGINS=${ROSETTASDK}/../../bundled_plugins/ +ROSETTASDKDEPOSIT:=${ROSETTASDK}/../dps-sdk-projects/dps-sdk-deposit/lib +ROSETTASDKPLUGINS:=${ROSETTASDK}/../../bundled_plugins/ # classpath -JUNITCLASSPATH=/usr/share/java/junit4.jar +JUNITCLASSPATH:=/usr/share/java/junit4.jar #SOURCESCLASSPATH=org/slub/rosetta/dps/repository/plugin/storage/nfs -CLASSPATH=${ROSETTASDKDEPOSIT}/dps-sdk-${ROSETTAVERSION}.jar +CLASSPATH:=${ROSETTASDKDEPOSIT}/dps-sdk-${ROSETTAVERSION}.jar #BUILDPATH=$(CLASSPATH) # sources -SOURCES=java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java -OBJS=$(SOURCES:.java=.class) -JAR=SLUBRetroMonographieTIFFFormatValidationPlugin.jar -BUILD=build/ +SOURCES:=java/org/slub/rosetta/dps/repository/plugin/SLUBRetroMonographieTIFFFormatValidationPlugin.java +OBJS:=$(SOURCES:.java=.class) +JAR:=SLUBRetroMonographieTIFFFormatValidationPlugin.jar +BUILD:=build/ all: $(BUILD) $(JAR) diff --git a/gitlab-ci/Dockerfile b/gitlab-ci/Dockerfile new file mode 100644 index 0000000..71b05e8 --- /dev/null +++ b/gitlab-ci/Dockerfile @@ -0,0 +1,26 @@ +FROM git.slub-dresden.de/debian-packaging/dependency_proxy/containers/debian:bullseye-slim + +ARG GITDIR +ENV DEBIAN_FRONTEND=noninteractive +ENV EXLIBRIS_REPO=https://github.com/ExLibrisGroup/Rosetta.dps-sdk-projects.git +ENV EXLIBRIS_REPODIR=Rosetta.dps-sdk-projects +ENV EXLIBRIS_PATH=/exlibris + +RUN apt-get update; \ + apt-get install -y --no-install-recommends gnupg wget; \ + wget -O - http://sdvdebianrepo.slub-dresden.de/deb-repository/pub.gpg.key | apt-key add - ; \ + echo "deb http://sdvdebianrepo.slub-dresden.de/deb-repository bullseye main" > /etc/apt/sources.list.d/slub.list; + +RUN apt-get update; \ + apt-get -y upgrade; \ + apt-get install -y \ + apt-file \ + apt-utils \ + make \ + openjdk-17-jdk \ + junit4 \ + git \ + ; +RUN apt-file update; +RUN git clone https://github.com/ExLibrisGroup/Rosetta.dps-sdk-projects.git +RUN ln -s ${EXLIBRIS_REPODIR} ${EXLIBRIS_PATH} -- GitLab