ืืขืจ ืคึผืึธืกืื ืืืขื ืืึทืฉืจืืึทืื ืืึทืฉืืขืืืงื HotFix ืึธืืึทืืืืฉืึทื ืืื Maven ืคึผืจืึทืืืฉืขืงืก ื ืืฆื Teamcity.
ืฆื ืืึธื HotFix, ืึท ืคึผืืึทืฅ ืคืื ืืึทื ืืึทื ืกืืขืคึผืก ืืขื ืขื ืืืืฉืึทืืืึทืื ืืืจืืืขืงืึธืื:
- ืฉืึทืคึฟื ืึท ืืจืึทื ืืฉ ืคึฟืึทืจ ืื ืืขืืืื ื ืืืจ ืืืืื ืฆื ืจืึธืืื HotFix ืฆื
- ืคืึทืจืจืืืื ืึท ืืฉืืง ืืื ืืขืืืื ื
- ืืืืฉื ืื ืืืืคืืงืก ืืืขืจืกืืข ืืื ืื ืืขืืืื ื ืฆืืืืึทื
- ืืขืื ืืืืก ืื ืืืืคืืงืก ืืืขืจืกืืข ืงืืืืื
ืืืืืื 1,3,4 ืงืขื ืขื ืืืื ืึธืืึทืืืืืื.
ืืืืืขืจ ืืืจ ืืืืขื ืืืืขืจ ืฆื ืืขืจ ืืขืืข, ืืืื ืืื ืึธื ืจืืจื ืึท ืืืืืืืงืข ืืื ืงืึธืืคึผืืืฆืืจืืข ืืขืืข - ืืืขืจืกืืข ืืืืืืืืืจื. ืืืจ ืงืขื ืขื ืืขืงืืฆืขืจ ืคึฟืึทืจืฉืืืื Semver ืืื ืืขื ืกืงืจืขืขื ืฉืึธื.
ืืืจ ืงืขื ื ืืืืขื ืขื ืืขืจ ืืืืฃ ืืขื ืืื ืง:
ืึทืืข ืกืขืืืื ืืก ืืืกืงืจืืืื ืืื ืืขื ืคึผืึธืกืื ืืขื ืขื ืืืืืจื ืืืืฃ
ืืื ืืจืื ืง-ืืืืืจื ืึทื ืืืืืงืืื ื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืืืื ืืืืืขื ืข ืฆืืืืึทื ืคึฟืึทืจ ืืขืืขืจ ืืขืืืื ื. ืึทืืข ืขื ืืขืจืื ืืขื (ืืึธืืคืืงืกืื) ืืื ืืขื ืืขืืืื ื ืืขื ืขื ืืืืื ืืขื ืฆื ืืขื ืฆืืืืึทื.
ืืื ืึท ืืืื ืคืื ืืขื ืคึผืึธืกืื, ืืืจ ืืืขืื ืึธืืึทืืืื ืื ืคืืืืขื ืืข ืืื ืื:
-
CI ืืืืขื
-
ืฉืึทืคึฟื ืึท ื ืืึทืข ืืขืืืื ื
-
ืฉืืคื ืึท ืืขืืืื ื ืฆืืืืึทื
-
ืืืืฉื ืื ืืืืคืืงืก ืืืขืจืกืืข
ืจืขืงืืืืจืขืืขื ืฅ:
- ืืื ืจืืคึผืึทืืึทืืึธืจื ืคึฟืึทืจ ืกืืึธืจืื ื ืืืื ืงืึธื. ืืขืจ ืคึผืึธืกืื ืืืขื ื ืืฆื ืื ืจืืคึผืึทืืึทืืึธืจื
https://gitlab.com/anton_patsev/automation-maven-hotfix . - Teamcity ืกืขืจืืืขืจ ืืื ืึทืืขื ื. ืืืจ ืงืขื ืขื ืืึทืคึผื ืืืื ืืืืข Teamcity ืกืขืจืืืขืจ ืืื ืึทืืขื ื ื ืืฆื
ืืึธืงืขืจ-ืงืึทืืคึผืึธืื - ืืื ืืืจ ืืึธืื Teamcity ืึทืืขื ื, ืืืฉืึทืืืึท, ืืึทืืืขื, ืืื ืืืื ืืืื ืืื ืกืืึทืืืจื
ืืึธืืืจ ืืึทืื ืื "ืึธืืึทืืืืฉืึทื ืืึทืืืขื ืืึธืืคืืงืก" ืคึผืจืืืขืงื ืืื Teamcity ืืื ืฉืึทืคึฟื 4 ืืึทืกืงืก ืืึธืจื.
-
ืกื ืืืื
-
ืฉืึทืคึฟื ืฆืืืืึทื ืคึฟืึทืจ ืืขืืืื ื
-
ืืึทืืืขื ืื ืงืจืึทืืึทื ื ืืืืคืืงืก (ืืืืฉื ืืืืคืืงืก ืืืขืจืกืืข))
-
Maven ืืขืืืื ื (ืฉืึทืคึฟื ืึท ื ืืึทืข ืืขืืืื ื)
ืคึผืจืึธืืขืงื ืกืงืจืขืขื ืฉืึธื:
ืึทืืืขืืืื ืข ืกืขืืืื ืืก
ืืื ืึทืืข ืืึทืกืงืก ืืืจ ืืืื ืืฉืขืง ืื ืงืขืกืื "ืจืืื ืืืืขื: ืืืกืืขืงื ืึทืืข ืืขืงืขืก ืืื ืื ืืืกืฉืจืืึทืื ืืืขืืืืืึทืืขืจ ืืืืืขืจ ืื ืืืืขื", ืืืืึทื ืึธื ืืขื ืืฉืขืงืงืืึธืงืก ืืื ืืึทื ืขืจืจืึธืจืก.
ืืืจ ืืึทืื ืึท ืืืื VCS. VCS ืคึฟืขืึดืงืืืื ืืขื ืขื ืกืขืจืงืึทืื ืืื ืจืืื.
ืืืคึผืืงืึทืืื, VCS ื ืืฆื ืื HTTPS ืกืืขืืข. ืืื ืฆืืืืึทื ืืึทืฉืจืืึทืืื ื: ืื ืืขืืืืื ืฆื ืืืื ืึทืืข ืืจืึทื ืืฉืขืก ืืื ืึทืืข ืืึทืืก:
+:refs/heads/*
+:refs/tags/*
ืขืก ืืื ื ืืืืืง ืฆื ืฉืึทืคึฟื 4 ืงืึทื ืคืืืืขืจืืืฉืึทื ืคึผืึทืจืึทืืขืืขืจืก.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
ืื ืืืขืจื ืคืขืื ืืื BRANCH_FOR_INCREMENT ืืื TAG_FROM_VERSION ืืืื ืืืื ืืืืืืง.
ืืืจ ืืึทืจืคึฟื ืฆื ืฆืืคึฟืขืืืงืขืจ / ืืืืื ืึท ืคึผืจืืืืึทื ืฉืืืกื. ืึทืืข ืืึทืกืงืก ืึทืืืฅ CI Build ืืึทืจืคื ืึท ืคึผืจืืืืึทื ืฉืืืกื.
ืืื ืืขืืขืจ ืึทืจืืขื, ืึทืืืฅ CI Build, ืืื ืื ืืืื ืคึฟืขืึดืงืืืื ืึธืคึผืืืืืื ื ืืืจ ืืึทืจืคึฟื ืฆื ืคืึทืจืืื ืื ืึท ืคึผืจืืืืึทื ืฉืืืกื.
ืืืึทืฉืคึผืื ืคึฟืึทืจ ืืึทืืืขื ืืขืืืื ื
CI Build**.
ืืื ืึท ืึทืจืืขื ืกื ืืืื ื ืึธืจ ืืืื ืฉืจืื mvn ืจืืื ืคึผืจืืืืจื
ืืึทืืืขื ืืขืืืื ื
ืืื ืึท ืึทืจืืขื ืืึทืืืขื ืืขืืืื ื 2 ืืจืื. ืืขืจ ืขืจืฉืืขืจ ืฉืจืื ืืื ืฆื ืงืึธื ืืจืึธืืืจื ืึทื ืืจืึทื ืืฉ ืืื ืืึทืืขืืึธืก. ืืืื ืืจืึทื ืืฉ ืืื ื ืื ืืึทืืขืืึธืก, ืืขืืึธืื ืื ืึทืจืืขื ืคืืื.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
ืื ืจืืข ืฉืจืื ืืื ื ืึธืจืืึทื mvn ืืขืืืื ื: ืฆืืืจืืืื ืืื ืึธืคึผืฆืืข - ืคึผืขืงื ืืึธืืข
ืฉืึทืคึฟื ืฆืืืืึทื ืคึฟืึทืจ ืืขืืืื ื
ืฆื ืฉืึทืคึฟื ืึท ืืึธืืคืืงืก ืคึฟืึทืจ ืึท ืืขืืืื ื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืฆืืืืึทื. ืืึธืก ืืื ืืืึธืก ืื ืืึทืกืงืึท ืืื ืฉืึทืคึฟื ืฆืืืืึทื ืคึฟืึทืจ ืืขืืืื ื. ืื ืืื 2 ืืจืื.
ืืขืจ ืขืจืฉืืขืจ ืฉืจืื ืืฉืขืงืก ืึทื ืืจืึทื ืืฉ ืืื ื ืืฉื ืืึทืืขืืึธืก, ืืื ืื ืจืืข ืืฉืขืงืก ืึทื ืื ืืืขืจืกืืข ืืื ืืื ืืขืจ ืืขืงืข ืคึผืึธื.ืงืกืื ืืื ื ืืฉื ืื ืืืืื ืืืก ืืืืจื ืกื ืึทืคึผืฉืึธื
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
ืื ืจืืข ืฉืจืื ืขื ืืขืจืื ืืขื ืื ืงืฉืจ ืกืืขืืข ืืื ืืขืืืขืืึธืคึผืขืจ ืงืึธื ื ืขืงืืืึธื ืคืื 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
ืืึทืืืขื ืื ืงืจืึทืืึทื ื ืืืืคืืงืก
ืื ืึทืจืืขื ืืืฉืืืื ืคืื 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']"
ืื ืจืืข ืืึทืืืขื ืฉืจืื ืืื ืืฉืึทื ืืื ื ืื ืืืืคืืงืก ืืืขืจืกืืข ืืื ืื ืคึผืึธื.ืงืกืื ืืขืงืข.
ืฆืืื: ืืึทืืืขื ืืื ืึทืืฅ ืืื ืืืื ืฉืืจื
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
ืื ืืจืื ืฉืจืื ืืื ืฆื ืืืืึทืื 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
ืืขืจ ืคืขืจื ืฉืจืื ืขื ืืขืจืื ืืขื ืื ืงืฉืจ ืกืืขืืข ืืื ืืขืืืขืืึธืคึผืขืจ ืงืึธื ื ืขืงืืืึธื ืคืื 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%
ืืขืจ ืคืื ืคื ืฉืจืื ืืื ืืขืืื ื ืคึฟืื ืืขืจ ืืขืงืข ืคึผืึธื.ืงืกืื ืืืขืจืกืืข ืืื ืื ืกืืึธืื ืขืก ืืื Teamcity ืืืึทืืขืืืืืง TAG_FROM_VERSION. ืืึทืืขืจืงืื ื ืึทื ืื ืืืขืจืกืืข ืคืื โโืืขืจ ืืขืงืข ืคึผืึธื.ืงืกืื ืึธื ืืขื ืืจืืื 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 ืืืขืจืกืืขืก. ืืขื ืืื ืืขืืื ื ืืฆื ืืึทืืืึทื ืืื ืื ืคืืจืืื ืื ืึธืคึผืฆืืข ืืื ืฆืื.
ืึธืคึผืฆืืข ืฆืืื:
-Dtag=%TAG_FROM_VERSION% scm:tag
ืืงืืจ: www.habr.com