HotFixi automatiseerimine Maveni projektides TeamCity abil

See postitus kirjeldab HotFixi automatiseerimise seadistamist Maveni projektides Teamcity abil.

HotFixi tegemiseks tehakse tavaliselt palju käsitsi toiminguid:

  1. Looge väljalase jaoks, millele soovite HotFixi avaldada, hiline hommikueine
  2. Parandage väljalaskes esinev viga
  3. Muutke väljalaskeharus veaparanduse versiooni
  4. Tõsta välja veaparanduse versioonimärgend

Punkte 1,3,4 saab automatiseerida.

Enne kui läheme teema juurde, tahaksin puudutada olulist ja keerulist teemat - versioonide koostamine tarkvara. Sellel ekraanipildil saate Semveri lühidalt mõista. HotFixi automatiseerimine Maveni projektides TeamCity abil

Täpsemalt saad lugeda lingilt: 1.

Kõik selles postituses kirjeldatud seaded põhinevad Semver и Pagasiruumipõhine arendus.

Pagasiruumipõhises arenduses peate iga versiooni jaoks looma oma haru. Kõik selle versiooni muudatused (kiirparandused) kehtivad sellele harule.

Selle postituse osana automatiseerime järgmised asjad:

  • CI ehitamine

  • Uue väljalase loomine

  • Väljalaskeharu loomine

  • Veaparanduse versiooni muutmine

HotFixi automatiseerimine Maveni projektides TeamCity abil

nõuded:

Loome Teamcitys projekti Automation Maven Hotfix ja loome sinna 4 ülesannet.

  • CI ehitamine

  • Loo vabastamiseks haru

  • Maven increment bugfix (muuda veaparanduse versiooni)

  • Maven väljalase (uue väljalase loomine)

Projekti ekraanipilt:

HotFixi automatiseerimine Maveni projektides TeamCity abil

Üldised seaded

Kõigi ülesannete puhul peate märkima kasti "Puhas järg: kustutage kõik failid kassakataloogis enne ehitamist“, sest ilma selle märkeruuduta sain vead.

Loome ühe VCS-i. VCS-i funktsioonid on punasega ümbritsetud.

HotFixi automatiseerimine Maveni projektides TeamCity abil

Tavaliselt kasutavad VCS-id HTTPS-skeemi. IN Filiaali spetsifikatsioon: Soovitud vaadata kõiki brunsse ja kõiki silte:

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

On vaja luua 4 konfiguratsiooniparameetrit.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Väärtuse väli versioonides BRANCH_FOR_INCREMENT ja TAG_FROM_VERSION tuleb tühjaks jätta.

HotFixi automatiseerimine Maveni projektides TeamCity abil

Peate privaatvõtme üles laadima/lisama. Kõik ülesanded, välja arvatud CI Build, nõuavad privaatvõtit.

HotFixi automatiseerimine Maveni projektides TeamCity abil

Igas ülesandes, välja arvatud CI Build, peate jaotises Ehitusfunktsioonid ühendama privaatvõtme.

Näide jaoks Maven vabastamine

HotFixi automatiseerimine Maveni projektides TeamCity abil

CI Build**.

Ülesandes CI ehitamine vaid üks samm mvn puhas test

HotFixi automatiseerimine Maveni projektides TeamCity abil

Maven vabastamine

Ülesandes Maven vabastamine 2 sammu. Esimene samm on kontrollida, kas hiline hommikusöök on meister. Kui brunch ei ole meister, siis ülesanne langeb.

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Teine samm on standardne mvn release:prepare valikuga -- partiirežiim

HotFixi automatiseerimine Maveni projektides TeamCity abil

Loo vabastamiseks haru

Väljalaske käigultparanduse loomiseks peate looma haru. See on see, mida ülesanne teeb Loo vabastamiseks haru. Tal on 2 sammu.

Esimene samm kontrollib, et hiline hommikueine poleks meisterja teine ​​kontrollib, kas versioon on failis pom.xml ei sisaldanud seda sõna NÄPPU

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Teine samm muudab developerConnectioni ühendusskeemi HTTPS-ilt GIT-le.

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Maven juurdekasvu veaparandus

Ülesanne koosneb 6 osast. Seda oleks võinud ümber teha, kuid see töötab endiselt.

Esimene samm on kontrollida, et hiline hommikueine poleks meister. Kui brunch meister ülesanne langeb.

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Teine Maveni samm on veaparanduse versiooni muutmine failis pom.xml.

Eesmärgid: Mavenil on kõik ühes reas

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Kolmas samm on Giti olekuteabe ja muu kuvamine:

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Neljas samm muudab developerConnectioni ühenduse skeemi HTTPS-ilt GIT-le.

Ja lükkab muudatused Teamcitys muutuja %BRANCH_FOR_INCREMENT% määratud harusse

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Viies samm on failist hankimine pom.xml versiooni ja installib selle sisse Teamcity muutuv TAG_FROM_VERSION. Pange tähele, et faili versioon pom.xml ilma v-täheta ees. Ja sellel versioonil põhineva sildi alguses on juba v-täht.

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

HotFixi automatiseerimine Maveni projektides TeamCity abil

Kuues samm – sildistamine veaparandus versioonid. Seda tehakse kasutades Maven koos vajaliku valikuga Eesmärk.

Variant Eesmärgid:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFixi automatiseerimine Maveni projektides TeamCity abil

Allikas: www.habr.com

Lisa kommentaar