Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Ta objava bo opisala nastavitev avtomatizacije HotFix v projektih Maven z uporabo Teamcity.

Za HotFix je običajno izvedenih veliko ročnih korakov:

  1. Ustvarite novo različico za izdajo, v katero želite uvesti HotFix
  2. Odpravite napako v izdaji
  3. Spremenite različico popravka napak v veji izdaje
  4. Razvijte oznako različice popravka napak

Točke 1,3,4 se lahko avtomatizirajo.

Preden preidemo na temo, bi se rad dotaknil pomembne in zapletene teme - različic programsko opremo. Na tem posnetku zaslona lahko na kratko razumete Semverja. Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Več si lahko preberete na povezavi: 1.

Vse nastavitve, opisane v tej objavi, temeljijo na Semver и Razvoj na podlagi vodila.

Pri razvoju na osnovi debla morate ustvariti lastno vejo za vsako izdajo. Vse spremembe (hitre popravke) v tej izdaji so predane tej veji.

Kot del te objave bomo avtomatizirali naslednje stvari:

  • Zgradba CI

  • Ustvarjanje nove izdaje

  • Ustvarjanje izdajne veje

  • Spreminjanje različice popravka napak

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Zahteve:

Ustvarimo projekt »Automation Maven Hotfix« v Teamcityju in tam ustvarimo 4 naloge.

  • Zgradba CI

  • Ustvari vejo za izdajo

  • Maven poveča popravek napak (Spremeni različico popravka napak))

  • Izdaja Maven (ustvarjanje nove izdaje)

Posnetek zaslona projekta:

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Splošne nastavitve

Pri vseh nalogah morate potrditi polje "Čista zgradba: pred gradnjo izbrišite vse datoteke v imeniku za prevzem«, ker sem brez tega potrditvenega polja dobil napake.

Ustvarimo en sam VCS. Funkcije VCS so obkrožene rdeče.

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Običajno VCS uporabljajo shemo HTTPS. IN Specifikacija veje: označeno za ogled vseh malic in vseh oznak:

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

Potrebno je ustvariti 4 konfiguracijske parametre.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Polje vrednosti v BRANCH_FOR_INCREMENT in TAG_FROM_VERSION mora biti prazno.

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Naložiti/dodati morate zasebni ključ. Vse naloge, razen CI Build, zahtevajo zasebni ključ.

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Pri vsaki nalogi, razen CI Build, v razdelku Build Features morate povezati zasebni ključ.

Primer za Izdaja Maven

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Zgradba CI**.

V nalogi Zgradba CI samo en korak mvn čisti test

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Izdaja Maven

V nalogi Izdaja Maven 2 koraka. Prvi korak je preverjanje, ali je malica mojster. Če malice ni mojster, potem pade naloga.

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Drugi korak je standarden mvn izdaja:pripravi z možnostjo --paketni način

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Ustvari vejo za izdajo

Če želite ustvariti hitri popravek za izdajo, morate ustvariti vejo. To naredi taska Ustvari vejo za izdajo. Ima 2 koraka.

Prvi korak preveri, ali brunch ni mojster, drugi pa preveri, ali je različica v datoteki pom.xml ni vseboval besede PREGLED

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Drugi korak spremeni povezovalno shemo v developerConnection iz HTTPS v 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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Popravek napak pri povečanju Maven

Naloga je sestavljena iz 6 delov. Lahko bi ga predelali, a še vedno deluje.

Prvi korak je preveriti, ali malica ni mojster. Če brunch mojster naloga pade.

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Drugi korak Maven je spreminjanje različice popravka napak v datoteki pom.xml.

Cilji: Maven ima vse v eni vrstici

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Tretji korak je prikaz informacij o stanju Git in drugih:

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Četrti korak spremeni povezovalno shemo v developerConnection iz HTTPS v GIT.

In potisne spremembe v vejo, določeno v Teamcity s spremenljivko %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%

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Peti korak je pridobivanje iz datoteke pom.xml različico in jo namesti v Teamcity spremenljivka TAG_FROM_VERSION. Upoštevajte, da različica iz datoteke pom.xml brez črke v spredaj. In oznaka, ki temelji na tej različici, že ima črko v na začetku.

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

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Šesti korak - označevanje bugfix različice. To se naredi z uporabo Maven z zahtevano možnostjo v Cilj.

Možnost Cilji:

-Dtag=%TAG_FROM_VERSION% scm:tag

Avtomatizacija HotFix v projektih Maven z uporabo TeamCity

Vir: www.habr.com

Dodaj komentar