Automatització de HotFix en projectes Maven mitjançant TeamCity

Aquesta publicació descriurà la configuració de l'automatització HotFix en projectes Maven amb Teamcity.

Per fer HotFix, normalment es fan molts passos manuals:

  1. Creeu un brunch per a la versió a la qual voleu implementar HotFix
  2. Arreglar un error al llançament
  3. Canvieu la versió de correcció d'errors a la branca de llançament
  4. Desplegueu l'etiqueta de versió de correcció d'errors

Els punts 1,3,4 es poden automatitzar.

Abans de passar al tema, m'agradaria tocar un tema important i complex: versionar programari. Podeu entendre breument Semver en aquesta captura de pantalla. Automatització de HotFix en projectes Maven mitjançant TeamCity

Podeu llegir més a l'enllaç: 1.

Totes les configuracions descrites en aquesta publicació es basen en Sever и Desenvolupament basat en troncs.

Al desenvolupament basat en troncs, heu de crear la vostra pròpia branca per a cada llançament. Tots els canvis (correccions) d'aquesta versió estan compromesos amb aquesta branca.

Com a part d'aquesta publicació, automatitzarem les coses següents:

  • Construcció CI

  • Creació d'una nova versió

  • Creació d'una branca de llançament

  • Canviant la versió de la correcció d'errors

Automatització de HotFix en projectes Maven mitjançant TeamCity

Requisits:

Creem el projecte "Automation Maven Hotfix" a Teamcity i creem-hi 4 tasques.

  • Construcció CI

  • Crea una branca per al llançament

  • Correcció d'errors d'increment de Maven (Canviar la versió de correcció d'errors))

  • Versió de Maven (creació d'una versió nova)

Captura de pantalla del projecte:

Automatització de HotFix en projectes Maven mitjançant TeamCity

Configuració general

En totes les tasques heu de marcar la casella "Construcció neta: suprimiu tots els fitxers del directori de pagament abans de la compilació", perquè sense aquesta casella de selecció he rebut errors.

Creem un únic VCS. Les característiques VCS estan encerclades en vermell.

Automatització de HotFix en projectes Maven mitjançant TeamCity

Normalment, els VCS utilitzen l'esquema HTTPS. EN Especificació de la branca: indicat per veure tots els brunchs i totes les etiquetes:

+:refs/heads/*
+:refs/tags/*

Cal crear 4 paràmetres de configuració.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

El camp de valor a BRANCH_FOR_INCREMENT i TAG_FROM_VERSION s'ha de deixar buit.

Automatització de HotFix en projectes Maven mitjançant TeamCity

Heu de pujar/afegir una clau privada. Totes les tasques, excepte CI Build, requereixen una clau privada.

Automatització de HotFix en projectes Maven mitjançant TeamCity

A cada tasca, excepte CI Build, a la secció Build Features cal connectar una clau privada.

Exemple per Alliberament de Maven

Automatització de HotFix en projectes Maven mitjançant TeamCity

CI Build**.

En una tasca Construcció CI només un pas prova de neteja mvn

Automatització de HotFix en projectes Maven mitjançant TeamCity

Alliberament de Maven

En una tasca Alliberament de Maven 2 passos. El primer pas és comprovar que el dinar és mestre. Si el brunch no ho és mestre, llavors la tasca cau.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'Branch is not master';
  echo 'Aborting';
  exit 1;
fi

Automatització de HotFix en projectes Maven mitjançant TeamCity

El segon pas és estàndard mvn release:preparar amb opció --mode per lots

Automatització de HotFix en projectes Maven mitjançant TeamCity

Crea una branca per al llançament

Per crear una correcció ràpida per a una versió, heu de crear una branca. Això és el que fa la taska Crea una branca per al llançament. Té 2 passos.

El primer pas comprova que el brunch no ho sigui mestre, i el segon comprova que la versió estigui al fitxer pom.xml no contenia la paraula Instantània

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 "******************* W A R N I N G *************************"
    echo "************ You are create branch for SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Automatització de HotFix en projectes Maven mitjançant TeamCity

El segon pas canvia l'esquema de connexió a developerConnection d'HTTPS a GIT.

# Здесь получаем developerConnection из файла pom.xml
developerConnection=$(xmllint -xpath "/*[local-name() = 'project' ]//*[local-name() = 'developerConnection']/text()" pom.xml | sed  's|scm:git:ssh://||')
echo developerConnection
echo $developerConnection
# Здесь меняем / на : в URL для git_remote_url
git_remote_url=$(echo $developerConnection| sed 's/gitlab.com//gitlab.com:/g')
echo git_remote_url
echo $git_remote_url

git remote set-url origin $git_remote_url

# Если вы не используете ввстроенную возможность Teamcity получения user и email из ~/.gitconfig, то можно указать их здесь
echo 'git config user.name %TEAM_USER%'
git config user.name %TEAM_USER%
echo 'git config user.email %TEAM_USER_EMAIL%'
git config user.email %TEAM_USER_EMAIL%

# Здесь получаем версию из файла pom.xml
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 $version

# Почему-то без fetch выдавало ошибку.
git fetch

if [ `git branch -a | egrep "${version}$"` ]
then
    echo "Branch exists"
    exit 1
fi

# Создаем бранч той версии, который был в файле pom.xml
echo "Create branch"
git checkout -b $version

# Чистый git всегда предлагает настроить политику отправки.
git config --global push.default simple

# Пушим в ветку совпадающую с версией в pom.xml
echo "Push release branch"
git push --set-upstream origin $version

Automatització de HotFix en projectes Maven mitjançant TeamCity

Correcció d'errors d'increment de Maven

La tasca consta de 6 parts. Es podria haver refactoritzat, però encara funciona.

El primer pas és comprovar que el brunch no ho sigui mestre. Si brunch mestre la tasca cau.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" == "master" ]]; then
  echo 'Branch is master';
  echo 'Aborting';
  exit 1;
fi

# Здесь получаем версию из файла pom.xml
echo "Get version package from pom.xml"
BRANCH=`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)"`
# Приходится делать checkout на нужный бранч.
# Иначе git status показывает detached к нужному бранчу.
# Нужно чтобы git status показывал просто бранч
git checkout $BRANCH
# Экспортируем переменную bash в переменную Teamcity для дальнейшего использования.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

Automatització de HotFix en projectes Maven mitjançant TeamCity

El segon pas de Maven és canviar la versió de correcció d'errors al fitxer pom.xml.

Gols: Maven ho té tot en una línia

build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit

Automatització de HotFix en projectes Maven mitjançant TeamCity

El tercer pas és mostrar la informació d'estat de Git i altres:

echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch

Automatització de HotFix en projectes Maven mitjançant TeamCity

El quart pas canvia l'esquema de connexió a developerConnection d'HTTPS a GIT.

I envia canvis a la branca especificada a Teamcity per la variable %BRANCH_FOR_INCREMENT%.

# Здесь получаем developerConnection из файла pom.xml
developerConnection=$(xmllint -xpath "/*[local-name() = 'project' ]//*[local-name() = 'developerConnection']/text()" pom.xml | sed  's|scm:git:ssh://||')
echo developerConnection
# Здесь меняем / на : в URL для git_remote_url
git_remote_url=$(echo $developerConnection| sed 's/gitlab.com//gitlab.com:/g')
echo git_remote_url
echo $git_remote_url

git remote set-url origin $git_remote_url

# Если вы не используете ввстроенную возможность Teamcity получения user и email из ~/.gitconfig, то можно указать их здесь
echo 'git config user.name %TEAM_USER%'
git config user.name %TEAM_USER%
echo 'git config user.email %TEAM_USER_EMAIL%'
git config user.email %TEAM_USER_EMAIL%
echo 'git add .'
git add .
echo 'git commit -m "Increment bugfix"'
git commit -m "Increment bugfix"

git push --set-upstream origin %BRANCH_FOR_INCREMENT%

Automatització de HotFix en projectes Maven mitjançant TeamCity

El cinquè pas és obtenir des del fitxer pom.xml versió i l'instal·la Teamcity variable TAG_FROM_VERSION. Tingueu en compte que la versió del fitxer pom.xml sense la lletra v al davant. I l'etiqueta, basada en aquesta versió, ja té la lletra v al principi.

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']"

Automatització de HotFix en projectes Maven mitjançant TeamCity

Sisè pas: etiquetatge de correcció d'errors versions. Això es fa utilitzant Maven amb l'opció requerida a Objectiu.

Opció Objectius:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatització de HotFix en projectes Maven mitjançant TeamCity

Font: www.habr.com

Afegeix comentari