Poso ena e tla hlalosa ho theha boiketsetso ba HotFix mererong ea Maven u sebelisa Teamcity.
Ho etsa HotFix, hangata ho etsoa mehato e mengata ea matsoho:
- Theha brunch bakeng sa tokollo eo u batlang ho e phatlalatsa HotFix ho
- Lokisa phoso e hlahang
- Fetola mofuta oa bugfix lekaleng la tokollo
- Hlakola tag ea mofuta oa bugfix
Lintlha tsa 1,3,4 li ka iketsetsa.
Pele re fetela sehloohong, ke rata ho ama taba ea bohlokoa le e rarahaneng - phetolelo software. U ka utloisisa Semver ka bokhutšoanyane setšoantšong sena sa skrini. 
U ka bala haholoanyane ho sehokelo: .
Litlhophiso tsohle tse hlalositsoeng posong ena li thehiloe ho и .
Ho nts'etsopele e thehiloeng ho Trunk, o hloka ho iketsetsa lekala bakeng sa tokollo ka 'ngoe. Liphetoho tsohle (hotfixes) ka har'a tokollo ena li ikemiselitse ho lekaleng lena.
E le karolo ea poso ena, re tla iketsetsa lintho tse latelang:
CI haha
Ho theha tokollo e ncha
Ho theha lekala la tokollo
Ho fetola mofuta oa bugfix

Litlhokahalo:
- Git repository bakeng sa ho boloka khoutu ea hau. Poso e tla sebelisa polokelo .
- Seva ea Teamcity le moemeli. O ka phahamisa seva sa hau sa Teamcity sa lehae le moemeli o sebelisa
- Moo u nang le moemeli oa Teamcity, java, maven, git e tlameha ho kenngoa
Ha re theheng projeke ea "Automation Maven Hotfix" ho Teamcity mme re thehe mesebetsi e 4 moo.
CI Haha
Theha lekala bakeng sa tokollo
Maven increment bugfix (Fetola mofuta oa bugfix)
Ho lokolloa ha Maven (Ho theha tokollo e ncha)
Setšoantšo sa skrini sa morero:

Litlhophiso tse akaretsang
Mesebetsing eohle o tlameha ho tšoaea lebokose "Mohaho o hloekileng: Hlakola lifaele tsohle bukeng ea ho tsoa pele ho kaho", hobane ntle le lebokose lena ke fumane liphoso.
Re theha VCS e le 'ngoe. Likarolo tsa VCS li pota-potiloe ka bofubelu.

Ka tloaelo li-VCS li sebelisa morero oa HTTPS. IN Tlhaloso ea lekala: e bontšitsoe ho shebella li-brunch tsohle le li-tag tsohle:
+:refs/heads/*
+:refs/tags/*Hoa hlokahala ho theha 4 Configuration Parameters.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Sebaka sa boleng ho BRANCH_FOR_INCREMENT le TAG_FROM_VERSION se tlameha ho sala se se na letho.

U hloka ho kenya/kenya senotlolo sa lekunutu. Mesebetsi eohle ntle le CI Build e hloka senotlolo sa lekunutu.

Mosebetsing o mong le o mong, ntle le CI Build, karolong ea Build Features o hloka ho hokahanya senotlolo sa poraefete.
Mohlala bakeng sa Maven tokollo

CI Haha **.
Mosebetsing CI Haha mohato o le mong feela mvn hloekileng teko

Maven tokollo
Mosebetsing Maven tokollo 2 mehato. Mohato oa pele ke ho hlahloba hore na brunch ke mong'a. Haeba brunch ha e joalo mong'a, joale mosebetsi oa oa.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Mohato oa bobeli ke maemo mvn tokollo: lokisetsa ka kgetho --batch-mokhoa

Theha lekala bakeng sa tokollo
Ho theha hotfix bakeng sa tokollo o hloka ho theha lekala. Sena ke seo mosebetsi o se etsang Theha lekala bakeng sa tokollo. O na le mehato e 2.
Mohato oa pele o hlahloba hore brunch ha e joalo mong'a, 'me ea bobeli e hlahloba hore na phetolelo e teng faeleng pom e ne e se na lentsoe LIEKETSENG LITLHAKU
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
Mohato oa bobeli o fetola sekema sa khokahano ho developerConnection ho tloha HTTPS ho ea ho 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
Mosebetsi o na le likarolo tse 6. E ka be e ile ea fetoloa, empa e ntse e sebetsa.
Mohato oa pele ke ho hlahloba hore na brunch ha e joalo mong'a. Haeba brunch mong'a mosebetsi oa oa.
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']"
Mohato oa bobeli oa Maven ke ho fetola mofuta oa bugfix faeleng ea pom.xml.
Lipakane: Maven e na le tsohle moleng o le mong
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
Mohato oa boraro ke ho bonts'a tlhahisoleseling ea boemo ba Git le tse ling:
echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch
Mohato oa bone o fetola moralo oa khokahano ho developerConnection ho tloha HTTPS ho ea ho GIT.
'Me e sutumelletsa liphetoho lekaleng le boletsoeng ho Teamcity ka %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%
Mohato oa bohlano ke ho tsoa faeleng pom phetolelo le kenya eona ka Teamcity feto-fetoha TAG_FROM_VERSION. Hlokomela hore phetolelo e tsoang faeleng pom ntle le tlhaku v ka pele. 'Me tag, e thehiloeng phetolelong ena, e se e ntse e e-na le lengolo la v qalong.
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']"
Mohato oa botšelela - ho tšoaea bugfix liphetolelo. Sena se etsoa ho sebelisoa Maven ka khetho e hlokahalang ho pakane ea.
Khetho Lipakane Tsa:
-Dtag=%TAG_FROM_VERSION% scm:tag
Source: www.habr.com
