ProHoster > Blog > Ma'muriyat > TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish
TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish
Ushbu post Teamcity-dan foydalangan holda Maven loyihalarida HotFix avtomatizatsiyasini o'rnatishni tasvirlaydi.
HotFixni amalga oshirish uchun odatda qo'lda ko'plab qadamlar bajariladi:
HotFix-ni chiqarmoqchi bo'lgan versiya uchun brunch yarating
Chiqarishdagi xatolikni tuzating
Chiqarish bo'limida xato tuzatish versiyasini o'zgartiring
Xatolarni tuzatish versiyasi tegini chiqaring
1,3,4-bandlarni avtomatlashtirish mumkin.
Mavzuga o'tishdan oldin men muhim va murakkab mavzuga to'xtalib o'tmoqchiman - versiyalashtirish dasturiy ta'minot. Ushbu skrinshotda Semverni qisqacha tushunishingiz mumkin.
Trunk-Based Development-da siz har bir nashr uchun o'z filialingizni yaratishingiz kerak. Ushbu versiyadagi barcha o'zgartirishlar (tuzatishlar) ushbu filialga kiritilgan.
Ushbu postning bir qismi sifatida biz quyidagi narsalarni avtomatlashtiramiz:
Teamcity serveri va agenti. Siz mahalliy Teamcity serveringiz va agentingiz yordamida yuklashingiz mumkin docker-compose
Teamcity agentingiz bo'lgan joyda java, maven, git o'rnatilgan bo'lishi kerak
Teamcity-da "Automation Maven Hotfix" loyihasini yaratamiz va u erda 4 ta vazifa yaratamiz.
CI Build
Chiqarish uchun filial yarating
Maven qo'shimcha xato tuzatish (xatolarni tuzatish versiyasini o'zgartirish))
Maven relizi (yangi nashrni yaratish)
Loyiha skrinshoti:
Umumiy sozlamalar
Barcha vazifalarda katakchani belgilashingiz kerak "Toza tuzilish: Qurilishdan oldin hisob-kitob katalogidagi barcha fayllarni o'chirib tashlang", chunki bu katakchasiz men xatolarga duch keldim.
Biz yagona VCS yaratamiz. VCS xususiyatlari qizil rang bilan doira ichida joylashgan.
Odatda VCS HTTPS sxemasidan foydalanadi. IN Filial spetsifikatsiyasi: barcha brunchlar va barcha teglarni tomosha qilish uchun ko'rsatilgan:
+:refs/heads/*
+:refs/tags/*
4 ta konfiguratsiya parametrlarini yaratish kerak.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
BRANCH_FOR_INCREMENT va TAG_FROM_VERSIONdagi qiymat maydoni boʻsh qolishi kerak.
Shaxsiy kalitni yuklashingiz/qo'shishingiz kerak. CI Build-dan tashqari barcha vazifalar shaxsiy kalitni talab qiladi.
Har bir vazifada, CI Build-dan tashqari, Qurilish xususiyatlari bo'limida siz shaxsiy kalitni ulashingiz kerak.
uchun misol Maven chiqarilishi
CI Build**.
Vazifada CI Build faqat bir qadam mvn toza test
Maven chiqarilishi
Vazifada Maven chiqarilishi 2 qadam. Birinchi qadam - nonushta ekanligini tekshirish usta. Agar nonushta bo'lmasa usta, keyin vazifa tushadi.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Ikkinchi bosqich standart hisoblanadi mvn nashri: tayyorlang variant bilan --to'plam rejimi
Chiqarish uchun filial yarating
Reliz uchun tuzatish yaratish uchun siz filial yaratishingiz kerak. Bu vazifani bajaradi Chiqarish uchun filial yarating. Uning 2 qadami bor.
Birinchi qadam nonushta emasligini tekshiradi usta, ikkinchisi esa versiya faylda ekanligini tekshiradi pom.xml so'zni o'z ichiga olmagan SNAPSHOT
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
Ikkinchi qadam developerConnection-dagi ulanish sxemasini HTTPS-dan GIT-ga o'zgartiradi.
# Здесь получаем 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 qo'shimcha xato tuzatish
Vazifa 6 qismdan iborat. Uni qayta tiklash mumkin edi, lekin u hali ham ishlaydi.
Birinchi qadam - nonushta emasligini tekshirish usta. Brunch bo'lsa usta vazifa tushadi.
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']"
Mavenning ikkinchi bosqichi pom.xml faylidagi xato tuzatish versiyasini o'zgartirishdir.
To'rtinchi qadam developerConnection-dagi ulanish sxemasini HTTPS-dan GIT-ga o'zgartiradi.
Va %BRANCH_FOR_INCREMENT% o‘zgaruvchisi bo‘yicha Teamcity-da ko‘rsatilgan filialga o‘zgartirishlar kiritadi.
# Здесь получаем 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%
Beshinchi qadam - fayldan olish pom.xml versiyasi va uni o'rnatadi Teamcity o'zgaruvchan TAG_FROM_VERSION. Fayldan versiya ekanligini unutmang pom.xml oldida v harfisiz. Va ushbu versiyaga asoslangan teg boshida allaqachon v harfiga ega.
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']"
Oltinchi bosqich - teglash bugfix versiyalari. Bu yordamida amalga oshiriladi Maven ichida kerakli variant bilan maqsad.