Erstellen einer Maven-CI-Component
(KOP-3270)
Es soll eine Maven-CI-Component "maven" erstellt werden, die Schritte für das Testen mvn verify, und Veröffentlichen mvn deploy eines oder mehreren Maven-Module enthält.
Die GitLab-Registry soll primäre Quelle für Maven-Artefakte werden, jedoch soll in diesem Schritt weiterhin push/pull vom Nexus unterstützt werden.
Die Komponente soll davon ausgehen, dass das Maven-Repo so konfiguriert ist, dass bereits alle Maven-Artefakte/Spring-Boot-Images gebaut werden. Die Maven-Komponente fügt lediglich Maven-Deploy-Konfiguration hinzu, sodass Maven-Artefakte nach GitLab und Nexus gepusht werden.
Die Komponente soll als Inputs haben:
- Step/Stage-Namen
- job-prefix ("maven"), test-stage ("test"), publish-stage ("publish")
- Deploy-Config
- deploy-stage-enabled (true)
- deploy-to-nexus (true) und deploy-to-gitlab (true) (Mit Hinweis auf geplantes Entfernen dieser Optionen)
Akzeptanzkriterien:
- Die Test stage läuft erfolgreich mit
mvn verify - Die "publish" stage läuft erfolgreich mit
mvn deployund veröffentlicht Maven-Artefakte zu GitLab und Nexus- Für einen branch
- wird mit "publish" ein
x.x.x-branch-SNAPSHOT(und für den default branchx.x.x-SNAPSHOT) Artefakt gepusht - wird für jedes mit
spring-boot-maven-plugingebaute Image ein Branch-Tagx.x.x-branch-shortsha1und ein latest tag gepusht (für default branchsnapshot-latestsonstx.x.x-branch-latest)
- wird mit "publish" ein
- Für ein (Release)-Tag
- wird ein
x.x.xArtefakt gepusht - wird für jedes mit
spring-boot-maven-plugingebaute Image ein Release-tagx.x.xundlatestgepusht
- wird ein
- Für einen branch
- Die Maven-Komponente ist in der Readme für Nutzer verständlich dokumentiert
Hinweise
Notwendige Binaries, Skripte und Konfigurations-Dateien sollten in ein eigenes build-image, sodass keine "download" stage notwendig ist.
Nach Abnahme sollte eine Release-Version der maven-Component getaggt werden, die von anderen OZG-Cloud-Repos genutzt werden kann.
Ein Maven-Projekt, welches ein oder mehrere Docker-Images mit dem spring-boot-maven-plugin pusht, müssen entsprechende maven-properties in den jeweiligen Maven-Modulen setzen:
<ozgcloud.docker.registry>docker.local</ozgcloud.docker.registry>
<ozgcloud.docker.imageTag>build-latest</ozgcloud.docker.imageTag>
<ozgcloud.docker.latestTag>build-latest</ozgcloud.docker.latestTag>
<spring-boot.build-image.imageName>${ozgcloud.docker.registry}/${project.artifactId}:${ozgcloud.docker.imageTag}</spring-boot.build-image.imageName>
<ozgcloud.docker.additionalImageNames>${ozgcloud.docker.registry}/${project.artifactId}:${ozgcloud.docker.latestTag}</ozgcloud.docker.additionalImageNames>
zudem sollte das spring-boot-maven-plugin konfiguriert werden: (dies soll üblicherweise durch die Parent-POM ozgcloud-common-parent geschehen)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<tags>${ozgcloud.docker.additionalImageNames}</tags>
</image>
<docker>
<publishRegistry>
<username>${docker.publishRegistry.username}</username>
<password>${docker.publishRegistry.password}</password>
<url>${docker.publishRegistry.url}</url>
</publishRegistry>
</docker>
</configuration>
...
, sodass die Maven-CI-Komponente Werte korrekt überschreiben kann:
-
ozgcloud.docker.registry,ozgcloud.docker.imageTag,ozgcloud.docker.latestTag,docker.publishRegistry.username,docker.publishRegistry.passwordunddocker.publishRegistry.url.