Automatizácia HotFix v projektoch Maven pomocou TeamCity

Tento príspevok popisuje nastavenie automatizácie HotFix v projektoch Maven pomocou Teamcity.

Ak chcete vykonať HotFix, zvyčajne sa vykoná veľa manuálnych krokov:

  1. Vytvorte brunch pre vydanie, pre ktoré chcete zaviesť HotFix
  2. Opravte chybu vo vydaní
  3. Zmeňte verziu opravy chýb vo vetve vydania
  4. Zaveďte značku verzie opravy chýb

Body 1,3,4 je možné automatizovať.

Než prejdeme k téme, rád by som sa dotkol dôležitej a komplexnej témy - verziovanie softvér. Na tomto obrázku môžete stručne pochopiť Semvera. Automatizácia HotFix v projektoch Maven pomocou TeamCity

Viac si môžete prečítať na odkaze: 1.

Všetky nastavenia opísané v tomto príspevku sú založené na Semver и Trunk-Based Development.

V Trunk-Based Development si musíte pre každé vydanie vytvoriť vlastnú vetvu. Všetky zmeny (rýchle opravy) v rámci tohto vydania sa týkajú tejto vetvy.

V rámci tohto príspevku zautomatizujeme nasledujúce veci:

  • CI zostava

  • Vytvára sa nové vydanie

  • Vytvorenie vetvy uvoľnenia

  • Zmena verzie opravy chýb

Automatizácia HotFix v projektoch Maven pomocou TeamCity

požiadavky:

V Teamcity vytvoríme projekt „Automation Maven Hotfix“ a vytvoríme tam 4 úlohy.

  • Zostava CI

  • Vytvorte vetvu na uvoľnenie

  • Prírastok opravy chyby Maven (zmena verzie opravy chýb))

  • Vydanie Maven (Vytvorenie nového vydania)

Snímka obrazovky projektu:

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Všeobecné nastavenia

Vo všetkých úlohách musíte začiarknuť políčko "Čistá zostava: Pred zostavením odstráňte všetky súbory v pokladničnom adresári“, pretože bez tohto začiarkavacieho políčka som dostal chyby.

Vytvárame jeden VCS. Funkcie VCS sú zakrúžkované červenou farbou.

Automatizácia HotFix v projektoch Maven pomocou TeamCity

VCS zvyčajne používajú schému HTTPS. IN Špecifikácia pobočky: označené na sledovanie všetkých brunchov a všetkých značiek:

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

Je potrebné vytvoriť 4 konfiguračné parametre.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Pole hodnoty v BRANCH_FOR_INCREMENT a TAG_FROM_VERSION musí zostať prázdne.

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Musíte nahrať/pridať súkromný kľúč. Všetky úlohy okrem zostavovania CI vyžadujú súkromný kľúč.

Automatizácia HotFix v projektoch Maven pomocou TeamCity

V každej úlohe, okrem CI Build, v sekcii Build Features musíte pripojiť súkromný kľúč.

Príklad pre Vydanie Mavena

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Zostava CI**.

V úlohe Zostava CI len jeden krok mvn čistý test

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Vydanie Mavena

V úlohe Vydanie Mavena 2 kroky. Prvým krokom je skontrolovať, či je brunch majster. Ak nie je brunch majster, potom úloha padne.

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Druhý krok je štandardný mvn release:pripravte sa s opciou --dávkový režim

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Vytvorte vetvu na uvoľnenie

Ak chcete vytvoriť rýchlu opravu pre vydanie, musíte vytvoriť vetvu. Toto robí taska Vytvorte vetvu na uvoľnenie. Má 2 kroky.

Prvý krok skontroluje, či nie je brunch majstera druhý skontroluje, či je verzia v súbore pom.xml neobsahoval slovo SNÍMAČKA

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Druhý krok zmení schému pripojenia v developerConnection z HTTPS na 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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Prírastok opravy chyby Maven

Úloha pozostáva zo 6 častí. Mohlo to byť prerobené, ale stále to funguje.

Prvým krokom je skontrolovať, či nie je brunch majster. Ak brunch majster úloha padá.

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Druhým krokom Maven je zmena verzie opravy chýb v súbore pom.xml.

Ciele: Maven má všetko v jednej línii

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Tretím krokom je zobrazenie informácií o stave Git a ďalších:

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Štvrtý krok zmení schému pripojenia v developerConnection z HTTPS na GIT.

A posúva zmeny do vetvy špecifikovanej v Teamcity premennou %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%

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Piatym krokom je získanie zo súboru pom.xml verziu a nainštaluje ju do Teamcity premenlivý TAG_FROM_VERSION. Všimnite si, že verzia zo súboru pom.xml bez písmena v vpredu. A tag na základe tejto verzie už má na začiatku písmeno v.

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

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Šiesty krok - značkovanie bugfix verzií. To sa robí pomocou Maven s požadovanou možnosťou v Cieľ.

Možnosť Ciele:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizácia HotFix v projektoch Maven pomocou TeamCity

Zdroj: hab.com

Pridať komentár