Release management

Versionnummer

Vi ska i största mån försöka hantera versionnummer enligt nedan:

Givet ett versionnummer MAJOR.MINOR.PATCH[ -RCX | -SNAPSHOT]:

  1. MAJOR version, öka vid inkompatibla ändringar av API eller stora genomgripande förändringar ,
  2. MINOR version, öka vid bakåtkompatibla förändringar
  3. PATCH version, öka vid en patch- ellel  bugfix.
  4. -RCX, används för releasekanditad där X är ett löpnummer. Ex.  Relasekanditat 1=>-RC1.
  5. -SNAPSHOT, används för utvecklingsversioner.

Konfigurering av pom för releasehantering

För att skapa releaser används Maven och Mavens release-plugin. Kontrollera att följande kod finns i rot-pom'en.

pom.xml
build>
  <pluginManagement>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-release-plugin</artifactId>
       <version>2.5.1</version>
       <configuration>
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <localCheckout>true</localCheckout>
       </configuration>
     </plugin>
    </plugins>
  </pluginManagement>
 </build> 


För att Mavens deploy plugin ska veta var den ska deploya releaserna skall följande finnas i projektets root pom (eller i parent till root pom). Url:erna kan man sedan sätta i den lokala (eller Jenkins) Maven settings filen (se kommande exempel)

pom.xml
<distributionManagement>
   <repository>
      <id>release-nexus</id>
      <name>Release Nexus</name>
      <url>${releases-nexus-url}</url>
   </repository>
   <snapshotRepository>
      <id>snapshot-nexus</id>
      <name>Snapshot Nexus</name>
      <url>${snapshot-nexus-url}</url>
   </snapshotRepository>
</distributionManagement>


För att releasepluginen ska kunna pusha till remote git måste url:er till git konfigureras i projektets root pom. Exempel:

pom.xml
<scm>
    <url>http://github.com/skltp/vp</url>
    <connection>scm:git:https://github.com:443/skltp/vp.git</connection>
    <developerConnection>scm:git:https://github.com:443/skltp/vp.git</developerConnection>
    <tag>HEAD</tag>
</scm>


Maven settings fil (~/.m2/settings.xml) bör sedan sättas upp enligt nedan för att peka ut var dependencies skall hämtas (via mirror) och vart den skall deploya filerna (Till Ineras Nexus i exemplet nedan) samt användaruppgifter till Ineras Nexus (i sektionen "servers").

settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <!-- Mirror används för att hämta dependencies via Inera Nexus -->
        <mirror>
            <id>Inera Nexus</id>
            <name>Inera Nexus Public Mirror</name>
            <url>https://nexus.drift.inera.se/repository/maven-public/</url>
            <mirrorOf>*,!grails</mirrorOf>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>skltp</id>
            <properties>
                <!-- Ställer om URL för snapshots och release i distributionManagement i pom.xml, pom.xml måste använda dessa för att det ska fungera -->
                <releases-nexus-url>https://nexus.drift.inera.se/repository/SKLTP-Releases/</releases-nexus-url>
                <snapshot-nexus-url>https://nexus.drift.inera.se/repository/SKLTP-Snapshots/</snapshot-nexus-url>
            </properties>
        </profile>
    </profiles>

    <servers>
        <!-- Release Repot på Inera Nexus, exakt repo pekas ut av profilen -->
        <server>
            <id>release-nexus</id>
            <username>xxxxxxxxx</username>
            <password>pppppppppp</password>
        </server>
        <!-- Snapshot Repot på Inera Nexus, exakt repo pekas ut av profilen -->
        <server>
            <id>snapshot-nexus</id>
            <username>xxxxxxxxx</username>
            <password>pppppppppp</password>
        </server>
    </servers>

    <activeProfiles>
        <activeProfile>skltp</activeProfile>
    </activeProfiles>
</settings>


Artifakterna kommer nu laddas upp på  Ineras Nexus och vara publikt tillgängliga under group-id se.skltp,.