A HotFix automatizálása a Maven projektekben TeamCity segítségével
Ez a bejegyzés leírja a HotFix automatizálás beállítását a Maven projektekben a Teamcity használatával.
A HotFix végrehajtásához általában sok manuális lépést kell végrehajtani:
Hozzon létre egy villásreggelit ahhoz a kiadáshoz, amelyen ki szeretné helyezni a HotFixet
Hiba javítása a kiadásban
Módosítsa a hibajavítás verzióját a kiadási ágban
A hibajavítás verziócímkéjének közzététele
Az 1,3,4, XNUMX, XNUMX pontok automatizálhatók.
Mielőtt rátérnénk a témára, szeretnék egy fontos és összetett témát érinteni - verziószámítás szoftver. Röviden megértheti Semvert ezen a képernyőképen.
Teamcity szerver és ügynök. A helyi Teamcity szervert és ügynököt a használatával emelheti fel dokkoló-levélírás
Ahol Teamcity ügynök van, telepíteni kell a javát, a maven-t, a git-et
Hozzuk létre az „Automation Maven Hotfix” projektet a Teamcityben, és hozzunk létre 4 feladatot.
CI Build
Hozzon létre ágat a kiadáshoz
Maven növekményes hibajavítás (A hibajavítás verziójának módosítása)
Maven kiadás (Új kiadás létrehozása)
A projekt képernyőképe:
Általános beállítások
Minden feladatnál be kell jelölni a "Tiszta build: Törölje az összes fájlt a fizetési könyvtárban a build előtt", mert e jelölőnégyzet nélkül hibákat kaptam.
Egyetlen VCS-t hozunk létre. A VCS jellemzői pirossal vannak bekarikázva.
A VCS-k általában a HTTPS-sémát használják. BAN BEN Fiók specifikációja: az összes villásreggelit és az összes címkét meg kell nézni:
+:refs/heads/*
+:refs/tags/*
4 konfigurációs paramétert kell létrehozni.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
A BRANCH_FOR_INCREMENT és a TAG_FROM_VERSION értékmezőjét üresen kell hagyni.
Fel kell töltenie/hozzáadnia egy privát kulcsot. A CI Build kivételével minden feladathoz privát kulcs szükséges.
A CI Build kivételével minden feladatnál a Build Features szakaszban privát kulcsot kell csatlakoztatnia.
Példa erre Maven kiadása
CI Build**.
Egy feladatban CI Build csak egy lépés mvn tiszta teszt
Maven kiadása
Egy feladatban Maven kiadása 2 lépés. Az első lépés annak ellenőrzése, hogy van-e villásreggeli mester. Ha a villásreggeli nem az mester, akkor esik a feladat.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
A második lépés szabványos mvn release:prepare opcióval -- kötegelt mód
Hozzon létre ágat a kiadáshoz
Egy kiadáshoz gyorsjavítás létrehozásához létre kell hoznia egy ágat. Ezt csinálja a feladat Hozzon létre ágat a kiadáshoz. 2 lépése van.
Az első lépésben ellenőrzi, hogy a villásreggeli nem az mester, a második pedig azt ellenőrzi, hogy a verzió szerepel-e a fájlban pom.xml nem tartalmazta a szót PILLANATKÉP
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
A második lépés a developerConnection kapcsolati sémáját HTTPS-ről GIT-re módosítja.
# Здесь получаем 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 növekményes hibajavítás
A feladat 6 részből áll. Újra lehetett volna alakítani, de még mindig működik.
Az első lépés annak ellenőrzése, hogy a villásreggeli nem az mester. Ha villásreggeli mester esik a feladat.
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']"
A Maven második lépése a hibajavítás verziójának módosítása a pom.xml fájlban.
A negyedik lépés a developerConnection kapcsolati sémáját HTTPS-ről GIT-re módosítja.
És elküldi a Teamcity-ben a %BRANCH_FOR_INCREMENT% változó által meghatározott ágra a változtatásokat
# Здесь получаем 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%
Az ötödik lépés a fájlból való beszerzés pom.xml verziót, és telepíti Teamcity változó TAG_FROM_VERSION. Vegye figyelembe, hogy a fájl verziója pom.xml előtt v betű nélkül. A címkén pedig ezen verzió alapján már a v betű van az elején.
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']"
Hatodik lépés - címkézés hibajavítás verziók. Ez segítségével történik Maven a szükséges opcióval Cél.