Cet article décrira comment configurer l'automatisation HotFix dans les projets Maven à l'aide de Teamcity.
Pour faire HotFix, de nombreuses actions manuelles sont généralement effectuées:
- Créez un brunch pour la version sur laquelle vous souhaitez utiliser HotFix
- Correction d'un bug de libération
- Changer la version du correctif dans le brunch de la version
- Déployer la version de correction de bug
Les articles 1, 3, 4 peuvent être automatisés.
Avant de passer au sujet, je voudrais aborder un sujet important et complexe - le logiciel de versioning . Brièvement sur Semver peut être compris dans cette capture d'écran. 
Vous pouvez en savoir plus sur le lien: 1 .
Tous les paramètres décrits dans cet article sont basés sur Semver et Trunk-Based Development .
Dans le développement basé sur le tronc, pour chaque version, vous devez créer votre propre brunch. Toutes les modifications (correctif) de cette version sont validées pour ce brunch.
Dans le cadre de ce post, nous automatisons les choses suivantes:
Assemblage CI
Créer une nouvelle version
Créer un brunch pour la sortie
Changer la version du correctif

Prérequis:
Créons le projet "Automation Maven Hotfix" dans Teamcity et créons-y 4 tâches.
Construction CI (construction CI)
Créer une branche pour publication
Maven increment bugfix (Changer la version du correctif)
Version Maven (Création d'une nouvelle version)
Capture d'écran du projet:

Paramètres généraux
Dans toutes les tâches, il est nécessaire de cocher la case " Nettoyer la build: supprimer tous les fichiers du répertoire de checkout avant la build ", car lorsque ce daw manquait, j'ai eu des erreurs.
Créez un seul VCS. Caractéristiques VCS cerclées de rouge.

VCS utilise généralement le schéma HTTPS. Dans la spécification de branche: il est indiqué de regarder tous les brunchs et tous les tags:
+:refs/heads/* +:refs/tags/*
Il est nécessaire de créer 4 paramètres de configuration.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Le champ de valeur dans BRANCH_FOR_INCREMENT et TAG_FROM_VERSION doit être laissé vide.

Vous devez télécharger / ajouter une clé privée. Toutes les tâches à l'exception de CI Build nécessitent une clé privée.

Dans chaque tâche à l'exception de CI Build, dans la section Build Features, vous devez connecter une clé privée.
Exemple pour la version Maven

Construction CI **.
Dans la tâche CI Build , un test de nettoyage mvn en une seule étape

Sortie de Maven
La version Maven comporte 2 étapes. La première étape consiste à vérifier que le brunch est maître . Si le brunch n'est pas maître , la tâche tombe.
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" != "master" ]]; then echo 'Branch is not master'; echo 'Aborting'; exit 1; fi

La deuxième étape est la version mvn standard : préparez-vous avec l'option --batch-mode

Créer une branche pour publication
Pour créer un correctif pour la libération, vous devez créer un brunch. Cela se fait par Créer une branche pour la tâche de publication . Elle a 2 étapes.
La première étape vérifie que le brunch n'est pas maître et la seconde vérifie que la version du fichier pom.xml ne contient pas le mot SNAPSHOT
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" == "master" ]]; then echo 'Branch is master'; echo 'Aborting'; exit 1; fi echo "Get version package from pom.xml" version=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"` echo "Check SNAPSHOT" if [[ $version == "*SNAPSHOT*" ]]; then echo "******************* WARNING *************************" echo "************ You are create branch for SNAPSHOTS ******************" echo "***********************************************************" exit 1 fi

La deuxième étape change le schéma de connectivité de developerConnection de HTTPS à GIT.

Maven increment bugfix
La tâche se compose de 6 parties. Il pourrait être refactorisé, mais cela fonctionne comme ça.
La première étape consiste à vérifier que le brunch n'est pas maître . Si la tâche principale du brunch tombe.
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" == "master" ]]; then echo 'Branch is master'; echo 'Aborting'; exit 1; fi

La deuxième étape Maven consiste à modifier la version du correctif dans le fichier pom.xml.
Objectifs: maven a tout en une seule ligne
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit

La troisième étape consiste à afficher les informations d'état Git et autres:
echo 'cat pom.xml' cat pom.xml echo 'git status' git status echo 'git remote -v' git remote -v echo 'git branch' git branch

La quatrième étape change le schéma de connectivité de developerConnection de HTTPS à GIT.
Et envoie les modifications à la branche spécifiée dans la variable Teamcity% BRANCH_FOR_INCREMENT%

La cinquième étape obtient la version du fichier pom.xml et définit la variable TAG_FROM_VERSION sur Teamcity . Notez que la version du fichier pom.xml sans la lettre v est devant. Et le tag, basé sur cette version déjà avec la lettre v au début.
echo "Get version package from pom.xml" VERSION_AFTER_CHANGE=`python -c "import xml.etree.ElementTree as ET; print(ET.parse(open('pom.xml')).getroot().find('{http://maven.apache.org/POM/4.0.0}version').text)"` echo $VERSION_AFTER_CHANGE echo "##teamcity[setParameter name='TAG_FROM_VERSION' value='v$VERSION_AFTER_CHANGE']"

La sixième étape consiste à baliser la version du correctif . Cela se fait en utilisant Maven avec l'option souhaitée dans Goal .
Option de buts :
-Dtag=%TAG_FROM_VERSION% scm:tag
