Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

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

Për të realizuar një HotFix zakonisht kryhen shumë veprime manuale:

  1. Krijo një degë për versionin në të cilin dëshiron të aplikosh HotFix
  2. Korrigjo gabimin në versionin
  3. Ndrysho versionin e bugfix në degën e versionit
  4. Nxir një etiketë të versionit të bugfix

Pikat 1, 3, 4 mund të automatizohen.

Para se të kalojmë në temë, do të dëshirojmë të përmendim një temë të rëndësishme dhe të komplikuar — versionimi i softuerit. Mund të kuptohet shkurtimisht për Semver nga ky ekran. Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Mund të lexoni më shumë në lidhjen: 1.

Të gjithë 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ë krijohet degë e saj. 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ërtimi CI

  • Krijimi i një versioni të ri

  • Krijimi i një dege për versionin

  • Ndryshimi i versionit të bugfix

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Kërkesat:

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

  • Ndërtimi CI (CI Build)

  • Krijo degë për versionin (Create branch for release)

  • Maven rrit bugfix (Maven increment bugfix)

  • Maven publikim (Maven release)

Ekrani i projektit:

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Cilësimet e përgjithshme

Në të gjitha detyrat është e nevojshme të aktivizohet kuti "Ndërprerja e ndërtimit: Fshi të gjitha skedarët në direktoriumin e checkout përpara ndërtimit«, pasi në mungesë të kësaj kutie unë kisha gabime.

Krijojmë VCS të vetëm. Caracteristikat e VCS janë të ndara me të kuqe.

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Zakonisht VCS përdor skemën HTTPS. Në Specifikimi i degës: thuhet të shikohet të gjitha degët dhe të gjitha etiketat:

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

Nevojitet të krijohen 4 Parametra të Konfigurimit.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Fusha e vlerës në BRANCH_FOR_INCREMENT dhe TAG_FROM_VERSION duhet të lihen bosh.

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Nevojitet të ngarkohet/shtohet çelësi privat. Në të gjitha detyrat përveç CI Build nevojitet çelësi privat.

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Në çdo detyrë përveç CI Build në seksionin e Karakteristikave të Ndërtimit duhet të lidhet çelësi privat.

Shembuj për Maven publikim (Maven release)

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Ndërtimi CI**.

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

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Maven publikim (Maven release)

Në detyrën Maven publikim (Maven release) 2 hapa. Hapi i parë kontrollon që dega është master. Nëse dega nuk është master, atëherë detyra dështon.

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

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Hapi i dytë është standard mvn release:prepare me opsionin --batch-mode

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Krijo degë për versionin

Për të krijuar një hotfix për versionin duhet të krijohet një degë. Këtë e bën detyra Krijo degë për versionin. 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 'Duke abortuar';
  exit 1;
fi

echo "Merr versionin e paketës 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 H E T E D I KU *****************"
    echo "************ Po krijoni degë për SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Hapi i dytë ndryshon skemën e lidhjes në developerConnection 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 me përdorimin e TeamCity

Maven rrit bugfix

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

Hapi i parë — kontrollon që dega nuk është master. Nëse dega është master detyra dështon.

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

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

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Hapi tjetër i Maven ndryshon versionin e bugfix në skedarin pom.xml.

Qëllime: në maven janë 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 me përdorimin e TeamCity

Hapi i tretë — shfaq informacionin e statusit të Git 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 me përdorimin e TeamCity

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

Dhe pushon ndryshimet në degën e caktuar në ndryshoren e 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 me përdorimin e TeamCity

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

echo "Merr versionin e paketës 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 me përdorimin e TeamCity

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

Opcioni Goals:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizimi i HotFix në projektet Maven me përdorimin e TeamCity

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster