Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Ky postim do të përshkruajë vendosjen e automatizimit HotFix në projektet Maven duke përdorur Teamcity.

Për të bërë HotFix, zakonisht bëhen shumë hapa manualë:

  1. Krijo një brunch për versionin ku dëshiron të lëshosh HotFix
  2. Rregulloni një defekt në lëshim
  3. Ndryshoni versionin e korrigjimit të gabimeve në degën e lëshimit
  4. Hap etiketën e versionit të korrigjimit të gabimeve

Pikat 1,3,4 mund të automatizohen.

Para se të kalojmë në temë, do të doja të prekja një temë të rëndësishme dhe komplekse - versionimi software. Ju mund ta kuptoni shkurtimisht Semver në këtë pamje të ekranit. Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Më shumë mund të lexoni në linkun: 1.

Të gjitha cilësimet e përshkruara në këtë postim bazohen në Semver и Zhvillimi i bazuar në trung.

Në Zhvillimin e Bazuar në Trunk, ju duhet të krijoni degën tuaj për çdo version. Të gjitha ndryshimet (rregullimet e shpejta) brenda këtij versioni janë kryer në këtë degë.

Si pjesë e këtij postimi, ne do të automatizojmë gjërat e mëposhtme:

  • Ndërtimi CI

  • Krijimi i një versioni të ri

  • Krijimi i një dege lëshimi

  • Ndryshimi i versionit të korrigjimit të gabimeve

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

kërkesat:

Le të krijojmë projektin "Automation Maven Hotfix" në Teamcity dhe të krijojmë 4 detyra atje.

  • Ndërtimi CI

  • Krijo degë për lirim

  • Rregullimi i gabimeve në rritje të Maven (Ndrysho versionin e rregullimit të gabimeve))

  • Publikimi i Maven (Krijimi i një versioni të ri)

Pamja e ekranit të projektit:

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Cilësimet e përgjithshme

Në të gjitha detyrat duhet të kontrolloni kutinë "Ndërtimi i pastër: Fshini të gjithë skedarët në drejtorinë e arkës përpara ndërtimit“, sepse pa këtë kuti kontrolli kam pasur gabime.

Ne krijojmë një VCS të vetme. Karakteristikat e VCS janë të rrethuara me të kuqe.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Në mënyrë tipike VCS përdorin skemën HTTPS. NË Specifikimi i degës: tregohet për të parë të gjitha mëngjeset dhe të gjitha etiketat:

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

Është e nevojshme të krijohen 4 parametra të konfigurimit.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Fusha e vlerës në BRANCH_FOR_INCREMENT dhe TAG_FROM_VERSION duhet të lihet bosh.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Duhet të ngarkoni/shtoni një çelës privat. Të gjitha detyrat përveç CI Build kërkojnë një çelës privat.

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Në secilën detyrë, me përjashtim të CI Build, në seksionin Build Features ju duhet të lidhni një çelës privat.

Shembull për Lirimi i Maven

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Ndërtimi CI**.

Në një detyrë Ndërtimi CI vetëm një hap test i pastër mvn

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Lirimi i Maven

Në një detyrë Lirimi i Maven 2 hapa. Hapi i parë është të kontrolloni se çfarë brunch është mjeshtër. Nëse brunch nuk është mjeshtër, atëherë detyra bie.

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë është standard lëshimi i mvn: përgatit me opsion ---modaliteti i grupit

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Krijo degë për lirim

Për të krijuar një rregullim të drejtpërdrejtë për një version, duhet të krijoni një degë. Kjo është ajo që bën detyra Krijo degë për lirim. Ajo ka 2 hapa.

Hapi i parë kontrollon që brunch nuk është mjeshtër, dhe e dyta kontrollon që versioni është në skedar pom.xml nuk e përmbante fjalën FOTO

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë ndryshon skemën e lidhjes në developerConnection nga HTTPS në 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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Rregullimi i gabimeve në rritje të Maven

Detyra përbëhet nga 6 pjesë. Mund të ishte rifaktoruar, por ende funksionon.

Hapi i parë është të kontrolloni që brunch nuk është mjeshtër. Nëse mëngjes i vonë mjeshtër detyra bie.

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i dytë i Maven është ndryshimi i versionit të korrigjimit të gabimeve në skedarin pom.xml.

Qëllimet: Maven ka gjithçka në një linjë

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i tretë është shfaqja e informacionit të statusit të Git dhe të tjerëve:

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i katërt ndryshon skemën e lidhjes në developerConnection nga HTTPS në GIT.

Dhe shtyn ndryshime në degën e specifikuar në Teamcity nga ndryshorja %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%

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i pestë është marrja nga skedari pom.xml version dhe e instalon atë në Teamcity e ndryshueshme TAG_FROM_VERSION. Vini re se versioni nga skedari pom.xml pa shkronjën v përpara. Dhe etiketa, bazuar në këtë version, ka tashmë shkronjën v në fillim.

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

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Hapi i gjashtë - etiketimi bugfix versionet. Kjo bëhet duke përdorur Maven me opsionin e kërkuar në Caku.

Opsioni Objektivat:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizimi i HotFix në projektet Maven duke përdorur TeamCity

Burimi: www.habr.com

Shto një koment