Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Ev post dê sazkirina otomasyona HotFix-ê di projeyên Maven de bi karanîna Teamcity vebêje.

Ji bo ku HotFix bikin, bi gelemperî gelek gavên destan têne kirin:

  1. Ji bo serbestberdana ku hûn dixwazin HotFix jê re derxînin brunchek çêbikin
  2. Di berdanê de xeletiyek rast bikin
  3. Di şaxê berdanê de guhertoya xeletiyê biguherînin
  4. Etîketa guhertoya rastkirina xeletiyê derxînin

Xalên 1,3,4 dikarin otomatîk bibin.

Beriya ku em derbasî mijarê bibin, ez dixwazim qala mijarek girîng û tevlihev bikim - versioning software. Hûn dikarin di vê dîmenê de bi kurtî Semver fam bikin. Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Hûn dikarin li ser lînkê bêtir bixwînin: 1.

Hemî mîhengên ku di vê postê de têne diyar kirin li ser bingeh in Semver и Pêşveçûna Bingeha Trunk.

Di Pêşkeftina Bingeha Trunk de, hûn hewce ne ku ji bo her berdanê şaxek xwe biafirînin. Hemî guheztin (serrastkirin) di hundurê vê berdanê de ji vê şaxê re têne pabend kirin.

Wekî beşek ji vê postê, em ê tiştên jêrîn otomatîk bikin:

  • CI ava kirin

  • Çêkirina serbestberdana nû

  • Çêkirina şaxek berdanê

  • Guhertina guhertoya bugfix

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Hewce:

Ka em li Teamcity projeya "Automation Maven Hotfix" biafirînin û li wir 4 peywiran biafirînin.

  • CI Build

  • Ji bo berdanê şaxek biafirînin

  • Maven rastkirina xeletiyê (guhertoya rastkirina xeletiyê biguhezîne))

  • Serbestberdana Maven (Afirandina berdanek nû)

Dîmena projeyê:

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Mîhengên Giştî

Di hemî karan de divê hûn qutîkê kontrol bikin "Avakirina paqij: Berî çêkirinê hemî pelên di pelrêça danûstendinê de jêbirin", ji ber ku bêyî vê qutîkê min xeletî girt.

Em yek VCS-ê diafirînin. Taybetmendiyên VCS bi sor têne dorpêç kirin.

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Bi gelemperî VCS nexşeya HTTPS bikar tînin. LI Taybetmendiya şaxê: ji bo temaşekirina hemî brunch û hemî etîketan hatî destnîşan kirin:

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

Pêdivî ye ku 4 Parametreyên Vesazkirinê biafirînin.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Qada nirxê li BRANCH_FOR_INCREMENT û TAG_FROM_VERSION divê vala bimîne.

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêdivî ye ku hûn mifteyek taybet barkirin/lê zêde bikin. Ji bilî CI Build hemî peywiran mifteyek taybetî hewce dike.

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Di her peywirê de, ji bilî CI Build, di beşa Taybetmendiyên Avakirinê de hûn hewce ne ku mifteyek taybet girêdin.

Mînak ji bo Maven berdan

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

CI Build **.

Di karekî de CI Build tenê yek gav testa mvn paqij

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Maven berdan

Di karekî de Maven berdan 2 gav. Gava yekem kontrolkirina wê brunch e mamoste. Ger brunch nebe mamoste, paşê peywir dikeve.

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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava duyemîn standard e mvn berdan: amade kirin bi vebijêrk - moda hevîrê

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Ji bo berdanê şaxek biafirînin

Ji bo ku hûn ji bo serbestberdanê çareseriyek germ çêbikin, hûn hewce ne ku şaxek çêbikin. Ya ku wezîfe dike ev e Ji bo berdanê şaxek biafirînin. 2 gavên wê hene.

Gava yekem kontrol dike ku brunch ne mamoste, û duyemîn kontrol dike ku guhertoya pelê ye pom.xml peyv tê de nebû 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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava duyemîn pilana pêwendiyê di pêşvebirinêConnection de ji HTTPS berbi GIT diguhezîne.

# Здесь получаем 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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Maven zêdekirina xeletiyê

Kar ji 6 beşan pêk tê. Ew dikaribû ji nû ve were çêkirin, lê ew hîn jî dixebite.

Gava yekem ev e ku hûn kontrol bikin ku brunch ne mamoste. Ger brunch mamoste peywir dikeve.

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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava duyemîn Maven di pelê pom.xml de guhertoya xeletiyê diguhezîne.

Armanc: Maven her tişt di yek rêzê de heye

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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Gava sêyemîn ev e ku agahdariya rewşa Git û yên din nîşan bide:

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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava çaremîn pilana girêdanê di pêşdebiranConnection de ji HTTPS berbi GIT diguhezîne.

Û guherandinan li şaxa ku di Teamcity de ji hêla guhêrbar %BRANCH_FOR_INCREMENT% ve hatî destnîşan kirin de dihêle

# Здесь получаем 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%

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava pêncemîn ji dosyayê wergirtin e pom.xml versiyon û wê saz dike Teamcity têgûherr TAG_FROM_VERSION. Têbînî ku guhertoya ji pelê pom.xml bêyî tîpa v li pêş. Û tag, li ser bingeha vê versiyonê, jixwe di destpêkê de tîpa v heye.

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

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Pêngava şeşemîn - nîşankirin bugfix versions. Ev bi kar tê kirin Maven bi vebijarka pêwîst di nav de armanc.

Dibe armancên:

-Dtag=%TAG_FROM_VERSION% scm:tag

Otomasyona HotFix di projeyên Maven de bi karanîna TeamCity

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster