ProHoster > Блог > Gudanarwa > Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity
Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity
Wannan sakon zai bayyana kafa HotFix aiki da kai a cikin ayyukan Maven ta amfani da Teamcity.
Don yin HotFix, yawancin matakai na hannu ana yin su:
Ƙirƙiri brunch don sakin da kake son mirgine HotFix zuwa
Gyara kwaro a cikin saki
Canja sigar bugfix a cikin reshen saki
Fitar da alamar bugfix
Za a iya sarrafa maki 1,3,4.
Kafin mu ci gaba zuwa ga maudu'in, zan so in tabo wani muhimmin batu mai rikitarwa - versioning software. Kuna iya fahimtar Semver a taƙaice a cikin wannan hoton.
Duk saitunan da aka bayyana a cikin wannan sakon an dogara ne akan su Semver и Cigaban Girgizawa.
A cikin Ci gaban Tushen Ganga, kuna buƙatar ƙirƙirar reshen ku don kowane saki. Duk canje-canje (hotfixes) a cikin wannan sakin an sadaukar da su ga wannan reshe.
A matsayin wani ɓangare na wannan sakon, za mu sarrafa abubuwa masu zuwa ta atomatik:
Sabar Teamcity da wakili. Kuna iya haɓaka uwar garken Teamcity na gida da wakili ta amfani da Docker-rubuta
Inda kuke da wakilin Teamcity, java, maven, git dole ne a shigar
Bari mu ƙirƙiri aikin "Automation Maven Hotfix" a cikin Teamcity kuma ƙirƙirar ayyuka 4 a can.
CI Gina
Ƙirƙiri reshe don saki
Maven increment bugfix (Canja sigar bugfix))
Maven saki (Ƙirƙirar sabon saki)
Hoton hoton aikin:
Gabaɗaya saituna
A cikin dukkan ayyuka dole ne ku duba akwatin "Tsaftace gini: Share duk fayiloli a cikin kundin wurin biya kafin ginin“, domin ba tare da wannan akwati ba na sami kurakurai.
Mun ƙirƙiri VCS guda ɗaya. An kewaya fasalin VCS da ja.
Yawanci VCSs suna amfani da tsarin HTTPS. IN Bayanin reshe: an nuna don kallon duk brunches da duk tags:
+:refs/heads/*
+:refs/tags/*
Wajibi ne don ƙirƙirar Sigina Kanfigareshan 4.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
Dole ne a bar filin darajar da ke BRANCH_FOR_INCREMENT da TAG_FROM_VERSION fanko.
Kuna buƙatar loda/ƙara maɓalli na sirri. Duk ayyuka banda CI Gina suna buƙatar maɓalli na sirri.
A cikin kowane ɗawainiya, ban da CI Gina, a cikin ɓangaren Gina Abubuwan Gina kuna buƙatar haɗa maɓalli na sirri.
Misali ga Maven saki
CI Gina ***.
A cikin wani aiki CI Gina mataki daya kawai mvn gwajin tsabta
Maven saki
A cikin wani aiki Maven saki 2 matakai. Mataki na farko shine duba cewa brunch shine master. Idan brunch ba master, sai aikin ya fadi.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Mataki na biyu shine misali mvn saki: shirya tare da zabin -- tsari-yanayin
Ƙirƙiri reshe don saki
Don ƙirƙirar hotfix don saki kuna buƙatar ƙirƙirar reshe. Wannan shi ne abin da aikin yake yi Ƙirƙiri reshe don saki. Tana da matakai 2.
Mataki na farko yana bincika cewa brunch ba master, kuma na biyu ya duba cewa sigar tana cikin fayil ɗin fansa.xml bai ƙunshi kalmar ba HOTUNA
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
Mataki na biyu yana canza tsarin haɗin kai a cikin haɓaka Haɗin kai daga HTTPS zuwa 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 increament bugfix
Aikin ya ƙunshi sassa 6. Ana iya gyara shi, amma har yanzu yana aiki.
Mataki na farko shine duba cewa brunch ɗin ba master. Idan brunch master aikin ya fadi.
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']"
Mataki na biyu na Maven yana canza sigar bugfix a cikin fayil ɗin pom.xml.
Mataki na huɗu yana canza tsarin haɗin kai a cikin Haɗin haɓakawa daga HTTPS zuwa GIT.
Kuma yana tura canje-canje zuwa reshe da aka ƙayyade a cikin Ƙungiyar ta % BRANCH_FOR_INCREMENT% m
# Здесь получаем 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%
Mataki na biyar yana samun daga fayil ɗin fansa.xml version kuma shigar da shi a ciki Ƙungiya m TAG_FROM_VERSION. Lura cewa sigar daga fayil ɗin fansa.xml ba tare da harafin v a gaba ba. Kuma alamar, bisa wannan sigar, tana da harafin v a farkon.
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']"
Mataki na shida - tagging bugfix iri-iri. Ana yin wannan ta amfani da Maven tare da zaɓin da ake buƙata a ciki Kwallo.