Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Dëse Post beschreift d'Opstellung vun HotFix Automatioun a Maven Projeten mat Teamcity.

Fir HotFix ze maachen, gi vill manuell Schrëtt normalerweis gemaach:

  1. Erstellt e Brunch fir d'Verëffentlechung op déi Dir HotFix wëllt ausrollen
  2. Fix e Feeler an der Verëffentlechung
  3. Ännert d'Bugfix Versioun an der Verëffentlechungszweig
  4. Roll eraus Bugfix Versioun Tag

Punkten 1,3,4 kënnen automatiséiert ginn.

Ier mer op d'Thema weidergoen, wëll ech op e wichtegt a komplext Thema beréieren - Versiounen Software. Dir kënnt Semver kuerz an dësem Screenshot verstoen. Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Dir kënnt méi um Link liesen: 1.

All Astellungen, déi an dësem Post beschriwwe sinn, baséieren op Semver и Trunk-baséiert Entwécklung.

An Trunk-Based Entwécklung musst Dir Är eege Filial fir all Verëffentlechung erstellen. All Ännerungen (Hotfixes) bannent dëser Verëffentlechung sinn fir dës Branche engagéiert.

Als Deel vun dësem Post wäerte mir déi folgend Saachen automatiséieren:

  • CI bauen

  • Schafen eng nei Verëffentlechung

  • Eng Verëffentlechungszweig erstellen

  • D'Bugfix Versioun änneren

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Ufuerderunge:

Loosst eis de Projet "Automation Maven Hotfix" an Teamcity erstellen an do 4 Aufgaben erstellen.

  • CI Bauen

  • Erstellt Branche fir Verëffentlechung

  • Maven Inkrement Bugfix (Bugfix Versioun änneren))

  • Maven Verëffentlechung (Eng nei Verëffentlechung erstellen)

Project Screenshot:

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Allgemeng Astellunge

An all Aufgaben musst Dir d'Këscht markéieren "Clean Build: Läschen all Dateien am Kasseverzeechnes virum Build", well ouni dës Checkbox hunn ech Feeler.

Mir schafen eng eenzeg VCS. VCS Fonctiounen sinn am rout ëmkreest.

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Typesch benotzen VCSs den HTTPS Schema. IN Branch Spezifizéierung: uginn fir all Brunchen an all Tags ze kucken:

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

Et ass néideg fir 4 Konfiguratiounsparameter ze kreéieren.

  • BRANCH_FIR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

D'Wäertfeld an BRANCH_FOR_INCREMENT an TAG_FROM_VERSION muss eidel gelooss ginn.

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Dir musst e private Schlëssel eropluede / derbäi. All Aufgaben ausser CI Build erfuerderen e private Schlëssel.

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

An all Aufgab, ausser CI Build, an der Build Features Sektioun musst Dir e private Schlëssel verbannen.

Beispill fir Maven Fräisetzung

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

CI Build**.

An enger Aufgab CI Bauen just ee Schrëtt mvn propper Test

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Maven Fräisetzung

An enger Aufgab Maven Fräisetzung 2 Schrëtt. Den éischte Schrëtt ass ze kontrolléieren ob de Brunch ass Meeschtesch. Wann Brunch net ass Meeschtesch, da fällt d'Aufgab.

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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Den zweete Schrëtt ass Standard mvn Verëffentlechung: virbereeden mat Optioun --Batch-Modus

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Erstellt Branche fir Verëffentlechung

Fir e Hotfix fir eng Verëffentlechung ze kreéieren musst Dir eng Branche erstellen. Dëst ass wat d'Taska mécht Erstellt Branche fir Verëffentlechung. Si huet 2 Schrëtt.

Den éischte Schrëtt kontrolléiert datt Brunch net ass Meeschtesch, an déi zweet kontrolléiert datt d'Versioun an der Datei ass pom.xml huet d'Wuert net enthalen 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 "******************* W A R N I N G *************************"
    echo "************ You are create branch for SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Den zweete Schrëtt ännert d'Verbindungsschema am EntwécklerConnection vun HTTPS op 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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Maven erhéijen Bugfix

D'Aufgab besteet aus 6 Deeler. Et kéint refactored ginn, mä et funktionnéiert nach.

Den éischte Schrëtt ass ze kontrolléieren ob de Brunch net ass Meeschtesch. Wann Brunch Meeschtesch d'Aufgab fällt.

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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Den zweete Maven Schrëtt ännert d'Bugfix Versioun an der pom.xml Datei.

Goaler: Maven huet alles an enger Linn

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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Den drëtte Schrëtt ass Git Statusinformatioun an anerer ze weisen:

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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

De véierte Schrëtt ännert d'Verbindungsschema am EntwécklerConnection vun HTTPS op GIT.

A dréckt d'Ännerungen un d'Branche spezifizéiert an Teamcity vun der %BRANCH_FOR_INCREMENT% Variabel

# Здесь получаем 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%

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

De fënnefte Schrëtt ass aus der Datei ze kommen pom.xml Versioun an installéiert se an Teamcity variabel TAG_FROM_VERSION. Bedenkt datt d'Versioun vun der Datei pom.xml ouni de Buschtaf v virun. An den Tag, baséiert op dëser Versioun, huet schonn de Buschtaf v am Ufank.

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

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Sechste Schrëtt - Tagging bugfix Versiounen. Dëst gëtt gemaach mat Maven mat der néideg Optioun an Zil.

Optioun Zieler:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatisatioun vun HotFix a Maven Projeten mat TeamCity

Source: will.com

Kaaft zouverlässeg Hosting fir Site mat DDoS Schutz, VPS VDS Server 🔥 Kaaft zouverléissegt Websäithosting mat DDoS-Schutz, VPS VDS Server | ProHoster