Aller directement à la fin des métadonnées
Aller au début des métadonnées

You are viewing an old version of this content. View the current version.

afficher les différences View Version History

Vous regardez la version actuelle de cette page. (v. 1) afficher la version suivante »

Résumé

Liste des changements à apporter à l’environnement de build pour passer de Gradle 4.5 à Maven 3.8.

Ticket JIRA et commit

Avant de toucher à un module, il faut créer un ticket JIRA avec comme titre :

  • [Nom de l’app] - Migration Maven

Après chaque portage, le message de commit doit être le suivant :

  • "feat: #<NUM_TICKET>, migration Maven"

Portage

pom.xml

Reprendre le squelette ci-desous

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>fr.wseduc</groupId>   <!-- Vient de gradle.properties > modowner -->
  <artifactId>mod-zip</artifactId><!-- Vient de gradle.properties > modname -->
  <version>3.0-b2school-SNAPSHOT</version><!-- Vient de gradle.properties > version -->
  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
    <vertx.version>4.4.5</vertx.version>
    <web-utils.version>2.0.0</web-utils.version>
    <jacksonDatabindVersion>2.15.2</jacksonDatabindVersion>
  </properties>
  <scm><!-- À ajuster en fonction de l'url GitHub/GitLab -->
    <connection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</connection>
    <developerConnection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</developerConnection>
    <url>https://github.com/opendigitaleducation/mod-zip</url>
  </scm>
  <repositories>
    <repository>
      <id>ode</id>
      <name>ODE Repository</name>
      <url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
    </repository>
  </repositories>
  <distributionManagement>
    <snapshotRepository>
      <id>ode-snapshots</id>
      <name>Snapshots</name>
      <url>https://maven.opendigitaleducation.com/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
    <repository>
      <id>ode-releases</id>
      <name>Releases</name>
      <url>https://maven.opendigitaleducation.com/nexus/content/repositories/releases/</url>
    </repository>
  </distributionManagement>

  <dependencies>
    <dependency>
      <groupId>io.vertx</groupId>
      <artifactId>vertx-core</artifactId>
      <version>${vertx.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>fr.wseduc</groupId>
      <artifactId>web-utils</artifactId>
      <version>${web-utils.version}</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jacksonDatabindVersion}</version>
      <scope>provided</scope>
    </dependency>
    <!-- Ajouter les autres dépendances qui étaient dans build.gradle > dependencies -->
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <phase>validate</phase>
            <goals><goal>create</goal></goals>
          </execution>
        </executions>
        <configuration>
          <getRevisionOnlyOnce>true</getRevisionOnlyOnce>
          <shortRevisionLength>8</shortRevisionLength>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.5.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>${project.groupId}~${project.artifactId}~${project.version}-fat</finalName>
              <!--transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>your.main.class.name</mainClass>
                </transformer>
              </transformers-->
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.2</version> <!-- Use the latest version -->
        <configuration>
          <archive>
            <manifestEntries>
              <Build-Time>${maven.build.timestamp}</Build-Time>
              <Main-Verticle>service:mod</Main-Verticle>
              <SCM-Commit-Id>${buildNumber}</SCM-Commit-Id>
              <SCM-Branch>${scmBranch}</SCM-Branch>

            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target/classes</outputDirectory>
              <includeEmptyDirs>true</includeEmptyDirs>
              <resources>
                <resource>
                  <directory>${basedir}/deployment</directory>
                  <filtering>false</filtering>
                </resource>
              </resources>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
      </plugin>
    </plugins>
  </build>
</project>

docker-compose.yml

Remplacer le service gradle par le service maven tel que décrit plus bas.

version: "3"
services:
  maven:
    image: maven:3.8.6-jdk-8
    user: "$DEFAULT_DOCKER_USER"
    working_dir: /usr/src/maven
    volumes:
      - ./:/usr/src/maven
      - ~/.m2:/var/maven/.m2
    environment:
      MAVEN_CONFIG: /var/maven/.m2

build.sh

Ajouter au début du fichier la variable MVN_OPTS tel que décrit ci-dessous.

MVN_OPTS="-Duser.home=/var/maven"

Remplacer les appels au service gradle par des appels au service maven tel que ci-dessous.

Avant:

docker-compose run --rm -u "$USER_UID:$GROUP_GID" gradle gradle clean

Après :

docker-compose run --rm maven mvn $MVN_OPTS clean

Ajouter la méthode init et l’ajouter à la liste des options supportées

init() {
  me=`id -u`:`id -g`
  echo "DEFAULT_DOCKER_USER=$me" > .env
}

...

for param in "$@"
do
  case $param in
    init)
      init
      ;;
...

Modifier la méthode publish pour qu’elle soit équivalente à celle écrite ci-dessous :

publish() {
  version=`docker-compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout`
  level=`echo $version | cut -d'-' -f3`
  case "$level" in
    *SNAPSHOT) export nexusRepository='snapshots' ;;
    *)         export nexusRepository='releases' ;;
  esac

  docker-compose run --rm  maven mvn -DrepositoryId=ode-$nexusRepository -DskiptTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
}

Exemple complet :

#!/bin/bash

MVN_OPTS="-Duser.home=/var/maven"

init() {
  me=`id -u`:`id -g`
  echo "DEFAULT_DOCKER_USER=$me" > .env
}

clean () {
  docker-compose run --rm maven mvn $MVN_OPTS clean
}

install () {
  docker-compose run --rm maven mvn $MVN_OPTS install -DskipTests
}

test () {
  docker-compose run --rm maven mvn $MVN_OPTS test
}

publish() {
  version=`docker-compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout`
  level=`echo $version | cut -d'-' -f3`
  case "$level" in
    *SNAPSHOT) export nexusRepository='snapshots' ;;
    *)         export nexusRepository='releases' ;;
  esac
  docker-compose run --rm  maven mvn -DrepositoryId=ode-$nexusRepository -DskiptTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
}

for param in "$@"
do
  case $param in
    init)
      init
      ;;
    clean)
      clean
      ;;
    install)
      install
      ;;
    test)
      test
      ;;
    publish)
      publish
      ;;
    *)
      echo "Invalid argument : $param"
  esac
  if [ ! $? -eq 0 ]; then
    exit 1
  fi
done

Jenkinsfile

Au tout premier du build.sh, ajouter le paramètre init afin d’initialiser le fichier .env

Avant :

#!/usr/bin/env groovy

pipeline {
  agent any
    stages {
      stage('Build') {
        steps {
          checkout scm
          sh './build.sh clean install publish'
        }
      }
    }
}

Après :

#!/usr/bin/env groovy

pipeline {
  agent any
    stages {
      stage('Build') {
        steps {
          checkout scm
          sh './build.sh init clean install publish'
        }
      }
    }
}

.gitignore

Ajouter les lignes suivantes

.env
target

  • Aucune étiquette

0 commentaires

Vous n'êtes pas connecté. Toutes vos modifications seront marquées comme réalisées par anonyme. Vous pouvez vous connecter si vous disposez déjà d'un compte.