Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ HotFix Π² Maven ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Teamcity.
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ HotFix ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π±ΡΠ°Π½Ρ Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΊΠ°ΡΡΠ²Π°ΡΡ HotFix
- ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΡΠ΅Π»ΠΈΠ·Π΅
- ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ bugfix Π²Π΅ΡΡΠΈΡ Π² ΡΠ΅Π»ΠΈΠ·Π½ΠΎΠΌ Π±ΡΠ°Π½ΡΠ΅
- ΠΡΠΊΠ°ΡΠΈΡΡ ΡΠ΅Π³ bugfix Π²Π΅ΡΡΠΈΠΈ
ΠΡΠ½ΠΊΡΡ 1,3,4 ΠΌΠΎΠΆΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ΅ΠΌΠ΅, Ρ ΠΎΡΠ΅ΡΡΡ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ΅ΠΌΡ β Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠ°ΡΠΊΠΎ ΠΎ Semver ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ Π½Π° ΡΡΠΎΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅:
ΠΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π°
Π Trunk-Based Development Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ Π±ΡΠ°Π½Ρ. ΠΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ (hotfix) Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° ΠΊΠΎΠΌΠΌΠΈΡΡΡΡΡ Π² ΡΡΠΎΡ Π±ΡΠ°Π½Ρ.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π΅ΡΠΈ:
-
CI ΡΠ±ΠΎΡΠΊΠ°
-
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°
-
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±ΡΠ°Π½ΡΠ° Π΄Π»Ρ ΡΠ΅Π»ΠΈΠ·Π°
-
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ bugfix Π²Π΅ΡΡΠΈΠΈ
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- 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 (Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°)
Π‘ΠΊΡΠΈΠ½ΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
ΠΠ±ΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
ΠΠΎ Π²ΡΠ΅Ρ ΡΠ°ΡΠΊΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΡΠ°Π²ΠΈΡΡ Π³Π°Π»ΠΊΡ «Clean build: Delete all files in the checkout directory before the build«, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΡΠΎΠΉ Π³Π°Π»ΠΊΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ VCS. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ VCS ΠΎΠ±Π²Π΅Π΄Π΅Π½Π½Ρ ΠΊΡΠ°ΡΠ½ΡΠΌ.
ΠΠ±ΡΡΠ½ΠΎ 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 Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΡΡΡΠΌ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ°ΡΠ°ΡΡ/Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ. ΠΠΎ Π²ΡΠ΅Ρ ΡΠ°ΡΠΊΠ°Ρ ΠΊΡΠΎΠΌΠ΅ CI Build Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΠΊΠ΅ ΠΊΡΠΎΠΌΠ΅ CI Build Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Build Features Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Maven release
CI Build**.
Π ΡΠ°ΡΠΊΠ΅ CI Build Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ mvn clean test
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
ΠΡΠΎΡΠΎΠΉ ΡΠ°Π³ ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ mvn release:prepare c ΠΎΠΏΡΠΈΠ΅ΠΉ —batch-mode
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
ΠΡΠΎΡΠΎΠΉ ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π² 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
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']"
ΠΡΠΎΡΠΎΠΉ Maven ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ bugfix Π²Π΅ΡΡΠΈΠΈ Π² ΡΠ°ΠΉΠ»Π΅ pom.xml.
Goals: Ρ maven Π²ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
Π’ΡΠ΅ΡΠΈΠΉ ΡΠ°Π³ β Π²ΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ 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
Π§Π΅ΡΠ²Π΅ΡΡΡΠΉ ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π² 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%
ΠΡΡΡΠΉ ΡΠ°Π³ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ· ΡΠ°ΠΉΠ»Π° 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']"
Π¨Π΅ΡΡΠΎΠΉ ΡΠ°Π³ β ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ bugfix Π²Π΅ΡΡΠΈΠΈ. ΠΠ΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Maven Ρ Π½ΡΠΆΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠ΅ΠΉ Π² Goal.
ΠΠΏΡΠΈΡ Goals:
-Dtag=%TAG_FROM_VERSION% scm:tag
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com