Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

I dette indlæg vil opsætningen af automatisering af HotFix i Maven-projekter ved brug af TeamCity blive beskrevet.

For at lave en HotFix udføres der normalt mange manuelle handlinger:

  1. Opret en gren til den version, som du vil implementere HotFixet til.
  2. Reparer fejlen i versionen.
  3. Ændr bugfix-versionen i release-grenen.
  4. Udrul tagget for bugfix-versionen.

Punkterne 1, 3 og 4 kan automatiseres.

Inden vi går videre til emnet, vil jeg gerne berøre et vigtigt og komplekst emne — versionsstyring software. Kort sagt kan man forstå Semver ud fra dette screenshot. Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Yderligere oplysninger kan findes på linket: 1.

Alle indstillinger, der er beskrevet i dette indlæg, er baseret på Semver. og Trunk-Based Development..

I Trunk-Based Development skal der oprettes en gren for hver release. Alle ændringer (hotfix) inden for denne release bliver committet til denne gren.

I forbindelse med dette indlæg automatiserer vi følgende ting:

  • CI build.

  • Oprettelse af en ny release.

  • Oprettelse af en gren til releasen.

  • Ændring af bugfix-versionen.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Krav:

Lad os oprette et projekt i TeamCity kaldet „Automation Maven Hotfix“ og dernæst oprette 4 opgaver.

  • CI Build.

  • Opret gren til release.

  • Maven increment bugfix.

  • Maven release.

Screenshot af projektet:

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Generelle indstillinger.

I alle opgaver skal afkrydsningsfeltet „Rens bygning: Slet alle filer i checkout-mappen før bygningen.“ være markeret, da jeg fik fejl uden dette afkrydsningsfelt.

Opretter det eneste VCS. Funktionerne ved VCS er markeret med rødt.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Normalt bruger VCS HTTPS-skemaet. I Gren-specifikation: står det at se på alle grene og alle tags:

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

Det er nødvendigt at oprette 4 konfigurationsparametre.

  • BRANCH_FOR_INCREMENT.
  • TAG_FROM_VERSION.
  • TEAM_USER.
  • TEAM_USER_EMAIL.

Feltet value i BRANCH_FOR_INCREMENT og TAG_FROM_VERSION skal efterlades tomt.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det er nødvendigt at uploade/tilføje den private nøgle. I alle opgaver bortset fra CI Build er den private nøgle nødvendig.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

I hver opgave bortset fra CI Build i sektionen Byg-funktioner skal den private nøgle tilsluttes.

Eksempel for Maven release.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

CI Build.

I opgaven CI Build. er der kun ét trin: mvn clean test.

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Maven release.

I opgaven Maven release. 2 trin. Første trin kontrollerer om grenen er master. Hvis grenen ikke er master, fejler opgaven.

BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
  echo 'Grenen er ikke master';
  echo 'Annullerer';
  exit 1;
fi

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Andet trin er standard mvn release:prepare. med optionen. —batch-mode

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Opret gren til udgivelse

For at oprette en hotfix til udgivelsen skal der oprettes en gren. Dette håndteres af opgaven Opret gren til udgivelse. Den har 2 trin.

Det første trin kontrollerer, at grenen ikke er master, og det andet kontrollerer, at versionen i filen pom.xml ikke indeholdt ordet SNAPSHOT

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

echo "Hent versionspakke fra 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 "Tjek SNAPSHOT"
if [[ $version == "*SNAPSHOT*" ]]; then
    echo "******************* A D V A R S L E* *******************"
    echo "************ Du opretter gren til SNAPSHOTS ******************"
    echo "***********************************************************"
    exit 1
fi

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det andet trin ændrer developerConnection-forbindelsen fra HTTPS til 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

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Maven increment bugfix

Opgaven består af 6 dele. Det kunne være blevet refaktoreret, men det fungerer også.

Det første trin — kontrol af, at grenen ikke er master. Hvis grenen master fejler opgaven.

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

# Her henter vi versionen fra pom.xml-filen
echo "Hent versionspakke fra 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)"`
# Vi må lave checkout til den ønskede gren.
# Ellers viser git status detached til den ønskede gren.
# Det skal være sådan, at git status viser bare grenen
git checkout $BRANCH
# Eksportér bash-variablen til Teamcity-variablen til senere brug.
echo "##teamcity[setParameter name='BRANCH_FOR_INCREMENT' value='$BRANCH']"

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det andet Maven trin ændrer bugfix-versionen i pom.xml-filen.

Mål: hos maven er alt på én linje

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

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det tredje trin — visning af oplysninger om Git-status og andre:

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

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det fjerde trin ændrer developerConnection-forbindelsen fra HTTPS til GIT.

Og pusher ændringerne til den gren, der er angivet i Teamcity-variablen %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%

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det femte trin henter fra filen pom.xml versionen og sætter den i Teamcity variabel TAG_FROM_VERSION.. Bemærk, at versionen fra filen pom.xml uden bogstavet v foran. Og tagget, baseret på denne version, har allerede bogstavet v i starten.

echo "Hent versionspakke fra 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']"

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Det sjette trin — taggning bugfix versioner. Dette gøres ved hjælp af Maven med den ønskede indstilling i Mål.

Mulighed Mål:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatisering af HotFix i Maven-projekter ved brug af TeamCity.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster