Outomatisering van HotFix in Maven-projekte met TeamCity

Hierdie pos sal die opstel van HotFix-outomatisering in Maven-projekte met Teamcity beskryf.

Om HotFix te doen, word gewoonlik baie handmatige stappe gedoen:

  1. Skep 'n brunch vir die vrystelling waarheen jy HotFix wil uitrol
  2. Maak 'n fout in vrystelling reg
  3. Verander die bugfix-weergawe in die vrystellingtak
  4. Ontplooi bugfix-weergawemerker

Punte 1,3,4 kan geoutomatiseer word.

Voordat ons oorgaan na die onderwerp, wil ek graag 'n belangrike en komplekse onderwerp aanraak - weergawe sagteware. U kan Semver kortliks in hierdie skermkiekie verstaan. Outomatisering van HotFix in Maven-projekte met TeamCity

Jy kan meer lees by die skakel: 1.

Alle instellings wat in hierdie pos beskryf word, is gebaseer op Semver и Stam-gebaseerde ontwikkeling.

In Trunk-Based Development, moet jy jou eie tak vir elke vrystelling skep. Alle veranderinge (hotfixes) binne hierdie vrystelling is verbind tot hierdie tak.

As deel van hierdie pos sal ons die volgende dinge outomatiseer:

  • CI bou

  • Skep 'n nuwe vrystelling

  • Skep 'n vrystellingtak

  • Verander die bugfix-weergawe

Outomatisering van HotFix in Maven-projekte met TeamCity

vereistes:

Kom ons skep die "Automation Maven Hotfix"-projek in Teamcity en skep 4 take daar.

  • CI Bou

  • Skep tak vir vrylating

  • Maven verhoog foutoplossing (Verander foutoplossing weergawe))

  • Maven-vrystelling (skep 'n nuwe vrystelling)

Projek skermkiekie:

Outomatisering van HotFix in Maven-projekte met TeamCity

Algemene instellings

In alle take moet jy die blokkie merk "Skoon bou: Vee alle lêers in die betaalgids uit voor die bou“, want sonder hierdie merkblokkie het ek foute gekry.

Ons skep 'n enkele VCS. VCS-kenmerke is in rooi omsirkel.

Outomatisering van HotFix in Maven-projekte met TeamCity

Tipies gebruik VCS'e die HTTPS-skema. IN Tak spesifikasie: aangedui om na alle brunches en alle etikette te kyk:

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

Dit is nodig om 4 konfigurasieparameters te skep.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Die waardeveld in BRANCH_FOR_INCREMENT en TAG_FROM_VERSION moet leeg gelaat word.

Outomatisering van HotFix in Maven-projekte met TeamCity

Jy moet 'n private sleutel oplaai/byvoeg. Alle take behalwe CI Build vereis 'n private sleutel.

Outomatisering van HotFix in Maven-projekte met TeamCity

In elke taak, behalwe CI Build, in die Bou-kenmerke-afdeling moet jy 'n private sleutel koppel.

Voorbeeld vir Maven vrylating

Outomatisering van HotFix in Maven-projekte met TeamCity

CI Bou**.

In 'n taak CI Bou net een stap mvn skoon toets

Outomatisering van HotFix in Maven-projekte met TeamCity

Maven vrylating

In 'n taak Maven vrylating 2 treë. Die eerste stap is om seker te maak dat brunch is meester. As brunch is nie meester, dan val die taak.

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die tweede stap is standaard mvn vrystelling: berei voor met opsie --batch-modus

Outomatisering van HotFix in Maven-projekte met TeamCity

Skep tak vir vrylating

Om 'n hotfix vir 'n vrystelling te skep, moet jy 'n tak skep. Dit is wat die taska doen Skep tak vir vrylating. Sy het 2 treë.

Die eerste stap kontroleer dat brunch nie is nie meester, en die tweede kontroleer dat die weergawe in die lêer is pom.xml het nie die woord bevat nie KIEZIE

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die tweede stap verander die verbindingskema in developerConnection van HTTPS na 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

Outomatisering van HotFix in Maven-projekte met TeamCity

Maven verhoog foutoplossing

Die taak bestaan ​​uit 6 dele. Dit kon gerefaktoreer gewees het, maar dit werk steeds.

Die eerste stap is om seker te maak dat die brunch dit nie is nie meester. As brunch meester die taak val.

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die tweede Maven-stap is om die bugfix-weergawe in die pom.xml-lêer te verander.

Doelwitte: Maven het alles in een lyn

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die derde stap is om Git-statusinligting en ander te vertoon:

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die vierde stap verander die verbindingskema in developerConnection van HTTPS na GIT.

En stoot veranderinge aan die tak gespesifiseer in Teamcity deur die %BRANCH_FOR_INCREMENT% veranderlike

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Die vyfde stap is om van die lêer af te kom pom.xml weergawe en installeer dit in Spanstad veranderlike TAG_FROM_VERSION. Let daarop dat die weergawe van die lêer pom.xml sonder die letter v voor. En die merker, gebaseer op hierdie weergawe, het reeds die letter v aan die begin.

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

Outomatisering van HotFix in Maven-projekte met TeamCity

Sesde stap - tagging bugfix weergawes. Dit word gedoen met behulp van Maven met die vereiste opsie in Doel.

opsie Doelwitte:

-Dtag=%TAG_FROM_VERSION% scm:tag

Outomatisering van HotFix in Maven-projekte met TeamCity

Bron: will.com

Koop betroubare hosting vir werwe met DDoS-beskerming, VPS VDS-bedieners 🔥 Koop betroubare webwerfhosting met DDoS-beskerming, VPS VDS-bedieners | ProHoster