ʻO ka automate o HotFix i nā papahana Maven me TeamCity

E wehewehe kēia pou i ka hoʻonohonoho ʻana i ka automation HotFix i nā papahana Maven me ka hoʻohana ʻana i Teamcity.

No ka hana ʻana i HotFix, hana pinepine ʻia nā hana manual:

  1. E hana i kahi brunch no ka hoʻokuʻu ʻana āu e makemake ai e ʻōwili iā HotFix
  2. Hoʻoponopono i kahi kuhi i ka hoʻokuʻu ʻana
  3. E hoʻololi i ka mana bugfix ma ka lālā hoʻokuʻu
  4. E wehe i ka hōʻailona hōʻailona bugfix

Hiki ke hoʻohana ʻia nā helu 1,3,4.

Ma mua o ko mākou neʻe ʻana i ke kumuhana, makemake wau e hoʻopā i kahi kumuhana koʻikoʻi a paʻakikī - hoʻololi ʻana lako polokalamu. Hiki iā ʻoe ke hoʻomaopopo pōkole iā Semver ma kēia kiʻi. ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hiki iā ʻoe ke heluhelu hou aku ma ka loulou: 1.

Hoʻokumu ʻia nā hoʻonohonoho āpau i wehewehe ʻia ma kēia pou Semver и Hoʻomohala Kūʻai Kūʻai.

Ma Trunk-Based Development, pono ʻoe e hana i kāu lālā ponoʻī no kēlā me kēia hoʻokuʻu. ʻO nā hoʻololi a pau (nā hoʻoponopono wela) i loko o kēia hoʻokuʻu ʻia i kēia lālā.

Ma ke ʻāpana o kēia pou, e hoʻokaʻawale mākou i kēia mau mea:

  • CI kūkulu

  • Ke hana nei i kahi hoʻokuʻu hou

  • Ke hana ʻana i kahi lālā hoʻokuʻu

  • Ke hoʻololi nei i ka mana bugfix

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Manaʻo:

  • Git waihona no ka mālama ʻana i kāu code. E hoʻohana ka pou i ka waihona https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Mea kikowaena Teamcity a me ka luna. Hiki iā ʻoe ke hoʻokiʻekiʻe i kāu kikowaena Teamcity kūloko a me ka mea hoʻohana pā · pili
  • Ma kahi āu e hoʻokomo ai i Teamcity agent, java, maven, git

E hana kākou i ka papahana "Automation Maven Hotfix" ma Teamcity a hana i 4 mau hana ma laila.

  • CI Kukulu

  • E hana i lālā no ka hoʻokuʻu ʻana

  • Maven increment bugfix (Hoʻololi i ka mana bugfix))

  • Hoʻokuʻu ʻia ʻo Maven (Ke hana ʻana i kahi hoʻokuʻu hou)

Kiʻi kiʻi papahana:

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Nā kūlana nui

I nā hana a pau, pono ʻoe e nānā i ka pahu "Hana maʻemaʻe: Holoi i nā faila a pau i ka papa kuhikuhi ma mua o ke kūkulu ʻana", no ka mea, me ka ʻole o kēia pahu pahu i loaʻa iaʻu nā hewa.

Hana mākou i hoʻokahi VCS. Hoʻopuni ʻia nā hiʻohiʻona VCS i ka ʻulaʻula.

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hoʻohana maʻamau nā VCS i ka hoʻolālā HTTPS. IN ʻŌlelo kikoʻī lālā: hōʻike ʻia e nānā i nā brunches a me nā hōʻailona āpau:

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

Pono e hana i 4 Configuration Parameters.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Pono e waiho hakahaka ka kahua waiwai ma BRANCH_FOR_INCREMENT a me TAG_FROM_VERSION.

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Pono ʻoe e hoʻouka/hoʻohui i kahi kī pilikino. Pono nā hana a pau koe ʻo CI Build i kahi kī pilikino.

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Ma kēlā me kēia hana, koe wale ʻo CI Build, ma ka ʻāpana Build Features pono ʻoe e hoʻopili i kahi kī pilikino.

Laʻana no Hoʻokuʻu ʻo Maven

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

CI Build**.

Ma kahi hana CI Kukulu hoʻokahi kapuaʻi mvn hoao maemae

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hoʻokuʻu ʻo Maven

Ma kahi hana Hoʻokuʻu ʻo Maven 2 kapuai. ʻO ka hana mua e nānā i kēlā brunch haku. Inā ʻaʻole ka brunch haku, a laila hāʻule ka hana.

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

ʻO ka lua o ka hana maʻamau mvn hookuu: hoomakaukau me ke koho --ʻano-ʻano

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

E hana i lālā no ka hoʻokuʻu ʻana

No ka hana ʻana i kahi hotfix no ka hoʻokuʻu ʻana, pono ʻoe e hana i kahi lālā. ʻO kēia ka hana a ka taska E hana i lālā no ka hoʻokuʻu ʻana. He 2 kapuaʻi kāna.

ʻO ka hana mua e nānā i ka brunch ʻaʻole haku, a ʻo ka lua e nānā i ka mana i loko o ka faila pom.xml ʻaʻole i loaʻa ka ʻōlelo KAHIKI

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hoʻololi ka hana ʻelua i ka hoʻolālā pili i ka developerConnection mai HTTPS a i 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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hoʻonui ʻia ka bugfix maven

ʻO ka hana he 6 mau ʻāpana. Hiki paha ke hoʻololi hou ʻia, akā hana mau.

ʻO ka hana mua e nānā i ka brunch ʻaʻole haku. Inā brunch haku hāʻule ka hana.

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Ke hoʻololi nei ka lua Maven i ka mana bugfix i ka faila pom.xml.

pahu hopu. Loaʻa iā Maven nā mea a pau i ka laina hoʻokahi

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

ʻO ke kolu o ka hana e hōʻike i ka ʻike kūlana Git a me nā mea ʻē aʻe:

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Hoʻololi ka ʻehā i ka hoʻolālā pili i ka developerConnection mai HTTPS a i GIT.

A koi aku i nā hoʻololi i ka lālā i kuhikuhi ʻia ma Teamcity e ka %BRANCH_FOR_INCREMENT% hoʻololi.

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

ʻO ka pae ʻelima ka loaʻa ʻana mai ka faila pom.xml version a hoʻokomo i loko huikauhale loli TAG_FROM_VERSION. E hoʻomaopopo i ka mana mai ka faila pom.xml me ka hua ole v mamua. A ʻo ka tag, e pili ana i kēia mana, ua loaʻa ka leka v i ka hoʻomaka.

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

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

ʻEono ʻanuʻu - kau inoa bugfix nā manaʻo. Hana ʻia kēia me ka hoʻohana ʻana Maven me ke koho i makemakeia ma Holomua.

Koho pahu hopu:

-Dtag=%TAG_FROM_VERSION% scm:tag

ʻO ka automate o HotFix i nā papahana Maven me TeamCity

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka