Maven ist das primäre Build-Tool. Es sollte möglich sein, ein Artefakt nur mit Maven vollständig zu bauen.
Maven hat einen definierten Build Lifecycle mit mehreren Phasen, siehe
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html. Man könnte nun im Jenkinsfile mit Stages
wie “Build”, “Test”, “Deploy” diese Lifecycle zum Teil nachbauen. Dabei ist aber zu berücksichtigen, dass bei maven Aufrufen
wie zum Beispiel mvn test
der Maven Lifecycle bis zur angegebenen Phase durchgeführt wird und nicht nur die angegebene.
(siehe z.B. https://stackoverflow.com/questions/55183989/maven-lifecycle-within-jenkins-pipeline-how-to-best-separate-responsibilities).
Installierte Plugins
( * Pipeline Maven Plugin: https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin )
<settings>
<servers>
<!-- Ersetzt durch Credential Konfiguration-->
<server>
<id>nexus-snapshots</id>
<username>to be replaced</username>
<password>to be replaced</password>
</server>
<server>
<id>nexus-releases</id>
<username>to be replaced</username>
<password>to be replaced</password>
</server>
</servers>
<!-- -->
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Maven Repository</name>
<url>http://192.168.56.101:8081/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<id>inject-application-properties</id>
<properties>
<!-- see https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven -->
<sonar.host.url>http://192.168.56.101:9000</sonar.host.url>
<!-- URLs fur Distributionmanagement-->
<altSnapshotDeploymentRepository>nexus-snapshots::http://192.168.56.101:8081/repository/maven-snapshots</altSnapshotDeploymentRepository>
<altReleaseDeploymentRepository>nexus-releases::http://192.168.56.101:8081/repository/maven-releases</altReleaseDeploymentRepository>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>inject-application-properties</activeProfile>
</activeProfiles>
</settings>
Eine ähnliche settings.xml
Datei wird vom Entwickler benutzt. Diese wird üblicherweise in <user_home>/.m2
abgelegt.
Die Konfiguration von Server Credentials wird in https://wiki.jenkins.io/display/JENKINS/Config+File+Provider+Plugin#ConfigFileProviderPlugin-MavenServerCredentials(since2.7)
beschrieben. Wie übernehmen die Credentials für Repository Server nexus-releases
und nexus-snapshots
.
settings.xml
via der Property sonar.host.url
konfiguriert<sonar.host.url>http://192.168.56.101:9000</sonar.host.url>
Sonar Analysis sollte während der verify-Phase von Maven laufen. Dazu ergänzt man in pom.xml
:
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sonar</goal>
</goals>
</execution>
</executions>
</plugin>
Nur Artefakte, die mittels eines Jenkins Buildes erzeugt wurden, sollten in Artefakt Repository abgelegt werden.
Maven deploy benötigt konfigurierte distributionManagement
elemente im pom.xml
(https://maven.apache.org/pom.html#Distribution_Management)
oder alternative Repository Konfigurationsproperties (https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html).
Da nur Jenkins in die Artefakt Repositores deployen kann, werden die alternativen Repository Properties in settings.xml
des Config
File Provider definiert (siehe oben):
<altSnapshotDeploymentRepository>nexus-snapshots::http://192.168.56.101:8081/repository/maven-snapshots</altSnapshotDeploymentRepository>
<altReleaseDeploymentRepository>nexus-releases::http://192.168.56.101:8081/repository/maven-releases</altReleaseDeploymentRepository>
Das Maven deploy Plugin muss mindestens die Version 2.8 haben. Dazu wird im pluginManagement
des pom.xml
ein entsprechender
Eintrag ergänzt:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>