Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Ин паём насб кардани автоматизатсияи HotFix дар лоиҳаҳои Maven бо истифода аз Teamcity тасвир хоҳад шуд.

Барои иҷро кардани HotFix, бисёр қадамҳои дастӣ одатан иҷро мешаванд:

  1. Барои нашре, ки мехоҳед HotFix-ро паҳн кунед, brunch эҷод кунед
  2. Ислоҳ хатоги дар нашр
  3. Тағир додани версияи хатогиҳо дар филиали нашр
  4. Теги версияи ислоҳи хатогиҳоро иҷро кунед

Нуқтаҳои 1,3,4-ро автоматӣ кардан мумкин аст.

Пеш аз он ки мо ба мавзӯъ гузарем, ман мехоҳам ба як мавзӯи муҳим ва мураккаб дахл кунам - нусхабардорӣ нармафзор. Шумо метавонед Semver-ро дар ин скриншот ба таври мухтасар фаҳмед. Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Батафсил маълумотни қуйидаги ҳаволада ўқишингиз мумкин: 1.

Ҳама танзимоти дар ин мақола тавсифшуда ба он асос ёфтаанд Семвер и Рушди дар асоси танаи.

Дар Рушди Trunk-Based, шумо бояд филиали худро барои ҳар як нашр эҷод кунед. Ҳама тағиротҳо (islahs) дар ин нашрия ба ин филиал содир карда мешаванд.

Ҳамчун як қисми ин паём, мо корҳои зеринро автоматӣ хоҳем кард:

  • Сохтани CI

  • Эҷоди нашри нав

  • Эҷоди филиали озод

  • Тағир додани версияи хатогиҳо

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Талабот:

  • Анбори Git барои нигоҳ доштани рамзи шумо. Пост аз анбор истифода хоҳад кард https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Сервер ва агенти Teamcity. Шумо метавонед бо истифода аз сервер ва агенти маҳаллии Teamcity худро баланд бардоред докер-композитор
  • Дар ҷое, ки шумо агенти Teamcity доред, java, maven, git бояд насб карда шаванд

Биёед дар Teamcity лоиҳаи "Automation Maven Hotfix" -ро эҷод кунем ва дар он ҷо 4 вазифа эҷод кунем.

  • CI Build

  • Барои озод кардани филиал эҷод кунед

  • ислоҳи ислоҳи Maven (Тағйир додани версияи хатогиҳо))

  • Нашри Maven (Сохтани нашри нав)

Скриншот лоиҳа:

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Танзимоти умумӣ

Дар ҳама вазифаҳо шумо бояд қуттии "Сохтани тоза: Пеш аз сохтан ҳама файлҳоро дар феҳристи касса нест кунед", зеро бе ин қуттии қайд ман хатогиҳо гирифтам.

Мо VCS ягона эҷод мекунем. Хусусиятҳои VCS бо ранги сурх доир карда шудаанд.

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Одатан VCS-ҳо схемаи HTTPS-ро истифода мебаранд. ДАР Мушаххасоти филиал: нишон дода шудааст, ки ҳама хӯрокхӯрӣ ва ҳама барчаспҳоро тамошо кунед:

+:refs/heads/*
+:refs/tags/*

Барои сохтани 4 Параметрҳои конфигуратсия зарур аст.

  • БРАНЧ_БАРОИ_ЗИЁД
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Майдони арзиш дар BRANCH_FOR_INCREMENT ва TAG_FROM_VERSION бояд холӣ бошад.

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Шумо бояд калиди хусусиро бор кунед/илова кунед. Ҳама вазифаҳо ба истиснои CI Build калиди хусусиро талаб мекунанд.

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Дар ҳар як вазифа, ба истиснои CI Build, дар бахши Сохтани Хусусиятҳо шумо бояд калиди хусусиро пайваст кунед.

Мисол барои озод кардани Maven

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

CI Build**.

Дар як вазифа CI Build танҳо як қадам озмоиши mvn тоза

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

озод кардани Maven

Дар як вазифа озод кардани Maven 2 қадам. Қадами аввал ин тафтиш кардани хӯроки нисфирӯзӣ мебошад усто. Агар субҳона нест усто, пас вазифа меафтад.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'Branch is not master';
  echo 'Aborting';
  exit 1;
fi

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами дуюм стандарт аст нашри mvn: тайёр кунед бо вариант --режими дастаҷамъӣ

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Барои озод кардани филиал эҷод кунед

Барои эҷод кардани ислоҳот барои нашр шумо бояд филиал эҷод кунед. Ин аст он чизе ки taska мекунад Барои озод кардани филиал эҷод кунед. Вай 2 қадам дорад.

Қадами аввал тафтиш мекунад, ки хӯроки нисфирӯзӣ нест усто, ва дуюм тафтиш мекунад, ки версия дар файл аст pom.xml калимаро дар бар нагирифт СУРАТ

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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами дуюм схемаи пайвастшавиро дар developerConnection аз HTTPS ба 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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Ислоҳи хатогии афзоиши Maven

Вазифа аз 6 қисм иборат аст. Онро метавон дубора ислоҳ кард, аммо он то ҳол кор мекунад.

Қадами аввал ин аст, ки тафтиш кунед, ки хӯрокхӯрӣ нест усто. Агар субҳона усто вазифа меафтад.

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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами дуюми Maven ин тағир додани версияи хатогиҳо дар файли pom.xml мебошад.

Мақсадҳо: Maven ҳама чизро дар як сатр дорад

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

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами сеюм ин намоиш додани маълумоти ҳолати Git ва дигарон аст:

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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами чорум схемаи пайвастшавиро дар developerConnection аз HTTPS ба GIT иваз мекунад.

Ва тағиротҳоро ба шохаи дар Teamcity муайяншуда тавассути тағирёбандаи %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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами панҷум гирифтани файл аз файл аст pom.xml версия ва насби онро дар Teamcity тағйирёбанда TAG_FROM_VERSION. Дар хотир доред, ки версияи файл pom.xml бе харфи v дар пеш. Ва тег, ки бар асоси ин версия, аллакай дар ибтидо ҳарфи v дорад.

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 дар лоиҳаҳои Maven бо истифода аз TeamCity

Қадами шашум - нишонгузорӣ bugfix версияҳо. Ин бо истифода аз он анҷом дода мешавад Maven бо варианти зарурӣ дар Мақсад.

Интихоб Ҳадафҳои:

-Dtag=%TAG_FROM_VERSION% scm:tag

Автоматикунонии HotFix дар лоиҳаҳои Maven бо истифода аз TeamCity

Манбаъ: will.com

Илова Эзоҳ