Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Această postare va descrie configurarea automatizării HotFix în proiectele Maven folosind Teamcity.

Pentru a face HotFix, se fac de obicei o mulțime de pași manuali:

  1. Creați un brunch pentru versiunea pentru care doriți să lansați HotFix
  2. Remediați o eroare în lansare
  3. Schimbați versiunea de remediere a erorilor în ramura de lansare
  4. Lansați eticheta versiunii de remediere a erorilor

Punctele 1,3,4 pot fi automatizate.

Înainte de a trece la subiect, aș dori să abordez un subiect important și complex - versiunea software. Puteți înțelege pe scurt Semver în această captură de ecran. Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Puteți citi mai multe la link: 1.

Toate setările descrise în această postare se bazează pe Semver и Dezvoltare bazată pe trunchi.

În dezvoltarea bazată pe trunchi, trebuie să vă creați propria ramură pentru fiecare lansare. Toate modificările (remedieri rapide) din această ediție sunt efectuate în această ramură.

Ca parte a acestei postări, vom automatiza următoarele lucruri:

  • CI build

  • Crearea unei noi versiuni

  • Crearea unei ramuri de lansare

  • Schimbarea versiunii de remediere a erorilor

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Cerinte:

Să creăm proiectul „Automation Maven Hotfix” în Teamcity și să creăm 4 sarcini acolo.

  • CI Build

  • Creați ramură pentru lansare

  • Remediere de erori Maven increment (Schimbați versiunea de remediere a erorilor))

  • Versiunea Maven (crearea unei noi versiuni)

Captură de ecran a proiectului:

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Setări generale

În toate sarcinile trebuie să bifați caseta "Curățare construcție: ștergeți toate fișierele din directorul de finalizare înainte de compilare„, deoarece fără această casetă de selectare am primit erori.

Creăm un singur VCS. Caracteristicile VCS sunt încercuite cu roșu.

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

De obicei, VCS-urile folosesc schema HTTPS. ÎN Specificații de ramură: indicat să urmăriți toate brunchurile și toate etichetele:

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

Este necesar să creați 4 parametri de configurare.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Câmpul de valoare din BRANCH_FOR_INCREMENT și TAG_FROM_VERSION trebuie lăsat gol.

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Trebuie să încărcați/adăugați o cheie privată. Toate sarcinile, cu excepția CI Build, necesită o cheie privată.

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

În fiecare sarcină, cu excepția CI Build, în secțiunea Build Features trebuie să conectați o cheie privată.

Exemplu pentru Eliberarea Maven

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

CI Build**.

Într-o sarcină CI Build doar un pas mvn clean test

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Eliberarea Maven

Într-o sarcină Eliberarea Maven 2 pași. Primul pas este să verifici dacă brunch-ul este maestru. Dacă brunch-ul nu este maestru, atunci sarcina cade.

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al doilea pas este standard mvn release:prepare cu optiune --mod-loc

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Creați ramură pentru lansare

Pentru a crea o remediere rapidă pentru o versiune, trebuie să creați o ramură. Asta face Taska Creați ramură pentru lansare. Are 2 trepte.

Primul pas verifică dacă brunch-ul nu este maestru, iar al doilea verifică dacă versiunea este în fișier pom.xml nu conținea cuvântul INSTANTANEU

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al doilea pas modifică schema de conectare în developerConnection de la HTTPS la 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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Remedierea erorilor de increment Maven

Sarcina constă din 6 părți. Ar fi putut fi refactorizat, dar încă funcționează.

Primul pas este să verifici dacă brunch-ul nu este maestru. Dacă brunch maestru sarcina cade.

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al doilea pas Maven este schimbarea versiunii de remediere a erorilor din fișierul pom.xml.

Obiective: Maven are totul într-o singură linie

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al treilea pas este afișarea informațiilor despre starea Git și altele:

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al patrulea pas modifică schema de conectare în developerConnection de la HTTPS la GIT.

Și împinge modificări la ramura specificată în Teamcity de variabila %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%

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al cincilea pas este obținerea din fișier pom.xml versiune și o instalează în Teamcity variabil TAG_FROM_VERSION. Rețineți că versiunea din fișier pom.xml fără litera v în față. Iar eticheta, bazată pe această versiune, are deja litera v la început.

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

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Al șaselea pas - etichetarea rezolvarea unei erori versiuni. Acest lucru se face folosind Maven cu opțiunea necesară în Scop.

Opțiune Goluri:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizarea HotFix-urilor în proiectele Maven folosind TeamCity

Sursa: www.habr.com

Adauga un comentariu