Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Iyi posvo inotsanangura kumisikidza HotFix otomatiki muMaven mapurojekiti uchishandisa Teamcity.

Kuita HotFix, akawanda emaoko matanho anowanzo kuitwa:

  1. Gadzira brunch yekuburitsa iwe yaunoda kuburitsa HotFix kwairi
  2. Gadzirisa bug mukuburitswa
  3. Chinja iyo bugfix vhezheni mubazi rekuburitsa
  4. Bvisa bugfix vhezheni tag

Mapoinzi 1,3,4 anogona kuve otomatiki.

Tisati taenda kunyaya, ndinoda kubata pane yakakosha uye yakaoma musoro - shanduro software. Iwe unogona kunzwisisa muchidimbu Semver mune ino skrini. Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Unogona kuverenga zvakawanda pane iyi link: 1.

Maseting ese anotsanangurwa mune ino positi anobva pane Semver и Hunde-Based Development.

MuTrunk-Based Development, iwe unofanirwa kugadzira yako yega bazi kune yega kuburitswa. Yese shanduko (hotfixes) mukati mekuburitswa iyi inopihwa kubazi iri.

Sechikamu cheichi positi, isu tichaita otomatiki zvinhu zvinotevera:

  • CI kugadzira

  • Kugadzira kuburitswa kutsva

  • Kugadzira bazi rekuburitsa

  • Kuchinja iyo bugfix vhezheni

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Zvinotarisirwa:

Ngatigadzirei "Automation Maven Hotfix" chirongwa muTeamcity uye tigadzire mabasa mana ipapo.

  • CI Vaka

  • Gadzira bazi rekusunungurwa

  • Maven increment bugfix (Shandura bugfix vhezheni)

  • Maven kuburitswa (Kugadzira kuburitswa kutsva)

Project screenshot:

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

General settings

Mumabasa ese unofanira kutarisa bhokisi "Yakachena kuvaka: Delete mafaera ese mucheki dhairekitori pamberi pekuvaka“, nekuti pasina iyi cheki bhokisi ndine zvikanganiso.

Isu tinogadzira VCS imwe chete. VCS zvinhu zvakatenderedzwa mutsvuku.

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Kazhinji VCSs inoshandisa HTTPS chirongwa. IN Madiresi ebazi: inoratidzwa kutarisa mabrunches ese nema tag ese:

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

Izvo zvinodikanwa kugadzira 4 Configuration Parameters.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Nhamba yeukoshi muBRANCH_FOR_INCREMENT neTAG_FROM_VERSION inofanira kusiiwa isina chinhu.

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Iwe unofanirwa kuisa / kuwedzera kiyi yakavanzika. Mabasa ese kunze kweCI Vaka anoda kiyi yakavanzika.

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Mune rimwe nerimwe basa, kunze kweCI Vaka, muBuild Features chikamu unoda kubatanidza kiyi yakavanzika.

Muenzaniso we Maven release

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

CI Vaka **.

Mune basa CI Vaka nhanho imwe chete mvn yakachena bvunzo

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Maven release

Mune basa Maven release 2 matanho. Nhanho yekutanga ndeyekutarisa kuti brunch iri tenzi. Kana brunch isiri tenzi, ipapo basa rinowira pasi.

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

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Danho rechipiri ndiro mwero mvn kusunungurwa:gadzirira nesarudzo --batch-modhi

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Gadzira bazi rekusunungurwa

Kugadzira hotfix yekusunungurwa iwe unofanirwa kugadzira bazi. Izvi ndizvo zvinoita taska Gadzira bazi rekusunungurwa. Ane nhanho mbiri.

Nhanho yekutanga inotarisa kuti brunch haisi tenzi, uye chechipiri chinotarisa kuti shanduro iri mufaira pom.xml yakanga isina shoko 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

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Nhanho yechipiri inoshandura chirongwa chekubatanidza mukuvandudzaConnection kubva kuHTTPS kuenda kuGIT.

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

Maven increment bugfix

Basa racho rine zvikamu zvitanhatu. Inogona kunge yakagadziridzwa, asi ichiri kushanda.

Nhanho yekutanga ndeyekutarisa kuti brunch haisi tenzi. Kana brunch tenzi basa rinowira pasi.

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 yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Danho rechipiri reMaven kushandura shanduro yebugfix mupom.xml faira.

Zvinangwa: Maven ane zvese mumutsara mumwe

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

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Nhanho yechitatu ndeye kuratidza ruzivo rweGit mamiriro uye mamwe:

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 yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Nhanho yechina inoshandura chirongwa chekubatanidza mukuvandudzaConnection kubva kuHTTPS kuenda kuGIT.

Uye inosundira shanduko kubazi rakatsanangurwa muTeamcity ne %BRANCH_FOR_INCREMENT% mutsauko

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

Nhanho yechishanu iri kutora kubva mufaira pom.xml vhezheni woiisa mukati Teamcity variable TAG_FROM_VERSION. Ziva kuti shanduro kubva mufaira pom.xml pasina vara v pamberi. Uye iyo tag, yakavakirwa pane iyi vhezheni, yatove nebhii v pakutanga.

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 yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Nhanho yechitanhatu - kutara bugfix shanduro. Izvi zvinoitwa kushandisa Maven neinodiwa sarudzo mukati chinangwa.

Sarudzo zvinangwa:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automation yeHotFix mumapurojekiti eMaven uchishandisa TeamCity

Source: www.habr.com

Voeg