Automatizace HotFix v projektech Maven pomocí TeamCity

Tento příspěvek popisuje nastavení automatizace HotFix v projektech Maven pomocí Teamcity.

K provedení HotFix se obvykle provádí mnoho ručních kroků:

  1. Vytvořte brunch pro vydání, na které chcete zavést HotFix
  2. Opravte chybu ve vydání
  3. Změňte verzi opravy chyb ve větvi vydání
  4. Zaveďte značku verze opravy chyb

Body 1,3,4 lze automatizovat.

Než přejdeme k tématu, rád bych se dotkl důležitého a složitého tématu - verzování software. Na tomto snímku obrazovky můžete stručně pochopit Semver. Automatizace HotFix v projektech Maven pomocí TeamCity

Více si můžete přečíst na odkazu: 1.

Všechna nastavení popsaná v tomto příspěvku jsou založena na Semver и Trunk-Based Development.

V Trunk-Based Development musíte pro každé vydání vytvořit vlastní větev. Všechny změny (opravy hotfix) v rámci této verze se týkají této větve.

V rámci tohoto příspěvku zautomatizujeme následující věci:

  • Sestavení CI

  • Vytváření nového vydání

  • Vytvoření větve vydání

  • Změna verze opravy chyb

Automatizace HotFix v projektech Maven pomocí TeamCity

Požadavky:

Vytvoříme projekt „Automation Maven Hotfix“ v Teamcity a vytvoříme tam 4 úkoly.

  • Sestavení CI

  • Vytvořte větev pro uvolnění

  • Přírůstek opravy chyby Maven (Změna verze opravy chyb))

  • Vydání Maven (Vytvoření nového vydání)

Snímek obrazovky projektu:

Automatizace HotFix v projektech Maven pomocí TeamCity

Obecná nastavení

Ve všech úkolech musíte zaškrtnout políčko "Čisté sestavení: Před sestavením odstraňte všechny soubory v adresáři pokladny“, protože bez tohoto zaškrtávacího políčka jsem dostal chyby.

Vytváříme jeden VCS. Prvky VCS jsou zakroužkovány červeně.

Automatizace HotFix v projektech Maven pomocí TeamCity

VCS obvykle používají schéma HTTPS. V Specifikace pobočky: je uvedeno, že chcete sledovat všechny brunche a všechny značky:

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

Je nutné vytvořit 4 konfigurační parametry.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Pole hodnoty v BRANCH_FOR_INCREMENT a TAG_FROM_VERSION musí zůstat prázdné.

Automatizace HotFix v projektech Maven pomocí TeamCity

Musíte nahrát/přidat soukromý klíč. Všechny úlohy kromě CI Build vyžadují soukromý klíč.

Automatizace HotFix v projektech Maven pomocí TeamCity

V každé úloze, kromě CI Build, v části Build Features musíte připojit soukromý klíč.

Příklad pro Vydání Maven

Automatizace HotFix v projektech Maven pomocí TeamCity

CI Build**.

V úkolu Sestavení CI jen jeden krok mvn čistý test

Automatizace HotFix v projektech Maven pomocí TeamCity

Vydání Maven

V úkolu Vydání Maven 2 kroky. Prvním krokem je zkontrolovat, zda je brunch mistr. Pokud není brunch mistr, pak úkol padne.

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Druhý krok je standardní mvn release:připravit s opcí --dávkový režim

Automatizace HotFix v projektech Maven pomocí TeamCity

Vytvořte větev pro uvolnění

Chcete-li vytvořit opravu hotfix pro vydání, musíte vytvořit větev. To je to, co úkola dělá Vytvořte větev pro uvolnění. Má 2 kroky.

První krok zkontroluje, že brunch není mistra druhý zkontroluje, zda je verze v souboru pom.xml slovo neobsahovalo MOMENTKA

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Druhý krok změní schéma připojení v developerConnection z 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

Automatizace HotFix v projektech Maven pomocí TeamCity

Přírůstek opravy chyby Maven

Úkol se skládá ze 6 částí. Mohlo to být refaktorováno, ale stále to funguje.

Prvním krokem je zkontrolovat, zda není brunch mistr. Pokud brunch mistr úkol padá.

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Druhým krokem Maven je změna verze opravy chyb v souboru pom.xml.

Cíle: Maven má vše v jedné linii

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Třetím krokem je zobrazení informací o stavu Git a dalších:

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Čtvrtý krok změní schéma připojení v developerConnection z HTTPS na GIT.

A vloží změny do větve určené v Teamcity proměnnou %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%

Automatizace HotFix v projektech Maven pomocí TeamCity

Pátým krokem je získání ze souboru pom.xml verzi a nainstaluje ji Týmové město variabilní TAG_FROM_VERSION. Všimněte si, že verze ze souboru pom.xml bez písmene v vpředu. A tag na základě této verze už má na začátku písmeno v.

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

Automatizace HotFix v projektech Maven pomocí TeamCity

Šestý krok – značkování oprava chyby verze. To se provádí pomocí Maven s požadovanou možností v Cíl.

Možnost Cíle:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automatizace HotFix v projektech Maven pomocí TeamCity

Zdroj: www.habr.com

Přidat komentář