HotFix automatizálás Maven projektekben TeamCity segítségével

Ebben a bejegyzésben a HotFix automatizálásának beállítását írjuk le Maven projektekben TeamCity használatával.

A HotFix elkészítéséhez általában sok kézi lépést kell végrehajtani:

  1. Branch létrehozása a kiadás számára, amire a HotFix-t ki szeretnék adatni
  2. Hiba javítása a kiadásban
  3. A bugfix verzió módosítása a kiadási branchben
  4. Bugfix verzió jelölésének kiadása

Az 1., 3., és 4. lépéseket automatizálni lehet.

Mielőtt rátérnénk a témára, szeretném érinteni egy fontos és összetett témát — verziókezelést szoftver. A Semver röviden megérthető az alábbi képernyőképen. HotFix automatizálás Maven projektekben TeamCity segítségével

További részleteket olvashat a linken: 1.

Az ebben a bejegyzésben leírt összes beállítás a Semver és Trunk-Based Development.

A Trunk-Based Development során minden kiadáshoz saját branch-et kell létrehozni. Minden változtatás (hotfix) a kiadáson belül e branch-be kerül.

A bejegyzés keretein belül az alábbiakat automatizáljuk:

  • CI build

  • Új kiadás létrehozása

  • Branch létrehozása a kiadáshoz

  • Bugfix verzió módosítása

HotFix automatizálás Maven projektekben TeamCity segítségével

Elvárások:

  • Git tároló a kód tárolásához. A bejegyzésben a következő tárolót használjuk: https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • TeamCity szerver és ügynök. Létrehozhat egy helyi TeamCity szervert és ügynököt a docker-compose
  • Olyan helyen, ahol a TeamCity ügynök található, telepítve kell lennie a java-nak, maven-nak, git-nek

Létrehozunk a TeamCity-ben egy "Automation Maven Hotfix" projektet, és ott 4 feladatot fogunk létrehozni.

  • CI Build

  • Branch létrehozása a kiadáshoz

  • Maven bugfix verzió módosítása

  • Maven új kiadás létrehozása

A projekt képernyőképe:

HotFix automatizálás Maven projektekben TeamCity segítségével

Általános beállítások

Minden feladatban be kell jelölni a "Tiszta build: Töröljön minden fájlt a checkout könyvtárban a build előtt" lehetőséget, mivel ennek hiányában hibák léptek fel.

Csak egy VCS-t hozunk létre. A VCS sajátosságait pirossal kereteztük.

HotFix automatizálás Maven projektekben TeamCity segítségével

A VCS általában HTTPS sémát használ. A Branch specifikáció: Látni kell az összes branch-t és az összes címkét:

+: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 value mezőt a BRANCH_FOR_INCREMENT és a TAG_FROM_VERSION esetében üresen kell hagyni.

HotFix automatizálás Maven projektekben TeamCity segítségével

Privát kulcsot kell feltölteni/hozzáadni. Minden feladatban, kivéve a CI Build esetében, szükség van a privát kulcsra.

HotFix automatizálás Maven projektekben TeamCity segítségével

Minden feladatban, a CI Build kivételével, a Build Features szakaszban csatlakoztatni kell a privát kulcsot.

Példa a Maven új kiadás létrehozására.

HotFix automatizálás Maven projektekben TeamCity segítségével

CI Build**.

A feladatban CI Build csupán egy lépés található mvn clean test

HotFix automatizálás Maven projektekben TeamCity segítségével

Maven új kiadás létrehozására.

A feladatban Maven új kiadás létrehozására. 2 lépés. Az első lépés ellenőrzi, hogy a branch az master. Ha a branch nem master, akkor a feladat megbukik.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'A branch nem master';
  echo 'Lemondás';
  exit 1;
fi

HotFix automatizálás Maven projektekben TeamCity segítségével

A második lépés a standard mvn release:prepare opcióval —batch-mode

HotFix automatizálás Maven projektekben TeamCity segítségével

Ág létrehozása a kiadáshoz

Hotfix létrehozásához a kiadáshoz ágat kell létrehozni. Ezt a feladat végzi Ág létrehozása a kiadáshoz. Két lépése van.

Az első lépés ellenőrzi, hogy az ág ne master, a második ellenőrzi, hogy a fájlban található verzió pom.xml ne tartalmazza a szót 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

HotFix automatizálás Maven projektekben TeamCity segítségével

A második lépés megváltoztatja a developerConnection kapcsolat sémáját HTTPS-ről GIT-re.

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

HotFix automatizálás Maven projektekben TeamCity segítségével

Maven increment bugfix

A feladat 6 részből áll. Lehetett volna refaktorálni, de így is működik.

Az első lépés - ellenőrizni, hogy az ág ne master. Ha az ág master a feladat megbukik.

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

# Itt lekérjük az verziót a pom.xml fájlból
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)"`
# Muszáj checkout-ot végezni a megfelelő ágra.
# Különben a git status detached-et mutat a szükséges ágra.
# Szükséges, hogy a git status egyszerűen csak ágat mutasson
git checkout $BRANCH
# Bash változó exportálása Teamcity változóba a további használatra.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

HotFix automatizálás Maven projektekben TeamCity segítségével

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

Célok: a maven mind egy sorban

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

HotFix automatizálás Maven projektekben TeamCity segítségével

A harmadik lépés - Git státusz és egyéb információk kiírása:

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

HotFix automatizálás Maven projektekben TeamCity segítségével

A negyedik lépés megváltoztatja a developerConnection kapcsolat sémáját HTTPS-ről GIT-re.

És tolja a módosításokat a Teamcity változóban megadott ágra %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%

HotFix automatizálás Maven projektekben TeamCity segítségével

Az ötödik lépés a fájlból kapja meg pom.xml a verziót és beállítja azt a Teamcity változóba TAG_FROM_VERSION. Vegyék észre, hogy a fájl verziója nem tartalmazza az előtag v betűt. Az alapján létrehozott címke viszont v-vel kezdődik. pom.xml 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 hatodik lépés - címkézés

HotFix automatizálás Maven projektekben TeamCity segítségével

bugfix verziók. Ezt a megfelelő opcióval végzi a Maven Cél Célok.

Opció -Dtag=%TAG_FROM_VERSION% scm:tag:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFix automatizálás Maven projektekben TeamCity segítségével

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster