ProHoster > Blog > Tsamaiso > Automation ea HotFix ho merero ea Maven e sebelisang TeamCity
Automation ea HotFix ho merero ea Maven e sebelisang TeamCity
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.
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:
Seva ea Teamcity le moemeli. O ka phahamisa seva sa hau sa Teamcity sa lehae le moemeli o sebelisa qobella
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.
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.