АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Π’Π°Π·ΠΈ публикация Ρ‰Π΅ опишС настройката Π½Π° HotFix автоматизация Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Teamcity.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ HotFix, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС правят ΠΌΠ½ΠΎΠ³ΠΎ Ρ€ΡŠΡ‡Π½ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π±Ρ€ΡŠΠ½Ρ‡ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, към ΠΊΠΎΠ΅Ρ‚ΠΎ искатС Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ HotFix
  2. ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ
  3. ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ вСрсията Π½Π° корСкцията Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΊΠ»ΠΎΠ½Π° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ
  4. РазпространСтС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π·Π° вСрсия Π½Π° корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ

Π’ΠΎΡ‡ΠΊΠΈ 1,3,4 ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Ρ‚Π΅ΠΌΠ°Ρ‚Π°, Π±ΠΈΡ… искал Π΄Π° засСгна Π΅Π΄Π½Π° Π²Π°ΠΆΠ½Π° ΠΈ слоТна Ρ‚Π΅ΠΌΠ° - създаванС Π½Π° вСрсии софтуСр. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Semver Π² Ρ‚Π°Π·ΠΈ Π΅ΠΊΡ€Π°Π½Π½Π° снимка. АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠ°: 1.

Всички настройки, описани Π² Ρ‚Π°Π·ΠΈ публикация, сС основават Π½Π° Π‘Π΅ΠΌΠ²ΡŠΡ€ ΠΈ Trunk-Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅.

Π’ Trunk-Based Development трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ свой собствСн ΠΊΠ»ΠΎΠ½ Π·Π° всяко ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. Всички ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ (Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ) Π² Ρ‚Π°Π·ΠΈ вСрсия са Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½ΠΈ към Ρ‚ΠΎΠ·ΠΈ ΠΊΠ»ΠΎΠ½.

ΠšΠ°Ρ‚ΠΎ част ΠΎΡ‚ Ρ‚Π°Π·ΠΈ публикация Ρ‰Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ слСднитС Π½Π΅Ρ‰Π°:

  • CI ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅

  • БъздаванС Π½Π° Π½ΠΎΠ²Π° вСрсия

  • БъздаванС Π½Π° ΠΊΠ»ΠΎΠ½ Π·Π° освобоТдаванС

  • ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° вСрсията Π½Π° корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Изисквания:

  • Git Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° вашия ΠΊΠΎΠ΄. ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡΡ‚Π° Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Teamcity ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π°Π³Π΅Π½Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ²Π΄ΠΈΠ³Π½Π΅Ρ‚Π΅ вашия Π»ΠΎΠΊΠ°Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π°Π³Π΅Π½Ρ‚ Π½Π° Teamcity, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΄ΠΎΠΊΠ΅Ρ€-Π½ΠΎΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅
  • Π’Π°ΠΌ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π°Π³Π΅Π½Ρ‚ Π½Π° Teamcity, трябва Π΄Π° са инсталирани java, maven, git

НСка създадСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€žAutomation Maven Hotfixβ€œ Π² Teamcity ΠΈ Π΄Π° създадСм 4 Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΌ.

  • CI Build

  • Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ Π·Π° освобоТдаванС

  • Maven ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ (ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° вСрсията Π½Π° корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ))

  • ВСрсия Π½Π° Maven (БъздаванС Π½Π° Π½ΠΎΠ²Π° вСрсия)

Π•ΠΊΡ€Π°Π½Π½Π° снимка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

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

Π’ΡŠΠ² всички Π·Π°Π΄Π°Ρ‡ΠΈ трябва Π΄Π° поставитС ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‡Π΅Ρ‚ΠΎ "Чиста компилация: Π˜Π·Ρ‚Ρ€ΠΈΠΉΡ‚Π΅ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² дирСкторията Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅ ΠΏΡ€Π΅Π΄ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡΡ‚Π°β€œ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π±Π΅Π· Ρ‚ΠΎΠ²Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‡Π΅ Π·Π° ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌ Π³Ρ€Π΅ΡˆΠΊΠΈ.

БъздавамС Π΅Π΄ΠΈΠ½ VCS. Π₯арактСристикитС Π½Π° VCS са ΠΎΠ³Ρ€Π°Π΄Π΅Π½ΠΈ Π² Ρ‡Π΅Ρ€Π²Π΅Π½ΠΎ.

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

ОбикновСно VCS ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ HTTPS схСмата. IN БпСцификация Π½Π° ΠΊΠ»ΠΎΠ½Π°: ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π·Π° Π³Π»Π΅Π΄Π°Π½Π΅ Π½Π° всички Π±Ρ€ΡŠΠ½Ρ‡ΠΎΠ²Π΅ ΠΈ всички Ρ‚Π°Π³ΠΎΠ²Π΅:

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

НСобходимо Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ 4 ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

ΠŸΠΎΠ»Π΅Ρ‚ΠΎ Π·Π° стойност Π² BRANCH_FOR_INCREMENT ΠΈ TAG_FROM_VERSION трябва Π΄Π° останС ΠΏΡ€Π°Π·Π½ΠΎ.

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Врябва Π΄Π° ΠΊΠ°Ρ‡ΠΈΡ‚Π΅/Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ частСн ΠΊΠ»ΡŽΡ‡. Всички Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° CI Build изискват частСн ΠΊΠ»ΡŽΡ‡.

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Π’ΡŠΠ² всяка Π·Π°Π΄Π°Ρ‡Π°, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° CI Build, Π² сСкцията Build Features трябва Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ частСн ΠΊΠ»ΡŽΡ‡.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ИздаванС Π½Π° Maven

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

CI Build**.

Π’ Π·Π°Π΄Π°Ρ‡Π° CI Build само Π΅Π΄Π½Π° ΠΊΡ€Π°Ρ‡ΠΊΠ° mvn чист тСст

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

ИздаванС на Maven

Π’ Π·Π°Π΄Π°Ρ‡Π° ИздаванС Π½Π° Maven 2 ΡΡ‚ΡŠΠΏΠΊΠΈ. ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Π±Ρ€ΡŠΠ½Ρ‡ΡŠΡ‚ Π΅ Ρ‚Π°ΠΊΡŠΠ² майстор. Ако Π±Ρ€ΡŠΠ½Ρ‡ΡŠΡ‚ Π½Π΅ Π΅ майстор, Ρ‚ΠΎΠ³Π°Π²Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΏΠ°Π΄Π°.

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 освобоТдаванС: ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° с опция --ΠΏΠ°Ρ€Ρ‚ΠΈΠ΄Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ Π·Π° освобоТдаванС

Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° корСкция Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠ»ΠΎΠ½. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ taska Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΠΎΠ½ Π·Π° освобоТдаванС. Вя ΠΈΠΌΠ° 2 ΡΡ‚ΡŠΠΏΠΊΠΈ.

ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° провСрява Π΄Π°Π»ΠΈ Π±Ρ€ΡŠΠ½Ρ‡ΡŠΡ‚ Π½Π΅ Π΅ Ρ‚Π°ΠΊΡŠΠ² майстор, Π° вторият провСрява Π΄Π°Π»ΠΈ вСрсията Π΅ във Ρ„Π°ΠΉΠ»Π° pom.xml Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΡƒΠΌΠ°Ρ‚Π° ΠœΠžΠœΠ•ΠΠ’ΠΠ›ΠΠ БНИМКА

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

Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ 6 части. МоТСшС Π΄Π° бъдС ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ, Π½ΠΎ всС ΠΎΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ.

ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Π±Ρ€ΡŠΠ½Ρ‡ΡŠΡ‚ Π½Π΅ Π΅ Ρ‚Π°ΠΊΡŠΠ² майстор. Ако Π±Ρ€ΡŠΠ½Ρ‡ майстор Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΏΠ°Π΄Π°.

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 Π΅ промяна Π½Π° вСрсията Π½Π° корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ във Ρ„Π°ΠΉΠ»Π° pom.xml.

Π¦Π΅Π»ΠΈ: Maven ΠΈΠΌΠ° всичко Π½Π° Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄

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

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

Π’Ρ€Π΅Ρ‚Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ информация Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Git ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ:

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

ШСста ΡΡ‚ΡŠΠΏΠΊΠ° - ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ° Π½Π° бъг вСрсии. Π’ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Maven с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° опция Π² Π¦Π΅Π».

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ Π¦Π΅Π»ΠΈΡ‚Π΅ Π½Π°:

-Dtag=%TAG_FROM_VERSION% scm:tag

АвтоматизиранС Π½Π° HotFix Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° Maven с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° TeamCity

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€