ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื“ืขืจ ืคึผืึธืกื˜ืŸ ื•ื•ืขื˜ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ HotFix ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืื™ืŸ Maven ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ Teamcity.

ืฆื• ื˜ืึธืŸ HotFix, ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืžืึทื ื•ืึทืœ ืกื˜ืขืคึผืก ื–ืขื ืขืŸ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื“ื•ืจื›ื’ืขืงืึธื›ื˜:

  1. ืฉืึทืคึฟืŸ ืึท ื‘ืจืึทื ื˜ืฉ ืคึฟืึทืจ ื“ื™ ืžืขืœื“ื•ื ื’ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืจืึธื•ืœื“ HotFix ืฆื•
  2. ืคืึทืจืจื™ื›ื˜ืŸ ืึท ื–ืฉื•ืง ืื™ืŸ ืžืขืœื“ื•ื ื’
  3. ื˜ื•ื™ืฉืŸ ื“ื™ ื‘ื•ื’ืคื™ืงืก ื•ื•ืขืจืกื™ืข ืื™ืŸ ื“ื™ ืžืขืœื“ื•ื ื’ ืฆื•ื•ื™ื™ึทื’
  4. ื–ืขืžืœ ืื•ื™ืก ื“ื™ ื‘ื•ื’ืคื™ืงืก ื•ื•ืขืจืกื™ืข ืงื•ื•ื™ื˜ืœ

ื•ื•ื™ื™ื–ื˜ 1,3,4 ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึธื˜ืึทืžื™ื™ื˜ื™ื“.

ืื™ื™ื“ืขืจ ืžื™ืจ ื’ื™ื™ืขืŸ ืื™ื‘ืขืจ ืฆื• ื“ืขืจ ื˜ืขืžืข, ื•ื•ื™ืœ ืื™ืš ืึธื ืจื™ืจืŸ ืึท ื•ื•ื™ื›ื˜ื™ืงืข ืื•ืŸ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ืข ื˜ืขืžืข - ื•ื•ืขืจืกื™ืข ื•ื•ื™ื™ื›ื•ื•ืืจื’. ืื™ืจ ืงืขื ืขืŸ ื‘ืขืงื™ืฆืขืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ Semver ืื™ืŸ ื“ืขื ืกืงืจืขืขื ืฉืึธื˜. ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ืื•ื™ืฃ ื“ืขื ืœื™ื ืง: 1.

ืึทืœืข ืกืขื˜ื˜ื™ื ื’ืก ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ืขื ืคึผืึธืกื˜ืŸ ื–ืขื ืขืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืกืขืžื•ื•ืขืจ ะธ ื˜ืจื•ื ืง-ื‘ืื–ื™ืจื˜ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’.

ืื™ืŸ ื˜ืจื•ื ืง-ื‘ืื–ื™ืจื˜ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืฆื•ื•ื™ื™ึทื’ ืคึฟืึทืจ ื™ืขื“ืขืจ ืžืขืœื“ื•ื ื’. ืึทืœืข ืขื ื“ืขืจื•ื ื’ืขืŸ (ื”ืึธื˜ืคื™ืงืกื™ื–) ืื™ืŸ ื“ืขื ืžืขืœื“ื•ื ื’ ื–ืขื ืขืŸ ื‘ืื’ืื ื’ืขืŸ ืฆื• ื“ืขื ืฆื•ื•ื™ื™ึทื’.

ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ืคึผืึธืกื˜ืŸ, ืžื™ืจ ื•ื•ืขืœืŸ ืึธื˜ืึทืžื™ื™ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ื ื’ื–:

  • CI ื‘ื•ื™ืขืŸ

  • ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืžืขืœื“ื•ื ื’

  • ืฉืืคืŸ ืึท ืžืขืœื“ื•ื ื’ ืฆื•ื•ื™ื™ึทื’

  • ื˜ื•ื™ืฉืŸ ื“ื™ ื‘ื•ื’ืคื™ืงืก ื•ื•ืขืจืกื™ืข

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ:

  • ื’ื™ื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ื“ื™ื™ืŸ ืงืึธื“. ื“ืขืจ ืคึผืึธืกื˜ืŸ ื•ื•ืขื˜ ื ื•ืฆืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Teamcity ืกืขืจื•ื•ืขืจ ืื•ืŸ ืึทื’ืขื ื˜. ืื™ืจ ืงืขื ืขืŸ ื›ืึทืคึผืŸ ื“ื™ื™ืŸ ื”ื™ื’ืข Teamcity ืกืขืจื•ื•ืขืจ ืื•ืŸ ืึทื’ืขื ื˜ ื ื™ืฆืŸ ื“ืึธืงืขืจ-ืงืึทืžืคึผืึธื•ื–
  • ื•ื•ื• ืื™ืจ ื”ืึธื‘ืŸ Teamcity ืึทื’ืขื ื˜, ื“ื–ืฉืึทื•ื•ืึท, ืžืึทื•ื•ืขืŸ, ื’ื™ื˜ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ

ืœืึธืžื™ืจ ืžืึทื›ืŸ ื“ื™ "ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืžืึทื•ื•ืขืŸ ื”ืึธื˜ืคื™ืงืก" ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ Teamcity ืื•ืŸ ืฉืึทืคึฟืŸ 4 ื˜ืึทืกืงืก ื“ืึธืจื˜.

  • ืกื™ ื‘ื™ืœื“

  • ืฉืึทืคึฟืŸ ืฆื•ื•ื™ื™ึทื’ ืคึฟืึทืจ ืžืขืœื“ื•ื ื’

  • ืžืึทื•ื•ืขืŸ ื™ื ืงืจืึทืžืึทื ื˜ ื‘ื•ื’ืคื™ืงืก (ื˜ื•ื™ืฉืŸ ื‘ื•ื’ืคื™ืงืก ื•ื•ืขืจืกื™ืข))

  • Maven ืžืขืœื“ื•ื ื’ (ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืžืขืœื“ื•ื ื’)

ืคึผืจืึธื™ืขืงื˜ ืกืงืจืขืขื ืฉืึธื˜:

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืึทืœื’ืขืžื™ื™ื ืข ืกืขื˜ื˜ื™ื ื’ืก

ืื™ืŸ ืึทืœืข ื˜ืึทืกืงืก ืื™ืจ ืžื•ื–ืŸ ื˜ืฉืขืง ื“ื™ ืงืขืกื˜ืœ "ืจื™ื™ืŸ ื‘ื•ื™ืขืŸ: ื•ื™ืกืžืขืงืŸ ืึทืœืข ื˜ืขืงืขืก ืื™ืŸ ื“ื™ ื•ื™ืกืฉืจื™ื™ึทื‘ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื™ื™ื“ืขืจ ื“ื™ ื‘ื•ื™ืขืŸ", ื•ื•ื™ื™ึทืœ ืึธืŸ ื“ืขื ื˜ืฉืขืงืงื‘ืึธืงืก ืื™ืš ื’ืึทื˜ ืขืจืจืึธืจืก.

ืžื™ืจ ืžืึทื›ืŸ ืึท ืื™ื™ืŸ VCS. VCS ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื–ืขื ืขืŸ ืกืขืจืงืึทืœื“ ืื™ืŸ ืจื•ื™ื˜.

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื˜ื™ืคึผื™ืงืึทืœืœื™, VCS ื ื•ืฆืŸ ื“ื™ HTTPS ืกื›ืขืžืข. ืื™ืŸ ืฆื•ื•ื™ื™ึทื’ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’: ืื ื’ืขื•ื•ื™ื–ืŸ ืฆื• ื”ื™ื˜ืŸ ืึทืœืข ื‘ืจืึทื ื˜ืฉืขืก ืื•ืŸ ืึทืœืข ื˜ืึทื’ืก:

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

ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืฉืึทืคึฟืŸ 4 ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืึทืจืึทืžืขื˜ืขืจืก.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

ื“ื™ ื•ื•ืขืจื˜ ืคืขืœื“ ืื™ืŸ BRANCH_FOR_INCREMENT ืื•ืŸ TAG_FROM_VERSION ืžื•ื–ืŸ ื–ื™ื™ืŸ ืœื™ื™ื“ื™ืง.

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฆื•ืคึฟืขืœื™ืงืขืจ / ืœื™ื™ื’ืŸ ืึท ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ. ืึทืœืข ื˜ืึทืกืงืก ืึทื—ื•ืฅ CI Build ื“ืึทืจืคืŸ ืึท ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ.

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืื™ืŸ ื™ืขื“ืขืจ ืึทืจื‘ืขื˜, ืึทื—ื•ืฅ CI Build, ืื™ืŸ ื“ื™ ื‘ื™ืœื“ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืึท ืคึผืจื™ื•ื•ืึทื˜ ืฉืœื™ืกืœ.

ื‘ื™ื™ึทืฉืคึผื™ืœ ืคึฟืึทืจ ืžืึทื•ื•ืขืŸ ืžืขืœื“ื•ื ื’

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

CI Build**.

ืื™ืŸ ืึท ืึทืจื‘ืขื˜ ืกื™ ื‘ื™ืœื“ ื ืึธืจ ืื™ื™ืŸ ืฉืจื™ื˜ mvn ืจื™ื™ืŸ ืคึผืจื•ื‘ื™ืจืŸ

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืžืึทื•ื•ืขืŸ ืžืขืœื“ื•ื ื’

ืื™ืŸ ืึท ืึทืจื‘ืขื˜ ืžืึทื•ื•ืขืŸ ืžืขืœื“ื•ื ื’ 2 ื˜ืจื™ื˜. ื“ืขืจ ืขืจืฉื˜ืขืจ ืฉืจื™ื˜ ืื™ื– ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทื– ื‘ืจืึทื ื˜ืฉ ืื™ื– ื‘ืึทืœืขื‘ืึธืก. ืื•ื™ื‘ ื‘ืจืึทื ื˜ืฉ ืื™ื– ื ื™ื˜ ื‘ืึทืœืขื‘ืึธืก, ื“ืขืžืึธืœื˜ ื“ื™ ืึทืจื‘ืขื˜ ืคืืœืŸ.

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

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื“ื™ ืจื’ืข ืฉืจื™ื˜ ืื™ื– ื ืึธืจืžืึทืœ mvn ืžืขืœื“ื•ื ื’: ืฆื•ื’ืจื™ื™ื˜ืŸ ืžื™ื˜ ืึธืคึผืฆื™ืข - ืคึผืขืงืœ ืžืึธื“ืข

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืฉืึทืคึฟืŸ ืฆื•ื•ื™ื™ึทื’ ืคึฟืึทืจ ืžืขืœื“ื•ื ื’

ืฆื• ืฉืึทืคึฟืŸ ืึท ื”ืึธื˜ืคื™ืงืก ืคึฟืึทืจ ืึท ืžืขืœื“ื•ื ื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืฆื•ื•ื™ื™ึทื’. ื“ืึธืก ืื™ื– ื•ื•ืึธืก ื“ื™ ื˜ืึทืกืงืึท ื˜ื•ื˜ ืฉืึทืคึฟืŸ ืฆื•ื•ื™ื™ึทื’ ืคึฟืึทืจ ืžืขืœื“ื•ื ื’. ื–ื™ ื”ืื˜ 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

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื“ื™ ืจื’ืข ืฉืจื™ื˜ ืขื ื“ืขืจื•ื ื’ืขืŸ ื“ื™ ืงืฉืจ ืกื›ืขืžืข ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืงืึธื ื ืขืงื˜ื™ืึธืŸ ืคื•ืŸ 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

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืžืึทื•ื•ืขืŸ ื™ื ืงืจืึทืžืึทื ื˜ ื‘ื•ื’ืคื™ืงืก

ื“ื™ ืึทืจื‘ืขื˜ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ 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']"

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื“ื™ ืจื’ืข ืžืึทื•ื•ืขืŸ ืฉืจื™ื˜ ืื™ื– ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ื‘ื•ื’ืคื™ืงืก ื•ื•ืขืจืกื™ืข ืื™ืŸ ื“ื™ ืคึผืึธืž.ืงืกืžืœ ื˜ืขืงืข.

ืฆื™ืœืŸ: ืžืึทื•ื•ืขืŸ ื”ืื˜ ืึทืœืฅ ืื™ืŸ ืื™ื™ืŸ ืฉื•ืจื”

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

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ 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

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื“ืขืจ ืคืขืจื˜ ืฉืจื™ื˜ ืขื ื“ืขืจื•ื ื’ืขืŸ ื“ื™ ืงืฉืจ ืกื›ืขืžืข ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืงืึธื ื ืขืงื˜ื™ืึธืŸ ืคื•ืŸ 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

ื“ืขืจ ืคื™ื ืคื˜ ืฉืจื™ื˜ ืื™ื– ื’ืขื˜ื™ื ื’ ืคึฟื•ืŸ ื“ืขืจ ื˜ืขืงืข ืคึผืึธืž.ืงืกืžืœ ื•ื•ืขืจืกื™ืข ืื•ืŸ ื™ื ืกื˜ืึธืœื– ืขืก ืื™ืŸ 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']"

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ื–ืขืงืกื˜ ืฉืจื™ื˜ - ื˜ืึทื’ื™ื ื’ bugfix ื•ื•ืขืจืกื™ืขืก. ื“ืขื ืื™ื– ื’ืขื˜ืืŸ ื ื™ืฆืŸ ืžืึทื•ื•ืึทืŸ ืžื™ื˜ ื“ื™ ืคืืจืœืื ื’ื˜ ืึธืคึผืฆื™ืข ืื™ืŸ ืฆื™ืœ.

ืึธืคึผืฆื™ืข ืฆื™ืœืŸ:

-Dtag=%TAG_FROM_VERSION% scm:tag

ืึทื•ื˜ืึธืžืึทื˜ื™ืึธืŸ ืคื•ืŸ ื”ืึธื˜ืคื™ืงืก ืื™ืŸ ืžืึทื•ื•ืขืŸ ืคึผืจืึทื“ื–ืฉืขืงืก ื ื™ืฆืŸ TeamCity

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’