Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’ этом постС Π±ΡƒΠ΄Π΅Ρ‚ описана настройка Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм Teamcity.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ HotFix ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСлаСтся ΠΌΠ½ΠΎΠ³ΠΎ Ρ€ΡƒΡ‡Π½Ρ‹Ρ… дСйствий:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Ρ€Π°Π½Ρ‡ для Ρ€Π΅Π»ΠΈΠ·Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ HotFix
  2. Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π΅Π»ΠΈΠ·Π΅
  3. Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΡ‚ΡŒ bugfix Π²Π΅Ρ€ΡΠΈΡŽ Π² Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΌ Π±Ρ€Π°Π½Ρ‡Π΅
  4. Π’Ρ‹ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅Π³ bugfix вСрсии

ΠŸΡƒΠ½ΠΊΡ‚Ρ‹ 1,3,4 ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ‚Π΅ΠΌΠ΅, хочСтся Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ β€” вСрсионирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. ΠšΡ€Π°Ρ‚ΠΊΠΎ ΠΎ Semver ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π° этом ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅. Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС: 1.

ВсС настройки описанныС Π² этом постС ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π½Π° Semver ΠΈ Trunk-Based Development.

Π’ Trunk-Based Development для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π±Ρ€Π°Π½Ρ‡. ВсС измСнСния (hotfix) Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого Ρ€Π΅Π»ΠΈΠ·Π° коммитятся Π² этот Π±Ρ€Π°Π½Ρ‡.

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этого поста Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ:

  • CI сборка

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Ρ€Π°Π½Ρ‡Π° для Ρ€Π΅Π»ΠΈΠ·Π°

  • ИзмСнСниС bugfix вСрсии

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ВрСбования:

  • Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ для хранСния вашСго ΠΊΠΎΠ΄Π°. Π’ постС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Teamcity сСрвСр ΠΈ Π°Π³Π΅Π½Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ свой Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Teamcity сСрвСр ΠΈ Π°Π³Π΅Π½Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker-compose
  • Π’Π°ΠΌ Π³Π΄Π΅ Ρƒ вас Teamcity Π°Π³Π΅Π½Ρ‚, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ установлСны java, maven, git

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Teamcity ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ «Automation Maven Hotfix» ΠΈ создадим Ρ‚Π°ΠΌ 4 таски.

  • CI Build (CI сборка)

  • Create branch for release (Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Ρ€Π°Π½Ρ‡Π° для Ρ€Π΅Π»ΠΈΠ·Π°)

  • Maven increment bugfix (ИзмСнСниС bugfix вСрсии))

  • Maven release (Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°)

Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ΠžΠ±Ρ‰ΠΈΠ΅ настройки

Π’ΠΎ всСх тасках Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Π°Π»ΠΊΡƒ «Clean build: Delete all files in the checkout directory before the build«, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ отстутствии этой Π³Π°Π»ΠΊΠΈ Ρƒ мСня появлялись ошибки.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ СдинствСнный VCS. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ VCS ΠΎΠ±Π²Π΅Π΄Π΅Π½Π½Ρ‹ красным.

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ VCS ΠΈΡΠΏΠΎΠ»ΡŒΡƒΡŽΡ‚ схСму HTTPS. Π’ Branch specification: ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π±Ρ€Π°Π½Ρ‡ΠΈ ΠΈ всС Ρ‚Π΅Π³ΠΈ:

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

НСобходимо ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ 4 Configuration Parameters.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

ПолС value Π² BRANCH_FOR_INCREMENT ΠΈ TAG_FROM_VERSION Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ пустым.

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

НСобходимо Π·Π°ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ/Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡. Π’ΠΎ всСх тасках ΠΊΡ€ΠΎΠΌΠ΅ CI Build Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ таскС ΠΊΡ€ΠΎΠΌΠ΅ CI Build Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Build Features Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Maven release

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

CI Build**.

Π’ таскС CI Build всСго лишь ΠΎΠ΄ΠΈΠ½ шаг mvn clean test

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Maven release

Π’ таскС Maven release 2 шага. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг провСряСт Ρ‡Ρ‚ΠΎ Π±Ρ€Π°Π½Ρ‡ это master. Если Π±Ρ€Π°Π½Ρ‡ Π½Π΅ master, Ρ‚ΠΎ таска ΠΏΠ°Π΄Π°Π΅Ρ‚.

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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’Ρ‚ΠΎΡ€ΠΎΠΉ шаг это стандартный mvn release:prepare c ΠΎΠΏΡ†ΠΈΠ΅ΠΉ —batch-mode

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Create branch for release

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ hotfix для Ρ€Π΅Π»ΠΈΠ·Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Ρ€Π°Π½Ρ‡. Π­Ρ‚ΠΈΠΌ занимаСтся таска Create branch for release. Π£ Π½Π΅Π΅ 2 шага.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг провСряСт Ρ‡Ρ‚ΠΎ Π±Ρ€Π°Π½Ρ‡ Π½Π΅ master, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ провСряСт Ρ‡Ρ‚ΠΎ вСрсия Π² Ρ„Π°ΠΉΠ»Π΅ pom.xml Π½Π΅ содСрТало слово 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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’Ρ‚ΠΎΡ€ΠΎΠΉ шаг измСняСт Π² developerConnection схСму ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с HTTPS Π½Π° 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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Maven increment bugfix

Васка состоит ΠΈΠ· 6 частСй. МоТно Π±Ρ‹Π»ΠΎ ΠΎΡ‚Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΈ Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Ρ‚ΠΎ Π±Ρ€Π°Π½Ρ‡ Π½Π΅ master. Если Π±Ρ€Π°Π½Ρ‡ master таска ΠΏΠ°Π΄Π°Π΅Ρ‚.

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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Maven шаг ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ bugfix вСрсии Π² Ρ„Π°ΠΉΠ»Π΅ pom.xml.

Goals: Ρƒ maven всС ΠΎΠ΄Π½ΠΎΠΉ строкой

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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π’Ρ€Π΅Ρ‚ΠΈΠΉ шаг β€” Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Git status ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅:

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

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ шаг измСняСт Π² developerConnection схСму ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с HTTPS Π½Π° GIT.

И ΠΏΡƒΡˆΠΈΡ‚ измСнСния Π² Π²Π΅Ρ‚ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π² Teamcity ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ %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%

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ΠŸΡΡ‚Ρ‹ΠΉ шаг ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° pom.xml Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ устанавливаСт Π΅Π΅ Π² Teamcity ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ TAG_FROM_VERSION. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ вСрсия ΠΈΠ· Ρ„Π°ΠΉΠ»Π° pom.xml Π±Π΅Π· Π±ΡƒΠΊΠ²Ρ‹ v Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ. А Ρ‚Π΅Π³, Π½Π° основС этой вСрсии ΡƒΠΆΠ΅ с Π±ΡƒΠΊΠ²ΠΎΠΉ 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']"

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

ШСстой шаг β€” Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ bugfix вСрсии. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Maven с Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Π² Goal.

ΠžΠΏΡ†ΠΈΡ Goals:

-Dtag=%TAG_FROM_VERSION% scm:tag

Автоматизация HotFix Π² Maven ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с использованиСм TeamCity

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ