HotFixi automatiseerimine Maven projektides TeamCity abil

Selles postituses käsitletakse automaatika seadistamist HotFix'i jaoks Maven projektides, kasutades Teamcity't.

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

  1. Loo haru selle väljaande jaoks, kuhu soovid HotFix'i rakendada
  2. Paranda viga väljaandes
  3. Muuda bugfix versiooni väljaande harus
  4. Käivita bugfix versiooni silt

Punktid 1, 3, 4 on automatiseeritavad.

Enne teema juurde minekut tahan käsitleda olulist ja keerulist teemat — versioonihalduse tarkvara. Semver'i kohta saab lühidalt aru sellel ekraanipildil. HotFixi automatiseerimine Maven projektides TeamCity abil

Rohkem infot on võimalik lugeda järgmisel lingil: 1.

Kõik selles postituses kirjeldatud seadistused toetuvad Semver ja Trunk-Based Development.

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

Selles postituses automatiseerime järgnevate asjade:

  • CI ehitus

  • Uue väljaande loomine

  • Väljaande haru loomine

  • Bugfix versiooni muutmine

HotFixi automatiseerimine Maven projektides TeamCity abil

Nõuded:

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

  • CI Build (CI ehitus)

  • Create branch for release (Väljaande haru loomine)

  • Maven increment bugfix (Bugfix versiooni muutmine)

  • Maven release (Uue väljaande loomine)

Projekti ekraanipilt:

HotFixi automatiseerimine Maven projektides TeamCity abil

Üldised seadistused

Kõigis ülesannetes tuleb märkida kast "Clean build: Kustuta kõik failid checkout kataloogist enne ehitust", et vältida vigu.

Loo ainus VCS. VCS'i eripära on tähistatud punasega.

HotFixi automatiseerimine Maven projektides TeamCity abil

Tavaliselt kasutatakse VCS'i HTTPS skeemi. Siin Branch specification: on määratud vaatama kõiki harusid ja kõiki silte:

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

On vajalik luua 4 Konfiguratsiooni Parameetrit.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Parameetri value BRANCH_FOR_INCREMENT ja TAG_FROM_VERSION peab olema tühi.

HotFixi automatiseerimine Maven projektides TeamCity abil

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

HotFixi automatiseerimine Maven projektides TeamCity abil

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

Näide Maven release

HotFixi automatiseerimine Maven projektides TeamCity abil

CI Build**.

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

HotFixi automatiseerimine Maven projektides TeamCity abil

Maven release

Ülesandes Maven release 2 sammu. Esimene samm kontrollib, kas haru on master. Kui haru ei ole master, siis ülesanne ebaõnnestub.

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

HotFixi automatiseerimine Maven projektides TeamCity abil

Teine samm on standardne mvn release:prepare valiku --batch-mode

HotFixi automatiseerimine Maven projektides TeamCity abil

Create branch for release

Hotfix'i loomiseks väljaande jaoks tuleb luua haru. Sellega tegeleb ülesanne Create branch for release. Sellel on 2 sammu.

Esimene samm kontrollib, et haru ei ole 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 "Hangi versioon paketist 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 "Kontrolli SNAPSHOT"
if [[ $version == "*SNAPSHOT*" ]]; then
    echo "******************* HOIATUS *************************"
    echo "************ Sa lood haru SNAPSHOTS jaoks ******************"
    echo "***********************************************************"
    exit 1
fi

HotFixi automatiseerimine Maven projektides TeamCity abil

Teine samm muudab developerConnection'i ühenduse skeemi HTTPS'ist 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

HotFixi automatiseerimine Maven projektides TeamCity abil

Maven increment bugfix

Ülesanne koosneb 6 osast. Seda oleks saanud refaktoreerida, kuid töötab ka nii.

Esimene samm — kontrollida, et haru ei ole master. Kui haru on master ülesanne ebaõnnestub.

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 "Hangi versioon paketist 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)"`
# Peame tegema checkout vajalikku haru.
# Vastasel juhul git status näitab detached vajalikult haru.
# Peab olema, et git status näitab lihtsalt haru
git checkout $BRANCH
# Ekspordi bash muutuja Teamcity muutujasse, et edasise kasutamise tarbeks.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

HotFixi automatiseerimine Maven projektides TeamCity abil

Teine Maven samm bugfix versiooni muutmine failis pom.xml.

Eesmärgid: maven'il kõik ühel real

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

HotFixi automatiseerimine Maven projektides TeamCity abil

Kolmas samm — väljasta Git status ja teised:

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

Neljas samm muudab developerConnection'i ühenduse skeemi HTTPS'ist GIT'iks.

Ja edastab muudatused harule, mida on määratletud 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%

HotFixi automatiseerimine Maven projektides TeamCity abil

Viies samm hangib failist pom.xml versiooni ja seab selle Teamcity muutuja TAG_FROM_VERSION. Pane tähele, et versioon failist pom.xml on ilma v-täheta ees. Ja silt selle versiooni põhjal on juba v-tähega ees.

echo "Hangi versioon paketist 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 Maven projektides TeamCity abil

Kuues samm — sildistamine bugfix versioon. Seda tehakse Maven töötava valikuga Eesmärk.

Valik Goals:

-Dtag=%TAG_FROM_VERSION% scm:tag

HotFixi automatiseerimine Maven projektides TeamCity abil

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster