Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Poso ena e tla hlalosa ho theha boiketsetso ba HotFix mererong ea Maven u sebelisa Teamcity.

Ho etsa HotFix, hangata ho etsoa mehato e mengata ea matsoho:

  1. Theha brunch bakeng sa tokollo eo u batlang ho e phatlalatsa HotFix ho
  2. Lokisa phoso e hlahang
  3. Fetola mofuta oa bugfix lekaleng la tokollo
  4. Hlakola tag ea mofuta oa bugfix

Lintlha tsa 1,3,4 li ka iketsetsa.

Pele re fetela sehloohong, ke rata ho ama taba ea bohlokoa le e rarahaneng - phetolelo software. U ka utloisisa Semver ka bokhutšoanyane setšoantšong sena sa skrini. Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

U ka bala haholoanyane ho sehokelo: 1.

Litlhophiso tsohle tse hlalositsoeng posong ena li thehiloe ho Semver и Ntshetsopele e Thehilweng ka kutu.

Ho nts'etsopele e thehiloeng ho Trunk, o hloka ho iketsetsa lekala bakeng sa tokollo ka 'ngoe. Liphetoho tsohle (hotfixes) ka har'a tokollo ena li ikemiselitse ho lekaleng lena.

E le karolo ea poso ena, re tla iketsetsa lintho tse latelang:

  • CI haha

  • Ho theha tokollo e ncha

  • Ho theha lekala la tokollo

  • Ho fetola mofuta oa bugfix

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Litlhokahalo:

  • Git repository bakeng sa ho boloka khoutu ea hau. Poso e tla sebelisa polokelo https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Seva ea Teamcity le moemeli. O ka phahamisa seva sa hau sa Teamcity sa lehae le moemeli o sebelisa qobella
  • Moo u nang le moemeli oa Teamcity, java, maven, git e tlameha ho kenngoa

Ha re theheng projeke ea "Automation Maven Hotfix" ho Teamcity mme re thehe mesebetsi e 4 moo.

  • CI Haha

  • Theha lekala bakeng sa tokollo

  • Maven increment bugfix (Fetola mofuta oa bugfix)

  • Ho lokolloa ha Maven (Ho theha tokollo e ncha)

Setšoantšo sa skrini sa morero:

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Litlhophiso tse akaretsang

Mesebetsing eohle o tlameha ho tšoaea lebokose "Mohaho o hloekileng: Hlakola lifaele tsohle bukeng ea ho tsoa pele ho kaho", hobane ntle le lebokose lena ke fumane liphoso.

Re theha VCS e le 'ngoe. Likarolo tsa VCS li pota-potiloe ka bofubelu.

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Ka tloaelo li-VCS li sebelisa morero oa HTTPS. IN Tlhaloso ea lekala: e bontšitsoe ho shebella li-brunch tsohle le li-tag tsohle:

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

Hoa hlokahala ho theha 4 Configuration Parameters.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Sebaka sa boleng ho BRANCH_FOR_INCREMENT le TAG_FROM_VERSION se tlameha ho sala se se na letho.

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

U hloka ho kenya/kenya senotlolo sa lekunutu. Mesebetsi eohle ntle le CI Build e hloka senotlolo sa lekunutu.

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mosebetsing o mong le o mong, ntle le CI Build, karolong ea Build Features o hloka ho hokahanya senotlolo sa poraefete.

Mohlala bakeng sa Maven tokollo

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

CI Haha **.

Mosebetsing CI Haha mohato o le mong feela mvn hloekileng teko

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Maven tokollo

Mosebetsing Maven tokollo 2 mehato. Mohato oa pele ke ho hlahloba hore na brunch ke mong'a. Haeba brunch ha e joalo mong'a, joale mosebetsi oa oa.

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa bobeli ke maemo mvn tokollo: lokisetsa ka kgetho --batch-mokhoa

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Theha lekala bakeng sa tokollo

Ho theha hotfix bakeng sa tokollo o hloka ho theha lekala. Sena ke seo mosebetsi o se etsang Theha lekala bakeng sa tokollo. O na le mehato e 2.

Mohato oa pele o hlahloba hore brunch ha e joalo mong'a, 'me ea bobeli e hlahloba hore na phetolelo e teng faeleng pom e ne e se na lentsoe LIEKETSENG LITLHAKU

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa bobeli o fetola sekema sa khokahano ho developerConnection ho tloha HTTPS ho ea ho 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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Maven increment bugfix

Mosebetsi o na le likarolo tse 6. E ka be e ile ea fetoloa, empa e ntse e sebetsa.

Mohato oa pele ke ho hlahloba hore na brunch ha e joalo mong'a. Haeba brunch mong'a mosebetsi oa oa.

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa bobeli oa Maven ke ho fetola mofuta oa bugfix faeleng ea pom.xml.

Lipakane: Maven e na le tsohle moleng o le mong

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa boraro ke ho bonts'a tlhahisoleseling ea boemo ba Git le tse ling:

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa bone o fetola moralo oa khokahano ho developerConnection ho tloha HTTPS ho ea ho GIT.

'Me e sutumelletsa liphetoho lekaleng le boletsoeng ho Teamcity ka %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%

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa bohlano ke ho tsoa faeleng pom phetolelo le kenya eona ka Teamcity feto-fetoha TAG_FROM_VERSION. Hlokomela hore phetolelo e tsoang faeleng pom ntle le tlhaku v ka pele. 'Me tag, e thehiloeng phetolelong ena, e se e ntse e e-na le lengolo la v qalong.

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

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Mohato oa botšelela - ho tšoaea bugfix liphetolelo. Sena se etsoa ho sebelisoa Maven ka khetho e hlokahalang ho pakane ea.

Khetho Lipakane Tsa:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automation ea HotFix ho merero ea Maven e sebelisang TeamCity

Source: www.habr.com

Eketsa ka tlhaloso