A HotFix automatizálása a Maven projektekben TeamCity segítségével

Ez a bejegyzés leírja a HotFix automatizálás beállítását a Maven projektekben a Teamcity használatával.

A HotFix végrehajtásához általában sok manuális lépést kell végrehajtani:

  1. Hozzon létre egy villásreggelit ahhoz a kiadáshoz, amelyen ki szeretné helyezni a HotFixet
  2. Hiba javítása a kiadásban
  3. Módosítsa a hibajavítás verzióját a kiadási ágban
  4. A hibajavítás verziócímkéjének közzététele

Az 1,3,4, XNUMX, XNUMX pontok automatizálhatók.

Mielőtt rátérnénk a témára, szeretnék egy fontos és összetett témát érinteni - verziószámítás szoftver. Röviden megértheti Semvert ezen a képernyőképen. A HotFix automatizálása a Maven projektekben TeamCity segítségével

Bővebben a linken olvashatsz: 1.

Az ebben a bejegyzésben leírt összes beállítás alapja Semver и Törzs alapú fejlesztés.

A trönkalapú fejlesztésben minden kiadáshoz létre kell hoznia egy saját ágat. A kiadáson belüli összes módosítás (hotfix) ezen ágon érvényes.

A bejegyzés részeként a következő dolgokat automatizáljuk:

  • CI build

  • Új kiadás létrehozása

  • Kiadási ág létrehozása

  • A hibajavítási verzió módosítása

A HotFix automatizálása a Maven projektekben TeamCity segítségével

követelmények:

Hozzuk létre az „Automation Maven Hotfix” projektet a Teamcityben, és hozzunk létre 4 feladatot.

  • CI Build

  • Hozzon létre ágat a kiadáshoz

  • Maven növekményes hibajavítás (A hibajavítás verziójának módosítása)

  • Maven kiadás (Új kiadás létrehozása)

A projekt képernyőképe:

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Általános beállítások

Minden feladatnál be kell jelölni a "Tiszta build: Törölje az összes fájlt a fizetési könyvtárban a build előtt", mert e jelölőnégyzet nélkül hibákat kaptam.

Egyetlen VCS-t hozunk létre. A VCS jellemzői pirossal vannak bekarikázva.

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A VCS-k általában a HTTPS-sémát használják. BAN BEN Fiók specifikációja: az összes villásreggelit és az összes címkét meg kell nézni:

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

4 konfigurációs paramétert kell létrehozni.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

A BRANCH_FOR_INCREMENT és a TAG_FROM_VERSION értékmezőjét üresen kell hagyni.

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Fel kell töltenie/hozzáadnia egy privát kulcsot. A CI Build kivételével minden feladathoz privát kulcs szükséges.

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A CI Build kivételével minden feladatnál a Build Features szakaszban privát kulcsot kell csatlakoztatnia.

Példa erre Maven kiadása

A HotFix automatizálása a Maven projektekben TeamCity segítségével

CI Build**.

Egy feladatban CI Build csak egy lépés mvn tiszta teszt

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Maven kiadása

Egy feladatban Maven kiadása 2 lépés. Az első lépés annak ellenőrzése, hogy van-e villásreggeli mester. Ha a villásreggeli nem az mester, akkor esik a feladat.

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A második lépés szabványos mvn release:prepare opcióval -- kötegelt mód

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Hozzon létre ágat a kiadáshoz

Egy kiadáshoz gyorsjavítás létrehozásához létre kell hoznia egy ágat. Ezt csinálja a feladat Hozzon létre ágat a kiadáshoz. 2 lépése van.

Az első lépésben ellenőrzi, hogy a villásreggeli nem az mester, a második pedig azt ellenőrzi, hogy a verzió szerepel-e a fájlban pom.xml nem tartalmazta a szót PILLANATKÉP

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A második lépés a developerConnection kapcsolati sémáját HTTPS-ről GIT-re módosítja.

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Maven növekményes hibajavítás

A feladat 6 részből áll. Újra lehetett volna alakítani, de még mindig működik.

Az első lépés annak ellenőrzése, hogy a villásreggeli nem az mester. Ha villásreggeli mester esik a feladat.

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A Maven második lépése a hibajavítás verziójának módosítása a pom.xml fájlban.

Célok: Maven mindent egy sorban

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A harmadik lépés a Git állapotinformációk és egyebek megjelenítése:

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

A negyedik lépés a developerConnection kapcsolati sémáját HTTPS-ről GIT-re módosítja.

És elküldi a Teamcity-ben a %BRANCH_FOR_INCREMENT% változó által meghatározott ágra a változtatásokat

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Az ötödik lépés a fájlból való beszerzés pom.xml verziót, és telepíti Teamcity változó TAG_FROM_VERSION. Vegye figyelembe, hogy a fájl verziója pom.xml előtt v betű nélkül. A címkén pedig ezen verzió alapján már a v betű van az elején.

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

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Hatodik lépés - címkézés hibajavítás verziók. Ez segítségével történik Maven a szükséges opcióval Cél.

választási lehetőség Célok:

-Dtag=%TAG_FROM_VERSION% scm:tag

A HotFix automatizálása a Maven projektekben TeamCity segítségével

Forrás: will.com

Hozzászólás