Automatisering av HotFix i Maven-projekt med TeamCity

Det här inlägget kommer att beskriva hur du ställer in HotFix-automatisering i Maven-projekt med Teamcity.

För att göra HotFix görs vanligtvis många manuella steg:

  1. Skapa en brunch för releasen du vill rulla ut HotFix till
  2. Fixa en bugg i release
  3. Ändra bugfixversionen i releasegrenen
  4. Rulla ut versionstaggen för bugfix

Punkterna 1,3,4 kan automatiseras.

Innan vi går vidare till ämnet skulle jag vilja beröra ett viktigt och komplext ämne - versionshantering programvara. Du kan kortfattat förstå Semver i den här skärmdumpen. Automatisering av HotFix i Maven-projekt med TeamCity

Du kan läsa mer på länken: 1.

Alla inställningar som beskrivs i det här inlägget är baserade på Semver и Trunk-baserad utveckling.

I Trunk-Based Development måste du skapa din egen filial för varje release. Alla ändringar (snabbkorrigeringar) inom den här utgåvan är förpliktade till denna gren.

Som en del av det här inlägget kommer vi att automatisera följande saker:

  • CI-bygge

  • Skapar en ny version

  • Skapa en utgivningsgren

  • Ändra bugfixversionen

Automatisering av HotFix i Maven-projekt med TeamCity

krav:

Låt oss skapa projektet "Automation Maven Hotfix" i Teamcity och skapa 4 uppgifter där.

  • CI Bygg

  • Skapa filial för release

  • Maven inkrementera bugfix (Ändra bugfixversion))

  • Maven release (Skapar en ny release)

Projektets skärmdump:

Automatisering av HotFix i Maven-projekt med TeamCity

Allmänna inställningar

I alla uppgifter måste du markera rutan "Ren bygg: Ta bort alla filer i kassakatalogen före bygget", för utan den här kryssrutan fick jag fel.

Vi skapar en enda VCS. VCS-funktioner är inringade i rött.

Automatisering av HotFix i Maven-projekt med TeamCity

Vanligtvis använder VCS:er HTTPS-schemat. I Branschspecifikation: indikerad att titta på alla bruncher och alla taggar:

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

Det är nödvändigt att skapa 4 konfigurationsparametrar.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Värdefältet i BRANCH_FOR_INCREMENT och TAG_FROM_VERSION måste lämnas tomt.

Automatisering av HotFix i Maven-projekt med TeamCity

Du måste ladda upp/lägga till en privat nyckel. Alla uppgifter utom CI Build kräver en privat nyckel.

Automatisering av HotFix i Maven-projekt med TeamCity

I varje uppgift, förutom CI Build, i avsnittet Byggfunktioner måste du ansluta en privat nyckel.

Exempel för Maven släpper

Automatisering av HotFix i Maven-projekt med TeamCity

CI Build**.

I en uppgift CI Bygg bara ett steg mvn rent test

Automatisering av HotFix i Maven-projekt med TeamCity

Maven släpper

I en uppgift Maven släpper 2 steg. Det första steget är att kontrollera att brunch är Master. Om brunch inte är det Master, då faller uppgiften.

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

Automatisering av HotFix i Maven-projekt med TeamCity

Det andra steget är standard mvn release: förbereda med option --batch-läge

Automatisering av HotFix i Maven-projekt med TeamCity

Skapa filial för release

För att skapa en snabbkorrigering för en version måste du skapa en filial. Detta är vad taskan gör Skapa filial för release. Hon har 2 steg.

Det första steget kontrollerar att brunch inte är det Master, och den andra kontrollerar att versionen finns i filen pom.xml innehöll inte ordet STILLBILD

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

Automatisering av HotFix i Maven-projekt med TeamCity

Det andra steget ändrar anslutningsschemat i developerConnection från HTTPS till 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 av HotFix i Maven-projekt med TeamCity

Maven ökar buggfixen

Uppgiften består av 6 delar. Det kunde ha omfaktorts, men det fungerar fortfarande.

Det första steget är att kontrollera att brunchen inte är det Master. Om brunch Master uppgiften faller.

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

Automatisering av HotFix i Maven-projekt med TeamCity

Det andra Maven-steget är att ändra bugfixversionen i filen pom.xml.

Mål: Maven har allt på en rad

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

Automatisering av HotFix i Maven-projekt med TeamCity

Det tredje steget är att visa Git-statusinformation och annat:

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 av HotFix i Maven-projekt med TeamCity

Det fjärde steget ändrar anslutningsschemat i developerConnection från HTTPS till GIT.

Och skjuter ändringar till grenen specificerad i Teamcity av variabeln %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 av HotFix i Maven-projekt med TeamCity

Det femte steget är att hämta från filen pom.xml version och installerar den i Teamcity variabel TAG_FROM_VERSION. Observera att versionen från filen pom.xml utan bokstaven v framför. Och taggen, baserat på den här versionen, har redan bokstaven v i början.

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

Automatisering av HotFix i Maven-projekt med TeamCity

Sjätte steget - taggning buggfix versioner. Detta görs med hjälp av Maven med önskat alternativ i Mål.

alternativ Mål:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatisering av HotFix i Maven-projekt med TeamCity

Källa: will.com

Lägg en kommentar