From a857a8a29262c3ff7a02f32ccc7b8101a16c26ac Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Tue, 3 Dec 2024 16:00:48 +0100
Subject: [PATCH] KOP-2720 Code SH Pipeline
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Pipeline pusht docker Images mit den Image-Tags `main-<version>` und `snapshot-latest` für neue Commits auf main und den Image-Tags `release-<tag-version>` und `latest` für Git-Tags.

Docker Images werden nur auf Nexus gepusht, entsprechende Steps für die code.SH Container Registry sind vorbereitet aber deaktiviert.

Reviewed-on: https://git.ozg-sh.de/ozgcloud-lib/xta-test-server/pulls/16
Co-authored-by: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Co-committed-by: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
---
 .gitignore          |   2 +-
 .gitlab-ci.yml      | 128 ++++++++++-------
 .m2/ci_settings.xml |  56 ++++++++
 .m2/settings.xml    |  61 --------
 pom.xml             | 333 +++++++++-----------------------------------
 5 files changed, 197 insertions(+), 383 deletions(-)
 create mode 100644 .m2/ci_settings.xml
 delete mode 100644 .m2/settings.xml

diff --git a/.gitignore b/.gitignore
index db34913..523b621 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@ HELP.md
 !**/src/test/**/target/
 doc/**/*.pdf
 .m2/
-!.m2/settings.xml
+!.m2/ci_settings.xml
 .mvn/
 
 ### STS ###
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 595ecc9..8ad2bef 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,24 +1,16 @@
-image: dimage-base-release.repo-ex.zcdi.dataport.de/sdks/maven:3.9.2-java-21
+image: maven:3.9.9-eclipse-temurin-21-alpine
 
 variables:
   MAVEN_DEPLOY_CLI_OPTS: "--no-transfer-progress -DskipTests"
   MAVEN_CLI_OPTS: >-
-    -s .m2/settings.xml --batch-mode
-    -Dmaven.repo.local=.m2/repository
+    -s .m2/ci_settings.xml --batch-mode
     -Dmaven.plugin.validation=brief
-  HTTP_PROXY_HOST: $DATAPORT_PROXY
-  HTTP_PROXY_PORT: 3128
-  HTTP_PROXY: $DATAPORT_PROXY:$HTTP_PROXY_PORT
-  HTTPS_PROXY: $HTTP_PROXY
-  http_proxy: $HTTP_PROXY
-  https_proxy: $HTTP_PROXY
   DOCKER_HOST: tcp://docker:2375
   DOCKER_TLS_CERTDIR: ""
   DOCKER_DRIVER: overlay2
 
 services:
-  - name: kopsh-docker-dockerhub.repo-ex.zcdi.dataport.de/docker:dind
-    alias: docker
+  - docker:24.0.5-dind
 
 cache:
   paths:
@@ -27,61 +19,93 @@ cache:
 
 stages:
   - build
-  - deploy
-  - image
+  - test
+  - publish
 
-test:
+build:
   stage: build
   script:
-    - echo "mvn test $MAVEN_CLI_OPTS"
-    - mvn help:effective-settings $MAVEN_CLI_OPTS
-    - mvn test $MAVEN_CLI_OPTS
+    - mvn clean compile $MAVEN_CLI_OPTS
   artifacts:
     paths:
       - target/*.jar
 
-deploy_to_artifactory:
-  stage: deploy
-  when: manual
+test:
+  stage: test
   script:
-    - echo "mvn deploy -P artifactory-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS"
-    - mvn deploy -P artifactory-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
-  only:
-    - main
+    - mvn test $MAVEN_CLI_OPTS
+
+verify:
+  stage: test
+  script:
+    - mvn verify $MAVEN_CLI_OPTS
+
+.get-version:
+  before_script:
+    - export PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export PROJECT_ARTIFACTID=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout $MAVEN_CLI_OPTS)
+    - export NEXUS_IMAGE_PREFIX="docker.ozg-sh.de/${PROJECT_ARTIFACTID}"
 
-deploy_to_nexus:
-  stage: deploy
+# Merge request jobs
+push-merge-request-image-gitlab:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+      when: never  # Step disabled until gitlab container registry works
+
+push-merge-request-image-nexus:
+  stage: publish
+  extends: .get-version
+  script:
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:MR-${CI_MERGE_REQUEST_IID}-${PROJECT_VERSION}"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
   when: manual
+
+# Snapshot jobs
+push-snapshot-image-gitlab:
+  stage: publish
+  extends: .get-version
   script:
-    - echo "mvn deploy -P nexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS"
-    - mvn deploy -P nexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
-  only:
-    - main
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:main-${PROJECT_VERSION},${CI_REGISTRY_IMAGE}:snapshot-latest"
+    - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  # only:
+  #   - main
+  rules:
+    - when: never  # Step disabled until gitlab container registry works
 
-push_docker_image_to_nexus:
-  stage: image
+push-snapshot-image-nexus:
+  stage: publish
+  extends: .get-version
   script:
-    - echo "Push docker image to nexus ($Nexus_REPO_USER)"
-    - |
-      mvn install spring-boot:build-image \
-        $MAVEN_CLI_OPTS $MAVEN_DEPLOY_CLI_OPTS \
-        -DdockerRegistryHost=docker.ozg-sh.de \
-        -DdockerRegistryUsername=$Nexus_REPO_USER \
-        -DdockerRegistryPassword=$Nexus_REPO_PASS \
-        -Dspring-boot.build-image.publish=true
+    - export IMAGE_TAGS="${NEXUS_IMAGE_PREFIX}:main-${PROJECT_VERSION},${NEXUS_IMAGE_PREFIX}:snapshot-latest"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
   only:
     - main
 
-push_docker_image_to_artifactory:
-  stage: image
+# Release jobs
+push-release-image-gitlab:
+  stage: publish
+  extends: .get-version
   script:
-    - echo "Push docker image to artifactory ($Artifactory_REPO_USER)"
-    - |
-      mvn install spring-boot:build-image \
-        $MAVEN_CLI_OPTS $MAVEN_DEPLOY_CLI_OPTS \
-        -DdockerRegistryHost=kopsh-docker.repo-ex.zcdi.dataport.de \
-        -DdockerRegistryUsername=$Artifactory_REPO_USER \
-        -DdockerRegistryPassword=$Artifactory_REPO_PASS \
-        -Dspring-boot.build-image.publish=true
-  only:
-    - main
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:release-${PROJECT_VERSION},${CI_REGISTRY_IMAGE}:latest"
+    - mvn deploy -Pgitlab-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_COMMIT_TAG
+      when: never  # Step disabled until gitlab container registry works
+
+push-release-image-nexus:
+  stage: publish
+  extends: .get-version
+  script:
+    - mvn versions:set -DnewVersion=${CI_COMMIT_TAG}
+    - export IMAGE_TAGS="${CI_REGISTRY_IMAGE}:release-${CI_COMMIT_TAG},${CI_REGISTRY_IMAGE}:latest"
+    - mvn deploy -Pnexus-deploy $MAVEN_DEPLOY_CLI_OPTS $MAVEN_CLI_OPTS
+  rules:
+    - if: $CI_COMMIT_TAG
diff --git a/.m2/ci_settings.xml b/.m2/ci_settings.xml
new file mode 100644
index 0000000..53e7911
--- /dev/null
+++ b/.m2/ci_settings.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"
+		  xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<localRepository>.m2/repository</localRepository>
+
+	<servers>
+		<server>
+			<id>ozg-nexus</id>
+			<username>${env.NEXUS_USER}</username>
+			<password>${env.NEXUS_PASSWORD}</password>
+		</server>
+		<server>
+			<id>ozg-snapshots-nexus</id>
+			<username>${env.NEXUS_USER}</username>
+			<password>${env.NEXUS_PASSWORD}</password>
+		</server>
+		<server>
+			<id>codesh-gitlab-maven</id>
+			<configuration>
+				<httpHeaders>
+					<property>
+						<name>Job-Token</name>
+						<value>${CI_JOB_TOKEN}</value>
+					</property>
+				</httpHeaders>
+			</configuration>
+		</server>
+	</servers>
+	<profiles>
+		<profile>
+			<id>ci-default</id>
+			<activation>
+				<activeByDefault>true</activeByDefault>
+			</activation>
+			<repositories>
+				<repository>
+					<id>codesh-gitlab-maven</id>
+					<url>${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/maven</url>
+				</repository>
+				<repository>
+					<id>ozg-nexus</id>
+					<name>ozg-releases</name>
+					<url>https://nexus.ozg-sh.de/repository/ozg-releases/</url>
+				</repository>
+				<repository>
+					<id>ozg-snapshots-nexus</id>
+					<name>ozg-snapshots</name>
+					<url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url>
+					<snapshots>
+						<enabled>true</enabled>
+					</snapshots>
+				</repository>
+			</repositories>
+		</profile>
+	</profiles>
+</settings>
\ No newline at end of file
diff --git a/.m2/settings.xml b/.m2/settings.xml
deleted file mode 100644
index f080d57..0000000
--- a/.m2/settings.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"
-		  xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<localRepository>.m2/repository</localRepository>
-
-	<servers>
-		<server>
-			<id>artifactory</id>
-			<username>${env.Artifactory_REPO_USER}</username>
-			<password>${env.Artifactory_REPO_PASS}</password>
-		</server>
-		<server>
-			<id>artifactory-snapshots</id>
-			<username>${env.Artifactory_REPO_USER}</username>
-			<password>${env.Artifactory_REPO_PASS}</password>
-		</server>
-		<server>
-			<id>ozg-nexus</id>
-			<username>${env.Nexus_REPO_USER}</username>
-			<password>${env.Nexus_REPO_PASS}</password>
-		</server>
-		<server>
-			<id>ozg-snapshots-nexus</id>
-			<username>${env.Nexus_REPO_USER}</username>
-			<password>${env.Nexus_REPO_PASS}</password>
-		</server>
-	</servers>
-	<profiles>
-		<profile>
-			<id>local-build</id>
-			<repositories>
-				<repository>
-					<id>artifactory</id>
-					<name>artifactory</name>
-					<url>https://repo-ex.zcdi.dataport.de:443/artifactory/kopsh-maven-virt/</url>
-				</repository>
-				<repository>
-					<id>artifactory-snapshots</id>
-					<name>artifactory-snapshots</name>
-					<url>https://repo-ex.zcdi.dataport.de:443/artifactory/kopsh-maven-virt/</url>
-					<snapshots>
-						<enabled>true</enabled>
-					</snapshots>
-				</repository>
-			</repositories>
-		</profile>
-	</profiles>
-	<activeProfiles>
-		<activeProfile>local-build</activeProfile>
-	</activeProfiles>
-	<proxies>
-		<proxy>
-			<id>dataport-proxy</id>
-			<active>true</active>
-			<protocol>http</protocol>
-			<host>${env.DATAPORT_PROXY}</host>
-			<port>3128</port>
-			<nonProxyHosts>localhost|127.0.0.1|*.dataport.de</nonProxyHosts>
-		</proxy>
-	</proxies>
-</settings>
diff --git a/pom.xml b/pom.xml
index a0e0ce4..1d99389 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,9 +4,9 @@
 		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>3.3.4</version>
+		<groupId>de.ozgcloud.common</groupId>
+		<artifactId>ozgcloud-common-parent</artifactId>
+		<version>4.6.0</version>
 	</parent>
 
 	<groupId>de.ozgcloud.xta</groupId>
@@ -17,18 +17,16 @@
 	<description>A XTA Server for testing a client implementation.</description>
 
 	<properties>
-		<java.version>21</java.version>
 		<maven.compiler.source>${java.version}</maven.compiler.source>
 		<maven.compiler.target>${java.version}</maven.compiler.target>
 
 		<!-- build versions -->
-		<jacoco.version>0.8.12</jacoco.version>
-		<log4j2.version>2.20.0</log4j2.version>
+		<log4j2.version>2.23.1</log4j2.version>
 		<cxf.version>4.0.5</cxf.version>
-		<cxf-xjc.version>4.0.0</cxf-xjc.version>
-		<lombok.version>1.18.34</lombok.version>
-		<springdoc.version>2.1.0</springdoc.version>
-		<org.mapstruct.version>1.6.0</org.mapstruct.version>
+		<cxf-xjc.version>4.0.2</cxf-xjc.version>
+		<springdoc.version>2.6.0</springdoc.version>
+
+		<wsdl.version>2.1.1</wsdl.version>
 
 		<!-- Build settings -->
 		<timestamp>${maven.build.timestamp}</timestamp>
@@ -44,13 +42,6 @@
 		<asciidoctorj.diagram.version>2.3.1</asciidoctorj.diagram.version>
 		<asciidoctorj.pdf.version>2.3.18</asciidoctorj.pdf.version>
 		<jruby.version>9.4.8.0</jruby.version>
-		<wsdl.version>2.1.1</wsdl.version>
-
-		<!-- Docker image -->
-		<dockerHost>http://docker:2375</dockerHost>
-		<dockerRegistryUsername>?</dockerRegistryUsername>
-		<dockerRegistryPassword>?</dockerRegistryPassword>
-		<dockerRegistryHost>docker.ozg-sh.de</dockerRegistryHost>
 	</properties>
 
 	<dependencyManagement>
@@ -63,12 +54,12 @@
 			<dependency>
 				<groupId>org.bouncycastle</groupId>
 				<artifactId>bcprov-jdk18on</artifactId>
-				<version>1.78.1</version>
+				<version>1.79</version>
 			</dependency>
 			<dependency>
 				<groupId>com.fasterxml.jackson</groupId>
 				<artifactId>jackson-bom</artifactId>
-				<version>2.18.0</version>
+				<version>2.18.1</version>
 				<type>pom</type>
 				<scope>import</scope>
 			</dependency>
@@ -113,6 +104,14 @@
 			<artifactId>spring-security-config</artifactId>
 		</dependency>
 
+		<!-- Mapstruct -->
+		<dependency>
+			<groupId>org.mapstruct</groupId>
+			<artifactId>mapstruct</artifactId>
+			<version>${mapstruct.version}</version>
+		</dependency>
+
+		<!-- Jackson Fasterxml -->
 		<dependency>
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-core</artifactId>
@@ -129,41 +128,6 @@
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-databind</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>commons-codec</groupId>
-			<artifactId>commons-codec</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.16.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.mapstruct</groupId>
-			<artifactId>mapstruct</artifactId>
-			<version>${org.mapstruct.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-thymeleaf</artifactId>
-			<exclusions>
-
-				<exclusion>
-					<groupId>org.springframework.boot</groupId>
-					<artifactId>spring-boot-starter-logging</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>nz.net.ultraq.thymeleaf</groupId>
-			<artifactId>thymeleaf-layout-dialect</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<optional>true</optional>
-		</dependency>
 
 		<!-- spring boot log4j2 -->
 		<dependency>
@@ -191,7 +155,7 @@
 			<artifactId>log4j-jcl</artifactId>
 			<version>${log4j2.version}</version>
 		</dependency>
-		<!-- Jul is used in all embedded tomcats. All that apps should be runned
+		<!-- Jul is used in all embedded tomcats. All that apps should be run
 		with parameter -->
 		<!-- -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -->
 		<dependency>
@@ -276,52 +240,10 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
-		<dependency>
-			<groupId>org.mockito</groupId>
-			<artifactId>mockito-core</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.mockito</groupId>
-			<artifactId>mockito-junit-jupiter</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-engine</artifactId>
-			<scope>test</scope>
-		</dependency>
 	</dependencies>
 
 	<build>
 		<finalName>${project.artifactId}-${project.version}</finalName>
-		<defaultGoal>process-resources</defaultGoal>
-		<resources>
-			<resource>
-				<directory>src/main/resources</directory>
-				<filtering>true</filtering>
-				<includes>
-					<include>application*.yml</include>
-					<include>banner.txt</include>
-					<include>WEB-INF</include>
-				</includes>
-			</resource>
-			<resource>
-				<directory>src/main/resources</directory>
-				<filtering>false</filtering>
-				<excludes>
-					<exclude>application*.yml</exclude>
-					<exclude>banner.txt</exclude>
-					<exclude>wsdl</exclude>
-				</excludes>
-			</resource>
-		</resources>
-		<testResources>
-			<testResource>
-				<directory>src/test/resources</directory>
-				<filtering>false</filtering>
-			</testResource>
-		</testResources>
 		<plugins>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
@@ -470,10 +392,6 @@
 					</execution>
 				</executions>
 			</plugin>
-			<plugin>
-				<groupId>com.amashchenko.maven.plugin</groupId>
-				<artifactId>gitflow-maven-plugin</artifactId>
-			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-resources-plugin</artifactId>
@@ -485,110 +403,34 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 				<configuration>
-					<classifier>exec</classifier>
-					<excludes>
-						<exclude>
-							<groupId>org.projectlombok</groupId>
-							<artifactId>lombok</artifactId>
-						</exclude>
-					</excludes>
-					<addResources>true</addResources>
-					<layers>
-						<enabled>true</enabled>
-					</layers>
 					<additionalProperties>
 						<wsdl.version>${wsdl.version}</wsdl.version>
 					</additionalProperties>
-					<image>
-						<name>${dockerRegistryHost}/${project.artifactId}:${project.version}</name>
-						<env>
-							<HTTP_PROXY>${env.HTTP_PROXY}</HTTP_PROXY>
-							<HTTPS_PROXY>${env.HTTP_PROXY}</HTTPS_PROXY>
-							<BP_JVM_VERSION>${java.version}</BP_JVM_VERSION>
-						</env>
-					</image>
-					<docker>
-						<publishRegistry>
-							<url>${dockerRegistryHost}</url>
-							<username>${dockerRegistryUsername}</username>
-							<password>${dockerRegistryPassword}</password>
-						</publishRegistry>
-					</docker>
 				</configuration>
 				<executions>
 					<execution>
-						<id>repackage</id>
-						<configuration>
-							<classifier>exec</classifier>
-						</configuration>
+						<phase>install</phase>
 						<goals>
 							<goal>build-image-no-fork</goal>
-							<goal>build-info</goal>
 						</goals>
 					</execution>
 				</executions>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<configuration>
-					<release>${java.version}</release>
-					<annotationProcessorPaths>
-						<path>
-							<groupId>org.projectlombok</groupId>
-							<artifactId>lombok</artifactId>
-							<version>${lombok.version}</version>
-						</path>
-						<path>
-							<groupId>org.mapstruct</groupId>
-							<artifactId>mapstruct-processor</artifactId>
-							<version>${org.mapstruct.version}</version>
-						</path>
-					</annotationProcessorPaths>
-					<compilerArgs>
-						<compilerArg>
-							-Amapstruct.defaultComponentModel=spring
-						</compilerArg>
-						<compilerArg>
-							-Amapstruct.unmappedTargetPolicy=WARN
-						</compilerArg>
-						<!--Sorgt dafür, dass Parameternamen erhalten bleiben -->
-						<compilerArg>
-							-parameters
-						</compilerArg>
-					</compilerArgs>
-
-					<encoding>${project.build.sourceEncoding}</encoding>
-					<generatedSourcesDirectory>${basedir}/generated/main/java</generatedSourcesDirectory>
-					<generatedTestSourcesDirectory>
-						${basedir}/generated/test/java
-					</generatedTestSourcesDirectory>
-				</configuration>
+				<artifactId>maven-failsafe-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-eclipse-plugin</artifactId>
-				<version>2.10</version>
-				<configuration>
-					<downloadSources>true</downloadSources>
-					<downloadJavadocs>false</downloadJavadocs>
-				</configuration>
+				<artifactId>maven-surefire-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<configuration>
-					<includes>
-						<include>**/*Test.java</include>
-						<include>**/*ITCase.java</include>
-					</includes>
-				</configuration>
+				<artifactId>maven-compiler-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.jacoco</groupId>
 				<artifactId>jacoco-maven-plugin</artifactId>
-				<!-- version is defined in parent pom -->
-				<version>${jacoco.version}</version>
 			</plugin>
 			<plugin>
 				<groupId>org.cyclonedx</groupId>
@@ -604,47 +446,6 @@
 				</executions>
 			</plugin>
 		</plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. -->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>org.asciidoctor</groupId>
-										<artifactId>asciidoctor-maven-plugin</artifactId>
-										<versionRange>[2.2.1,)</versionRange>
-										<goals>
-											<goal>process-asciidoc</goal>
-										</goals>
-									</pluginExecutionFilter>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.apache.maven.plugins</groupId>
-					<artifactId>maven-jar-plugin</artifactId>
-					<version>3.4.1</version>
-					<configuration>
-						<archive>
-							<addMavenDescriptor>false</addMavenDescriptor>
-						</archive>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>com.amashchenko.maven.plugin</groupId>
-					<artifactId>gitflow-maven-plugin</artifactId>
-					<version>1.18.0</version>
-				</plugin>
-			</plugins>
-		</pluginManagement>
 	</build>
 
 	<profiles>
@@ -857,68 +658,62 @@
 			</build>
 		</profile>
 
+		<!-- Deployment Profiles -->
 		<profile>
-			<id>owasp</id>
+			<id>gitlab-deploy</id>
+			<activation>
+				<activeByDefault>false</activeByDefault>
+			</activation>
 			<build>
 				<plugins>
 					<plugin>
-						<groupId>org.owasp</groupId>
-						<artifactId>dependency-check-maven</artifactId>
-						<version>8.3.1</version>
+						<groupId>org.springframework.boot</groupId>
+						<artifactId>spring-boot-maven-plugin</artifactId>
 						<configuration>
-							<failBuildOnCVSS>8.0</failBuildOnCVSS>
-							<junitFailOnCVSS>8.0</junitFailOnCVSS>
-							<formats>JUNIT,HTML,JSON</formats>
-							<scanPlugins>false</scanPlugins>
+							<image>
+								<name>${CI_REGISTRY_IMAGE}/${project.artifactId}</name>
+								<tags>${IMAGE_TAGS}</tags>
+								<publish>true</publish>
+							</image>
+							<docker>
+								<publishRegistry>
+									<url>code.schleswig-holstein.de</url>
+									<username>${CI_REGISTRY_USER}</username>
+									<password>${CI_REGISTRY_PASSWORD}</password>
+								</publishRegistry>
+							</docker>
 						</configuration>
-						<executions>
-							<execution>
-								<goals>
-									<goal>check</goal>
-								</goals>
-							</execution>
-						</executions>
 					</plugin>
 				</plugins>
 			</build>
 		</profile>
-
-		<!-- Deployment Profiles -->
-		<profile>
-			<id>artifactory-deploy</id>
-			<activation>
-				<activeByDefault>false</activeByDefault>
-			</activation>
-			<distributionManagement>
-				<repository>
-					<id>artifactory</id>
-					<name>artifactory</name>
-					<url>https://repo-ex.zcdi.dataport.de:443/artifactory/kopsh-maven-virt/</url>
-				</repository>
-				<snapshotRepository>
-					<id>artifactory-snapshots</id>
-					<name>artifactory-snapshots</name>
-					<url>https://repo-ex.zcdi.dataport.de:443/artifactory/kopsh-maven-virt/</url>
-				</snapshotRepository>
-			</distributionManagement>
-		</profile>
 		<profile>
 			<id>nexus-deploy</id>
 			<activation>
 				<activeByDefault>false</activeByDefault>
 			</activation>
-			<distributionManagement>
-				<repository>
-					<id>ozg-nexus</id>
-					<name>ozg-releases</name>
-					<url>https://nexus.ozg-sh.de/repository/ozg-releases/</url>
-				</repository>
-				<snapshotRepository>
-					<id>ozg-snapshots-nexus</id>
-					<name>ozg-snapshots</name>
-					<url>https://nexus.ozg-sh.de/repository/ozg-snapshots/</url>
-				</snapshotRepository>
-			</distributionManagement>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.springframework.boot</groupId>
+						<artifactId>spring-boot-maven-plugin</artifactId>
+						<configuration>
+							<image>
+								<name>docker.ozg-sh.de/${project.artifactId}</name>
+								<tags>${IMAGE_TAGS}</tags>
+								<publish>true</publish>
+							</image>
+							<docker>
+								<publishRegistry>
+									<url>docker.ozg-sh.de</url>
+									<username>${NEXUS_USER}</username>
+									<password>${NEXUS_PASSWORD}</password>
+								</publishRegistry>
+							</docker>
+						</configuration>
+					</plugin>
+				</plugins>
+			</build>
 		</profile>
 	</profiles>
 </project>
-- 
GitLab