Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Dizze post sil it ynstellen fan HotFix-automatisearring beskriuwe yn Maven-projekten mei Teamcity.

Om HotFix te dwaan, wurde normaal in protte hânmjittige stappen dien:

  1. Meitsje in brunch foar de release wêrop jo HotFix wolle útrolje
  2. Reparearje in brek yn release
  3. Feroarje de bugfix ferzje yn 'e release branch
  4. Rôlje út bugfix ferzje tag

Пункты 1,3,4 можно автоматизировать.

Foardat wy nei it ûnderwerp gean, wol ik graach in wichtich en kompleks ûnderwerp oanreitsje - ferzje software. Jo kinne Semver koart begripe yn dizze skermôfbylding. Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Jo kinne mear lêze op de link: 1.

Alle ynstellingen beskreaun yn dizze post binne basearre op Semver и Trunk-basearre ûntwikkeling.

Yn Trunk-Based Development moatte jo jo eigen branch meitsje foar elke release. Alle wizigingen (hotfixes) binnen dizze útjefte binne ynsette foar dizze branch.

As ûnderdiel fan dizze post sille wy de folgjende dingen automatisearje:

  • CI bouwe

  • It meitsjen fan in nije release

  • It meitsjen fan in release branch

  • It feroarjen fan de bugfix ferzje

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Easken:

Litte wy it projekt "Automation Maven Hotfix" oanmeitsje yn Teamcity en dêr 4 taken oanmeitsje.

  • CI Bouwe

  • Meitsje branch foar frijlitting

  • Maven increment bugfix (feroarje bugfix ferzje))

  • Maven release (in nije release oanmeitsje)

Projekt skermôfbylding:

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Algemiene ynstellings

Во всех тасках необходимо выставить галку «Clean build: wiskje alle bestannen yn 'e kassamap foar it bouwen“, want sûnder dit karfakje krige ik flaters.

Wy meitsje in inkele VCS. VCS-funksjes wurde yn read rûn.

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Typysk brûke VCS's it HTTPS-skema. YN Branch spesifikaasje: oanjûn om alle brunches en alle tags te besjen:

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

It is nedich om 4 konfiguraasjeparameters te meitsjen.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

It weardefjild yn BRANCH_FOR_INCREMENT en TAG_FROM_VERSION moat leech bliuwe.

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Необходимо закачать/добавить приватный ключ. Во всех тасках кроме CI Build необходим приватный ключ.

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Yn elke taak, útsein CI Build, yn 'e Build Features seksje moatte jo in privee kaai ferbine.

Foarbyld foar Maven release

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

CI Build**.

Yn in taak CI Bouwe mar ien stap mvn skjinne test

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Maven release

Yn in taak Maven release 2 stappen. De earste stap is om te kontrolearjen dat brunch is master. As brunch is net master, dan falt de taak.

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De twadde stap is standert mvn release: tariede mei opsje --batch-modus

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Meitsje branch foar frijlitting

Foar in meitsje in hotfix foar in release jo moatte meitsje in tûke. Dit is wat de taak docht Meitsje branch foar frijlitting. Se hat 2 stappen.

De earste stap kontrolearret dat brunch net is master, en de twadde kontrolearret dat de ferzje yn it bestân is pom.xml it wurd net befette SNAPSHOT

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De twadde stap feroaret it ferbiningskema yn developerConnection fan HTTPS nei 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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Maven fergruttet bugfix

De taak bestiet út 6 dielen. It koe wurde refactored, mar it wurket noch.

De earste stap is om te kontrolearjen dat de brunch net is master. As brunch master de taak falt.

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De twadde Maven-stap is it feroarjen fan de bugfix-ferzje yn it pom.xml-bestân.

doelen: Maven hat alles yn ien rigel

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De tredde stap is om Git-statusynformaasje en oaren te werjaan:

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De fjirde stap feroaret it ferbiningskema yn developerConnection fan HTTPS nei GIT.

En triuwt feroarings oan 'e branch spesifisearre yn Teamcity troch de %BRANCH_FOR_INCREMENT% fariabele

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

De fyfde stap is it krijen fan it bestân pom.xml ferzje en ynstallearret it yn Teamcity fariabele TAG_FROM_VERSION. Tink derom dat de ferzje fan it bestân pom.xml sûnder de letter v foaryn. En de tag, basearre op dizze ferzje, hat al de letter v oan it begjin.

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

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Seisde stap - tagging bugfix версии. Делается это с помощью Maven с нужной опцией в Doelpunt.

Opsje Doel:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatisearring fan HotFix yn Maven-projekten mei TeamCity

Boarne: www.habr.com

Add a comment