HotFix-i automatiseerimine Maven projektides TeamCity abil

Selles postituses käsitletakse HotFix automaatse seadistamise seadistamist Maven projektides, kasutades Teamcity't.

HotFix'i tegemiseks on tavaliselt palju käsitsi toiminguid:

  1. Loo haru selle väljaande jaoks, kuhu soovid HotFix'i rakendada
  2. Paranda vea väli väljaandes
  3. Muuda bugfix versiooni väljaande harus
  4. Tõsta esile bugfix versiooni silt

Punktid 1, 3, 4 saab automatiseerida.

Enne kui liigume teema juurde, tahaksin käsitleda ühte olulist ja keerulist teemat — versioonihalduse tarkvaras. Semver'i kohta saab lühidalt aru sellel ekraanipildil. HotFix-i automatiseerimine Maven projektides TeamCity abil

Rohkem infot on saadaval lingil: 1.

Käesolevas postituses kirjeldatud kõik seadistused toetuvad Semver ja Trunk-Based Development.

Trunk-Based Development'is tuleb iga väljaande jaoks luua oma haru. Kõik muudatused (hotfix) selle väljaande raames.commititakse sellele harule.

Käesolevas postituses automatiseerime järgmised asjad:

  • CI ehitus

  • Uue väljaande loomine

  • Väljaande haru loomine

  • Bugfix versiooni muutmine

HotFix-i automatiseerimine Maven projektides TeamCity abil

Nõuded:

Loo Teamcity's projekt "Automation Maven Hotfix" ja loo seal 4 ülesannet.

  • CI Build (CI ehitus)

  • Loo haru väljaande jaoks (Väljaande haru loomine)

  • Maven increment bugfix (Bugfix versiooni muutmine)

  • Maven release (Uue väljaande loomine)

Projekti ekraanipilt:

HotFix-i automatiseerimine Maven projektides TeamCity abil

Üldseaded

Kõigis ülesannetes tuleb märkida „Clean build: Kustuta kõik failid allalaadimise kataloogist enne ehitamist“, kuna selle määramata jätmisel tekkisid mul vead.

Loome ainul VCS. VCS-i eripära on joonitud punasega.

HotFix-i automatiseerimine Maven projektides TeamCity abil

Tavaliselt kasutatakse VCS-i HTTPS-i skeemi. Harude spetsifikatsioon: on määratud vaatama kõiki harusid ja kõiki silte:

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

Peab looma 4 konfiguratsiooni parameetrit.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Vali väärtus BRANCH_FOR_INCREMENT ja TAG_FROM_VERSION peab olema tühi.

HotFix-i automatiseerimine Maven projektides TeamCity abil

Peate üles laadima/ lisama privaatse võtme. Kõigis ülesannetes, välja arvatud CI ehitus, on vajalik privaatne võti.

HotFix-i automatiseerimine Maven projektides TeamCity abil

Igas ülesandes, välja arvatud CI ehitus, tuleb jaotises Build Features lisada privaatne võti.

Näide jaoks Maven release

HotFix-i automatiseerimine Maven projektides TeamCity abil

CI Build**.

Ülesandes CI Build on vaid üks samm mvn clean test

HotFix-i automatiseerimine Maven projektides TeamCity abil

Maven release

Ülesandes Maven release 2 sammu. Esimene samm kontrollib, et haru on master. Kui haru ei ole master, siis ülesanne kukub.

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

HotFix-i automatiseerimine Maven projektides TeamCity abil

Teine samm on tavaline mvn release:prepare valikuga —batch-mode

HotFix-i automatiseerimine Maven projektides TeamCity abil

Loo haru rollimiseks

Hotfixi loomiseks peab looma haru. Sellega tegeleb ülesanne Loo haru rollimiseks. Sellel on 2 sammu.

Esimene samm kontrollib, et haru ei master, ja teine kontrollib, et versioon failis pom.xml ei sisaldaks sõna SNAPSHOT

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

echo "Saadud versioon pakett pom.xml-st"
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 "Kontrolli SNAPSHOT"
if [[ $version == "*SNAPSHOT*" ]]; then
    echo "******************* HOIATUS *************************"
    echo "************ Sa lood haru SNAPSHOTS jaoks ******************"
    echo "***********************************************************"
    exit 1
fi

HotFix-i automatiseerimine Maven projektides TeamCity abil

Teine samm muudab developerConnection ühenduse skeemi HTTPS-st GIT-iks.

# Здесь получаем 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-i automatiseerimine Maven projektides TeamCity abil

Maveni increment bugfix

Ülesanne koosneb 6 osast. Oli võimalik refactoring teha, aga niimoodi töötas ka.

Esimene samm — kontroll on see, et haru ei master. Kui haru master ülesanne kukub.

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

# Siin saame versiooni failist pom.xml
echo "Saadud versioon pakett pom.xml-st"
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)"`
# Peab tegema checkout vajaliku haru peale.
# Muidu git status näitab detached haru.
# Peab, et git status näitaks lihtsalt haru
git checkout $BRANCH
# Eksportime bash muutuja Teamcity muutujasse edasiseks kasutuseks.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

HotFix-i automatiseerimine Maven projektides TeamCity abil

Teine Maveni samm muudab bugfix versiooni failis pom.xml.

Eesmärgid: mavenil kõik ühel real

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

HotFix-i automatiseerimine Maven projektides TeamCity abil

Kolmas samm — Git statusi teabe ja muu väljastamine:

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-i automatiseerimine Maven projektides TeamCity abil

Neljas samm muudab developerConnection ühenduse skeemi HTTPS-st GIT-iks.

Ja pushib muudatused harusse, mis on märgitud Teamcity muutuja %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-i automatiseerimine Maven projektides TeamCity abil

Viies samm saab failist pom.xml versiooni ja seab selle Teamcity muutuja TAG_FROM_VERSION. Pange tähele, et versioon failist pom.xml ilma v-tähe ees. Ja silt, mille alusel see versioon on, on juba v-tähega alguses.

echo "Saadud versioon pakett pom.xml-st"
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']"

HotFix-i automatiseerimine Maven projektides TeamCity abil

Kuues samm — sildistamine bugfix versioon. Seda tehakse Maven vajaliku valikuga Eesmärk.

Valik Goals:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFix-i automatiseerimine Maven projektides TeamCity abil

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster