HotFixi automatiseerimine Maveni projektides TeamCity abil
See postitus kirjeldab HotFixi automatiseerimise seadistamist Maveni projektides Teamcity abil.
HotFixi tegemiseks tehakse tavaliselt palju käsitsi toiminguid:
Looge väljalase jaoks, millele soovite HotFixi avaldada, hiline hommikueine
Parandage väljalaskes esinev viga
Muutke väljalaskeharus veaparanduse versiooni
Tõsta välja veaparanduse versioonimärgend
Punkte 1,3,4 saab automatiseerida.
Enne kui läheme teema juurde, tahaksin puudutada olulist ja keerulist teemat - versioonide koostamine tarkvara. Sellel ekraanipildil saate Semveri lühidalt mõista.
Kõigi ülesannete puhul peate märkima kasti "Puhas järg: kustutage kõik failid kassakataloogis enne ehitamist“, sest ilma selle märkeruuduta sain vead.
Loome ühe VCS-i. VCS-i funktsioonid on punasega ümbritsetud.
Tavaliselt kasutavad VCS-id HTTPS-skeemi. IN Filiaali spetsifikatsioon: Soovitud vaadata kõiki brunsse ja kõiki silte:
+:refs/heads/*
+:refs/tags/*
On vaja luua 4 konfiguratsiooniparameetrit.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
Väärtuse väli versioonides BRANCH_FOR_INCREMENT ja TAG_FROM_VERSION tuleb tühjaks jätta.
Peate privaatvõtme üles laadima/lisama. Kõik ülesanded, välja arvatud CI Build, nõuavad privaatvõtit.
Igas ülesandes, välja arvatud CI Build, peate jaotises Ehitusfunktsioonid ühendama privaatvõtme.
Näide jaoks Maven vabastamine
CI Build**.
Ülesandes CI ehitamine vaid üks samm mvn puhas test
Maven vabastamine
Ülesandes Maven vabastamine 2 sammu. Esimene samm on kontrollida, kas hiline hommikusöök on meister. Kui brunch ei ole meister, siis ülesanne langeb.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Teine samm on standardne mvn release:prepare valikuga -- partiirežiim
Loo vabastamiseks haru
Väljalaske käigultparanduse loomiseks peate looma haru. See on see, mida ülesanne teeb Loo vabastamiseks haru. Tal on 2 sammu.
Esimene samm kontrollib, et hiline hommikueine poleks meisterja teine kontrollib, kas versioon on failis pom.xml ei sisaldanud seda sõna NÄPPU
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
Teine samm muudab developerConnectioni ühendusskeemi HTTPS-ilt GIT-le.
# Здесь получаем 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 juurdekasvu veaparandus
Ülesanne koosneb 6 osast. Seda oleks võinud ümber teha, kuid see töötab endiselt.
Esimene samm on kontrollida, et hiline hommikueine poleks meister. Kui brunch meister ülesanne langeb.
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']"
Teine Maveni samm on veaparanduse versiooni muutmine failis pom.xml.
Neljas samm muudab developerConnectioni ühenduse skeemi HTTPS-ilt GIT-le.
Ja lükkab muudatused Teamcitys muutuja %BRANCH_FOR_INCREMENT% määratud harusse
# Здесь получаем 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%
Viies samm on failist hankimine pom.xml versiooni ja installib selle sisse Teamcity muutuv TAG_FROM_VERSION. Pange tähele, et faili versioon pom.xml ilma v-täheta ees. Ja sellel versioonil põhineva sildi alguses on juba v-täht.
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']"
Kuues samm – sildistamine veaparandus versioonid. Seda tehakse kasutades Maven koos vajaliku valikuga Eesmärk.