Ev post dê sazkirina otomasyona HotFix-ê di projeyên Maven de bi karanîna Teamcity vebêje.
Ji bo ku HotFix bikin, bi gelemperî gelek gavên destan têne kirin:
- Ji bo serbestberdana ku hûn dixwazin HotFix jê re derxînin brunchek çêbikin
- Di berdanê de xeletiyek rast bikin
- Di şaxê berdanê de guhertoya xeletiyê biguherînin
- Etîketa guhertoya rastkirina xeletiyê derxînin
Xalên 1,3,4 dikarin otomatîk bibin.
Beriya ku em derbasî mijarê bibin, ez dixwazim qala mijarek girîng û tevlihev bikim - versioning software. Hûn dikarin di vê dîmenê de bi kurtî Semver fam bikin. 
Hûn dikarin li ser lînkê bêtir bixwînin: .
Hemî mîhengên ku di vê postê de têne diyar kirin li ser bingeh in и .
Di Pêşkeftina Bingeha Trunk de, hûn hewce ne ku ji bo her berdanê şaxek xwe biafirînin. Hemî guheztin (serrastkirin) di hundurê vê berdanê de ji vê şaxê re têne pabend kirin.
Wekî beşek ji vê postê, em ê tiştên jêrîn otomatîk bikin:
CI ava kirin
Çêkirina serbestberdana nû
Çêkirina şaxek berdanê
Guhertina guhertoya bugfix

Hewce:
- Ji bo hilanîna koda xwe depoya Git. Post dê depoyê bikar bîne .
- Teamcity server û agent. Hûn dikarin bi karanîna server û nûnerê Teamcity-ya xweya herêmî bilind bikin
- Cihê ku we nûnerê Teamcity heye, java, maven, git divê were saz kirin
Ka em li Teamcity projeya "Automation Maven Hotfix" biafirînin û li wir 4 peywiran biafirînin.
CI Build
Ji bo berdanê şaxek biafirînin
Maven rastkirina xeletiyê (guhertoya rastkirina xeletiyê biguhezîne))
Serbestberdana Maven (Afirandina berdanek nû)
Dîmena projeyê:

Mîhengên Giştî
Di hemî karan de divê hûn qutîkê kontrol bikin "Avakirina paqij: Berî çêkirinê hemî pelên di pelrêça danûstendinê de jêbirin", ji ber ku bêyî vê qutîkê min xeletî girt.
Em yek VCS-ê diafirînin. Taybetmendiyên VCS bi sor têne dorpêç kirin.

Bi gelemperî VCS nexşeya HTTPS bikar tînin. LI Taybetmendiya şaxê: ji bo temaşekirina hemî brunch û hemî etîketan hatî destnîşan kirin:
+:refs/heads/*
+:refs/tags/*Pêdivî ye ku 4 Parametreyên Vesazkirinê biafirînin.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Qada nirxê li BRANCH_FOR_INCREMENT û TAG_FROM_VERSION divê vala bimîne.

Pêdivî ye ku hûn mifteyek taybet barkirin/lê zêde bikin. Ji bilî CI Build hemî peywiran mifteyek taybetî hewce dike.

Di her peywirê de, ji bilî CI Build, di beşa Taybetmendiyên Avakirinê de hûn hewce ne ku mifteyek taybet girêdin.
Mînak ji bo Maven berdan

CI Build **.
Di karekî de CI Build tenê yek gav testa mvn paqij

Maven berdan
Di karekî de Maven berdan 2 gav. Gava yekem kontrolkirina wê brunch e mamoste. Ger brunch nebe mamoste, paşê peywir dikeve.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Pêngava duyemîn standard e mvn berdan: amade kirin bi vebijêrk - moda hevîrê

Ji bo berdanê şaxek biafirînin
Ji bo ku hûn ji bo serbestberdanê çareseriyek germ çêbikin, hûn hewce ne ku şaxek çêbikin. Ya ku wezîfe dike ev e Ji bo berdanê şaxek biafirînin. 2 gavên wê hene.
Gava yekem kontrol dike ku brunch ne mamoste, û duyemîn kontrol dike ku guhertoya pelê ye pom.xml peyv tê de nebû 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
Pêngava duyemîn pilana pêwendiyê di pêşvebirinêConnection de ji HTTPS berbi GIT diguhezîne.
# Здесь получаем 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 zêdekirina xeletiyê
Kar ji 6 beşan pêk tê. Ew dikaribû ji nû ve were çêkirin, lê ew hîn jî dixebite.
Gava yekem ev e ku hûn kontrol bikin ku brunch ne mamoste. Ger brunch mamoste peywir dikeve.
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']"
Pêngava duyemîn Maven di pelê pom.xml de guhertoya xeletiyê diguhezîne.
Armanc: Maven her tişt di yek rêzê de heye
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
Gava sêyemîn ev e ku agahdariya rewşa Git û yên din nîşan bide:
echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch
Pêngava çaremîn pilana girêdanê di pêşdebiranConnection de ji HTTPS berbi GIT diguhezîne.
Û guherandinan li şaxa ku di Teamcity de ji hêla guhêrbar %BRANCH_FOR_INCREMENT% ve hatî destnîşan kirin de dihêle
# Здесь получаем 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%
Pêngava pêncemîn ji dosyayê wergirtin e pom.xml versiyon û wê saz dike Teamcity têgûherr TAG_FROM_VERSION. Têbînî ku guhertoya ji pelê pom.xml bêyî tîpa v li pêş. Û tag, li ser bingeha vê versiyonê, jixwe di destpêkê de tîpa v heye.
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']"
Pêngava şeşemîn - nîşankirin bugfix versions. Ev bi kar tê kirin Maven bi vebijarka pêwîst di nav de armanc.
Dibe armancên:
-Dtag=%TAG_FROM_VERSION% scm:tag
Source: www.habr.com
