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:

  1. Izveidojiet vēlās brokastis laidienam, kurā vēlaties ieviest HotFix
  2. Izlabojiet kļūdu izlaidumā
  3. Mainiet kļūdu labojuma versiju laidiena filiālē
  4. 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. HotFix automatizācija Maven projektos, izmantojot TeamCity

Vairāk varat lasīt saitē: 1.

Visi šajā ziņā aprakstītie iestatījumi ir balstīti uz Semvers и Uz stumbru balstīta attīstība.

Programmā Trunk-Based Development katram laidienam ir jāizveido savs atzars. Visas izmaiņas (labojumfaili) šajā laidienā attiecas uz šo atzaru.

Šīs ziņas ietvaros mēs automatizēsim šādas lietas:

  • CI uzbūve

  • Jauna laidiena izveide

  • Izlaiduma filiāles izveide

  • Kļūdu labojuma versijas maiņa

HotFix automatizācija Maven projektos, izmantojot TeamCity

Prasības:

Izveidosim projektu “Automation Maven Hotfix” Teamcity un izveidosim tajā 4 uzdevumus.

  • CI Build

  • Izveidojiet filiāli atbrīvošanai

  • Maven pieaugošais kļūdu labojums (mainīt kļūdu labojuma versiju)

  • Maven laidiens (jauna laidiena izveide)

Projekta ekrānuzņēmums:

HotFix automatizācija Maven projektos, izmantojot TeamCity

Vispārīgie iestatījumi

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ā.

HotFix automatizācija Maven projektos, izmantojot TeamCity

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.

HotFix automatizācija Maven projektos, izmantojot TeamCity

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.

HotFix automatizācija Maven projektos, izmantojot TeamCity

Katrā uzdevumā, izņemot CI Build, sadaļā Build Features ir jāpievieno privātā atslēga.

Piemērs priekš Maven atbrīvošana

HotFix automatizācija Maven projektos, izmantojot TeamCity

CI Build**.

Kādā uzdevumā CI Build tikai viens solis mvn tīrs tests

HotFix automatizācija Maven projektos, izmantojot TeamCity

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

Otrais solis ir standarta mvn izlaidums: sagatavo ar opciju -- pakešu režīms

HotFix automatizācija Maven projektos, izmantojot TeamCity

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

Otrais Maven solis ir mainīt kļūdu labojuma versiju failā pom.xml.

Mērķi: Maven ir viss vienā rindā

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

Trešais solis ir parādīt Git statusa informāciju un citus datus:

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

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%

HotFix automatizācija Maven projektos, izmantojot TeamCity

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

HotFix automatizācija Maven projektos, izmantojot TeamCity

Sestais solis – marķēšana kļūdu labojums versijas. Tas tiek darīts, izmantojot Maven ar nepieciešamo opciju Mērķis.

Opcija Mērķi:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFix automatizācija Maven projektos, izmantojot TeamCity

Avots: www.habr.com

Pievieno komentāru