HotFix automatizācija Maven projektos, izmantojot TeamCity
Šajā ziņojumā tiks aprakstīta HotFix automatizācijas iestatīšana Maven projektos, izmantojot Teamcity.
Lai veiktu HotFix, parasti tiek veiktas daudzas manuālas darbības:
Izveidojiet vēlās brokastis laidienam, kurā vēlaties ieviest HotFix
Izlabojiet kļūdu izlaidumā
Mainiet kļūdu labojuma versiju laidiena filiālē
Izlaist kļūdu labojuma versijas tagu
Punktus 1,3,4 var automatizēt.
Pirms pārejam pie tēmas, es vēlētos pieskarties svarīgai un sarežģītai tēmai - versiju veidošana programmatūra. Šajā ekrānuzņēmumā varat īsi saprast Semveru.
Visos uzdevumos ir jāatzīmē izvēles rūtiņa "Tīra būvēšana: pirms būvēšanas izdzēsiet visus norēķinu direktorijā esošos failus", jo bez šīs izvēles rūtiņas es saņēmu kļūdas.
Mēs izveidojam vienotu VCS. VCS funkcijas ir apvilktas sarkanā krāsā.
Parasti VCS izmanto HTTPS shēmu. IN Filiāles specifikācija: ieteikts skatīties visus vēlās brokastis un visas atzīmes:
+:refs/heads/*
+:refs/tags/*
Nepieciešams izveidot 4 konfigurācijas parametrus.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
Vērtības lauks versijās BRANCH_FOR_INCREMENT un TAG_FROM_VERSION ir jāatstāj tukšs.
Jums ir jāaugšupielādē/jāpievieno privātā atslēga. Visiem uzdevumiem, izņemot CI Build, ir nepieciešama privātā atslēga.
Katrā uzdevumā, izņemot CI Build, sadaļā Build Features ir jāpievieno privātā atslēga.
Piemērs priekš Maven atbrīvošana
CI Build**.
Kādā uzdevumā CI Build tikai viens solis mvn tīrs tests
Maven atbrīvošana
Kādā uzdevumā Maven atbrīvošana 2 soļi. Pirmais solis ir pārbaudīt, vai vēlās brokastis ir meistars. Ja vēlās brokastis nav meistars, tad uzdevums atkrīt.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Otrais solis ir standarta mvn izlaidums: sagatavo ar opciju -- pakešu režīms
Izveidojiet filiāli atbrīvošanai
Lai izveidotu laidiena labojumfailu, ir jāizveido filiāle. Tas ir tas, ko dara uzdevums Izveidojiet filiāli atbrīvošanai. Viņai ir 2 pakāpieni.
Pirmais solis pārbauda, vai vēlās brokastis nav meistars, bet otrā pārbauda, vai versija ir failā pom.xml nesaturēja vārdu Momentuzņēmums
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
Otrajā darbībā developerConnection savienojuma shēma tiek mainīta no HTTPS uz 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 pieauguma kļūdu labojums
Uzdevums sastāv no 6 daļām. To varēja pārveidot, bet tas joprojām darbojas.
Pirmais solis ir pārbaudīt, vai vēlās brokastis nav meistars. Ja vēlās brokastis meistars uzdevums krīt.
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']"
Otrais Maven solis ir mainīt kļūdu labojuma versiju failā pom.xml.
Ceturtais solis maina savienojuma shēmu developerConnection no HTTPS uz GIT.
Un nospiež izmaiņas filiālē, kas norādītas Teamcity ar mainīgo %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%
Piektais solis ir iegūšana no faila pom.xml versiju un instalē to Teamcity mainīgs TAG_FROM_VERSION. Ņemiet vērā, ka versija no faila pom.xml bez burta v priekšā. Un tagā, pamatojoties uz šo versiju, jau ir burts v sākumā.
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']"
Sestais solis – marķēšana kļūdu labojums versijas. Tas tiek darīts, izmantojot Maven ar nepieciešamo opciju Mērķis.