Chotsatirachi chifotokoza kukhazikitsa makina a HotFix mu ntchito za Maven pogwiritsa ntchito Teamcity.
Kuchita HotFix, njira zambiri zamanja zimachitika:
- Pangani brunch kumasulidwa komwe mukufuna kutulutsa HotFix
- Konzani cholakwika pakumasulidwa
- Sinthani mtundu wa bugfix munthambi yotulutsa
- Tulutsani tag ya mtundu wa bugfix
Mfundo 1,3,4 zitha kukhala zokha.
Tisanapitirire pamutuwu, ndikufuna kukhudza mutu wofunikira komanso wovuta - kumasulira mapulogalamu. Mutha kumvetsetsa mwachidule Semver pachithunzichi. 
Mutha kuwerenga zambiri pa ulalo: .
Zokonda zonse zomwe zafotokozedwa mu positiyi zidakhazikitsidwa и .
Mu Trunk-Based Development, muyenera kupanga nthambi yanu pakumasulidwa kulikonse. Zosintha zonse (hotfixes) mkati mwa kutulutsidwaku zaperekedwa kunthambi iyi.
Monga gawo la positi iyi, tisintha zinthu zotsatirazi:
CI kupanga
Kupanga kutulutsa kwatsopano
Kupanga nthambi yotulutsa
Kusintha mtundu wa bugfix

Zofunikira:
- Git posungira kuti musunge khodi yanu. Positi idzagwiritsa ntchito posungira .
- Seva ya Teamcity ndi wothandizira. Mutha kukweza seva yanu ya Teamcity ndi wothandizira pogwiritsa ntchito
- Kumene muli ndi Teamcity wothandizira, java, maven, git ayenera kukhazikitsidwa
Tiyeni tipange pulojekiti ya "Automation Maven Hotfix" ku Teamcity ndikupanga ntchito zinayi pamenepo.
CI Kupanga
Pangani nthambi kuti amasulidwe
Maven increment bugfix (Sinthani bugfix version))
Kutulutsidwa kwa Maven (Kupanga kutulutsidwa kwatsopano)
Chithunzi cha polojekiti:

Zokonda zonse
Pazochita zonse muyenera kuyang'ana bokosi "Kumanga koyera: Chotsani mafayilo onse mu chikwatu chotuluka musanayambe kumanga", chifukwa popanda bokosi ili ndili ndi zolakwika.
Timapanga VCS imodzi. Mawonekedwe a VCS amazunguliridwa mofiira.

Nthawi zambiri ma VCS amagwiritsa ntchito chiwembu cha HTTPS. MU Mafotokozedwe a nthambi: zikuwonetsedwa kuti muwone ma brunch onse ndi ma tag onse:
+:refs/heads/*
+:refs/tags/*Ndikofunikira kupanga 4 Configuration Parameters.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Mtengowo uyenera kutsala wopanda kanthu.

Muyenera kukweza/kuwonjezera kiyi yachinsinsi. Ntchito zonse kupatula CI Build zimafuna kiyi yachinsinsi.

Pantchito iliyonse, kupatula CI Build, mu gawo la Build Features muyenera kulumikiza kiyi yachinsinsi.
Chitsanzo cha Maven kumasulidwa

CI Pangani **.
Mu ntchito CI Kupanga sitepe imodzi yokha mvn clean test

Maven kumasulidwa
Mu ntchito Maven kumasulidwa 2 masitepe. Gawo loyamba ndikuwunika kuti brunch ndi mbuye. Ngati brunch si mbuye, ndiye ntchitoyo imagwa.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Gawo lachiwiri ndi lokhazikika mvn kumasulidwa:kukonzekera ndi mwayi --batch-mode

Pangani nthambi yomasulidwa
Kuti mupange hotfix kuti mumasulidwe muyenera kupanga nthambi. Izi ndi zomwe taska imachita Pangani nthambi yomasulidwa. Ali ndi masitepe awiri.
Gawo loyamba limayang'ana kuti brunch siili mbuye, ndipo yachiwiri imayang'ana ngati mtunduwo uli mufayilo pom.xml analibe mawu CHITSANZO
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
Gawo lachiwiri likusintha chiwembu cholumikizira mu developerConnection kuchokera ku HTTPS kupita ku 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
Maven increment bugfix
Ntchitoyi ili ndi magawo 6. Ikhoza kusinthidwa, koma ikugwirabe ntchito.
Chinthu choyamba ndikuwona ngati brunch siili mbuye. Ngati brunch mbuye ntchitoyo ikugwa.
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']"
Gawo lachiwiri la Maven ndikusintha mtundu wa bugfix mu fayilo ya pom.xml.
zolinga: Maven ali ndi chilichonse pamzere umodzi
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
Gawo lachitatu ndikuwonetsa zambiri za Git ndi zina:
echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch
Gawo lachinayi likusintha chiwembu cholumikizira mu developerConnection kuchokera ku HTTPS kupita ku GIT.
Ndipo imakankhira zosintha kunthambi yotchulidwa mu Teamcity ndi %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%
Gawo lachisanu ndikupeza kuchokera ku fayilo pom.xml version ndikuyiyika mkati Teamcity kusintha TAG_FROM_VERSION. Onani kuti Baibulo kuchokera wapamwamba pom.xml opanda chilembo v kutsogolo. Ndipo tag, kutengera mtundu uwu, ili kale ndi chilembo v pachiyambi.
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']"
Gawo lachisanu ndi chimodzi - kuyika chizindikiro bugfix Mabaibulo. Izi zimachitidwa pogwiritsa ntchito Maven ndi njira yofunikira mu Goal.
Yankho Goals:
-Dtag=%TAG_FROM_VERSION% scm:tag
Source: www.habr.com
