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:

  1. HotFix-ni chiqarmoqchi bo'lgan versiya uchun brunch yarating
  2. Chiqarishdagi xatolikni tuzating
  3. Chiqarish bo'limida xato tuzatish versiyasini o'zgartiring
  4. 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. TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Batafsil havolada o'qishingiz mumkin: 1.

Ushbu postda tasvirlangan barcha sozlamalarga asoslanadi Semver и Magistralga asoslangan rivojlanish.

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:

  • CI qurish

  • Yangi nashr yaratilmoqda

  • Chiqarish filialini yaratish

  • Xatolarni tuzatish versiyasini o'zgartirish

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Talablar:

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:

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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.

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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.

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Shaxsiy kalitni yuklashingiz/qo'shishingiz kerak. CI Build-dan tashqari barcha vazifalar shaxsiy kalitni talab qiladi.

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Har bir vazifada, CI Build-dan tashqari, Qurilish xususiyatlari bo'limida siz shaxsiy kalitni ulashingiz kerak.

uchun misol Maven chiqarilishi

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

CI Build**.

Vazifada CI Build faqat bir qadam mvn toza test

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Ikkinchi bosqich standart hisoblanadi mvn nashri: tayyorlang variant bilan --to'plam rejimi

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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']"

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Mavenning ikkinchi bosqichi pom.xml faylidagi xato tuzatish versiyasini o'zgartirishdir.

maqsadlari: Maven bir qatorda hamma narsaga ega

build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Uchinchi qadam - Git holati ma'lumotlarini va boshqalarni ko'rsatish:

echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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%

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

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']"

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Oltinchi bosqich - teglash bugfix versiyalari. Bu yordamida amalga oshiriladi Maven ichida kerakli variant bilan maqsad.

Variant Gollar:

-Dtag=%TAG_FROM_VERSION% scm:tag

TeamCity yordamida Maven loyihalarida HotFix-ni avtomatlashtirish

Manba: www.habr.com

a Izoh qo'shish