Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Në këtë postim do të përshkruhet konfigurimi i automatizimit HotFix në projektet Maven duke përdorur Teamcity.

Për të bërë një HotFix zakonisht bëhen shumë veprime manuale:

  1. Krijoni një degë për versionin, në të cilin dëshironi të bëni HotFix.
  2. Rregulloni gabimin në version.
  3. Modifikoni versionin e bugfix në degën e versionit.
  4. Nxirrni etiketën e versionit bugfix.

Pikat 1, 3, 4 mund të automatizohen.

Para se të kalojmë në temë, është e rëndësishme të diskutojmë një temë të rëndësishme dhe të ndërlikuar — semanik softuerin. Kratësisht në lidhje me Semver mund të kuptohet në këtë skrinshot. Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Më shumë mund të lexoni në lidhje me lidhjen: 1.

Të gjitha konfigurimet e përshkruara në këtë postim mbështeten në Semver dhe Zhvillimi mbi Trunk.

Në Zhvillimin mbi Trunk për çdo version duhet të krijoni degën tuaj. Të gjitha ndryshimet (hotfix) në këtë version komitohen në këtë degë.

Në këtë postim do të automatizojmë gjërat e mëposhtme:

  • ND Build

  • Krijimi i një versioni të ri

  • Krijimi i degës për versionin

  • Modifikimi i versionit bugfix

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Kërkesat:

Do të krijojmë në Teamcity projektin "Automatizimi Maven Hotfix" dhe do të krijojmë aty 4 detyra.

  • CI Build (ND Build)

  • Krijo degë për version (Krijimi i degës për versionin)

  • Maven rrit bugfix (Modifikimi i versionit bugfix)

  • Maven lëshim (Krijimi i versionit të ri)

Skrinshoti i projektit:

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Konfigurimet e përgjithshme

Në të gjitha detyrat është e nevojshme të vendosni shenjën "Ndiqni ndërtimin: Fshini të gjitha skedarët në direktoriumin e kontrollit përpara ndërtimit." sepse nëse nuk ka këtë shenjë, kam pasur gabime.

Krijoni një VCS të vetëm. Karakteristikat e VCS janë të markuara me të kuqe.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Zakonisht përdorim skemën HTTPS për VCS. Në Specifikimi i degëve: duhet të shikohet të gjitha degët dhe të gjitha etiketat:

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

Duhet të krijohen 4 Parametra Konfigurimi.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Fusha value në BRANCH_FOR_INCREMENT dhe TAG_FROM_VERSION duhet të lihet bosh.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Duhet ngarkuar/shtuar çelësi privat. Në të gjitha detyrat përveç CI Build kërkohet çelësi privat.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Në çdo detyrë përveç CI Build në seksionin e Veçorive të Ndërtimit duhet të bashkëngjitet çelësi privat.

Shembulli për Maven lëshim

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

CI Build**.

Në detyrën CI Build ka vetëm një hap mvn clean test

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Maven lëshim

Në detyrën Maven lëshim 2 hapa. Hapi i parë kontrollon nëse dega është master. Nëse dega nuk është master, atëherë detyra bie.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'Dega nuk është master';
  echo 'Anulohet';
  exit 1;
fi

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë është standardi mvn release:prepare me opsion —mode-rrjedhës

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Krijo degë për publikimin

Për të krijuar një hotfix për publikimin, është e nevojshme të krijohet një degë. Kjo bëhet nga një detyrë Krijo degë për publikimin. Ajo ka 2 hapa.

Hapi i parë kontrollon që dega nuk është master, dhe e dyta kontrollon që versioni në skedarin pom.xml nuk përmbante fjalën SNAPSHOT

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" == "master" ]]; then
  echo 'Dega është master';
  echo 'Ndërprerja';
  exit 1;
fi

echo "Merr versionin nga 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 "Kontrollo SNAPSHOT"
if [[ $version == "*SNAPSHOT*" ]]; then
    echo "******************* K O N S T A T I M *************************"
    echo "************ Po krijoni degë për SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë ndryshon në developerConnection skemën e lidhjes nga HTTPS në 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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Maven rregullimi i gabimeve

Detyra përbëhet nga 6 pjesë. Mund të ishte refaktorizuar, por edhe kështu punon.

Hapi i parë — kontrolli që dega nuk është master. Nëse dega master detyra dështoi.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" == "master" ]]; then
  echo 'Dega është master';
  echo 'Ndërprerja';
  exit 1;
fi

# Këtu marrim versionin nga skedari pom.xml
echo "Merr versionin nga 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)"`
# Duhet të bëhet checkout në degën e nevojshme.
# Përndryshe git status tregon detached në degën e nevojshme.
# Nevojitet që git status të tregojë thjesht dega
git checkout $BRANCH
# Eksporto variablin bash në variablin Teamcity për përdorim të mëtejshëm.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë Maven ndryshimi i versionit të rregullimit në skedarin pom.xml.

Qëllimet: në maven të gjitha në një rresht

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i tretë — shfaqja e informacionit Git status dhe të tjera:

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i katërt ndryshon në developerConnection skemën e lidhjes nga HTTPS në GIT.

Dhe shpërndan ndryshimet në degën e specifikuar nga variabli i Teamcity %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%

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i pestë merr nga skedari pom.xml versionin dhe e vendos atë në Teamcity variablin TAG_FROM_VERSION. Vini re se versioni nga skedari pom.xml pa shkronjën v para. Ndërsa etiketa, mbi këtë version, tashmë ka shkronjën v në fillim.

echo "Merr versionin nga 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']"

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i gjashtë — etiketimi bugfix versioneve. Kjo bëhet me ndihmën e Maven opsionit të duhur në Qëllimi.

Opcioni Qëllimet:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster