TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ይህ ልጥፍ Teamcityን በመጠቀም በ Maven ፕሮጀክቶች ውስጥ HotFix አውቶሜሽን ማዋቀርን ይገልጻል።

HotFixን ለመሥራት ብዙ በእጅ የሚደረጉ እርምጃዎች ብዙውን ጊዜ ይከናወናሉ፡

  1. HotFixን ለመልቀቅ ለሚፈልጉት ልቀት ብሩች ይፍጠሩ
  2. በመለቀቅ ላይ ስህተትን ያስተካክሉ
  3. በሚለቀቀው ቅርንጫፍ ውስጥ የbugfix ሥሪቱን ይቀይሩ
  4. የbugfix ሥሪት መለያን ያውጡ

ነጥቦች 1,3,4 አውቶማቲክ ሊሆኑ ይችላሉ.

ወደ ርዕሱ ከመሄዳችን በፊት አንድ ጠቃሚ እና ውስብስብ ርዕስ ልነካው እፈልጋለሁ - ስሪት ማውጣት ሶፍትዌር. በዚህ ቅጽበታዊ ገጽ እይታ ውስጥ Semverን በአጭሩ መረዳት ይችላሉ። TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

በሊንኩ የበለጠ ማንበብ ትችላላችሁ፡- 1.

በዚህ ልጥፍ ውስጥ የተገለጹት ሁሉም ቅንብሮች የተመሠረቱ ናቸው። ሴቨር и በግንድ ላይ የተመሰረተ ልማት.

በግንድ ላይ የተመሰረተ ልማት ለእያንዳንዱ ልቀት የራስዎን ቅርንጫፍ መፍጠር ያስፈልግዎታል። በዚህ ልቀት ውስጥ ያሉ ሁሉም ለውጦች (ሆትፊክስ) ለዚህ ቅርንጫፍ ቁርጠኛ ናቸው።

እንደ የዚህ ልጥፍ አካል፣ የሚከተሉትን ነገሮች በራስ ሰር እናሰራለን፡-

  • CI ግንባታ

  • አዲስ ልቀት በመፍጠር ላይ

  • የመልቀቂያ ቅርንጫፍ መፍጠር

  • የbugfix ሥሪትን በመቀየር ላይ

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

መስፈርቶች

  • ኮድዎን ለማከማቸት Git ማከማቻ። ልጥፉ ማከማቻውን ይጠቀማል https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • የቡድን ከተማ አገልጋይ እና ወኪል። በመጠቀም የአካባቢዎን የቡድን ከተማ አገልጋይ እና ወኪል ማሳደግ ይችላሉ። ዳክለር-መፃፊያ
  • የቡድን ከተማ ወኪል ባለህበት ቦታ ጃቫ ፣ማቨን ፣ጂት መጫን አለበት።

በ Teamcity ውስጥ የ "Automation Maven Hotfix" ፕሮጀክት እንፍጠር እና እዚያ 4 ተግባራትን እንፍጠር.

  • CI ግንባታ

  • ለመልቀቅ ቅርንጫፍ ይፍጠሩ

  • Maven increment bugfix (bugfix ስሪት ቀይር))

  • Maven ልቀት (አዲስ ልቀት በመፍጠር ላይ)

የፕሮጀክት ቅጽበታዊ ገጽ እይታ

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

አጠቃላይ ቅንብሮች

በሁሉም ተግባራት ውስጥ ሳጥኑ ላይ ምልክት ማድረግ አለብዎት "አጽዳ ግንባታ፡ ከግንባታው በፊት በቼክውት ማውጫ ውስጥ ያሉትን ሁሉንም ፋይሎች ሰርዝ"፣ ምክንያቱም ያለዚህ አመልካች ሳጥን ስህተቶች አግኝቻለሁ።

አንድ ነጠላ ቪሲኤስ እንፈጥራለን. የቪሲኤስ ባህሪያት በቀይ ከበውታል።

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

በተለምዶ ቪሲኤስ የ HTTPS እቅድን ይጠቀማሉ። ውስጥ የቅርንጫፍ ዝርዝር መግለጫ፡- ሁሉንም ብሬንች እና ሁሉንም መለያዎች ለመመልከት የተጠቆሙ፡-

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

4 ውቅረት መለኪያዎችን መፍጠር አስፈላጊ ነው.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

በ BRANCH_FOR_INCREMENT እና TAG_FROM_VERSION ያለው የእሴት መስክ ባዶ መተው አለበት።

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

የግል ቁልፍ መስቀል/ማከል አለብህ። ከCI Build በስተቀር ሁሉም ተግባራት የግል ቁልፍ ያስፈልጋቸዋል።

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

በእያንዳንዱ ተግባር, ከ CI Build በስተቀር, በግንባታ ባህሪያት ክፍል ውስጥ የግል ቁልፍ ማገናኘት ያስፈልግዎታል.

ምሳሌ ለ Maven መልቀቅ

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

CI ግንባታ ***.

በአንድ ተግባር ውስጥ CI ግንባታ አንድ እርምጃ ብቻ mvn ንጹህ ሙከራ

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

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

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ሁለተኛው ደረጃ መደበኛ ነው mvn መልቀቅ፡አዘጋጅ ከአማራጭ ጋር --ባች-ሁነታ

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ለመልቀቅ ቅርንጫፍ ይፍጠሩ

ለመልቀቂያ የሚሆን hotfix ለመፍጠር ቅርንጫፍ መፍጠር ያስፈልግዎታል። ይህ ተግባር የሚያደርገው ነው። ለመልቀቅ ቅርንጫፍ ይፍጠሩ. እሷ 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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ሁለተኛው እርምጃ በገንቢ ግንኙነት ከኤችቲቲፒኤስ ወደ ጂአይቲ የግንኙነት ዕቅዱን ይለውጣል።

# Здесь получаем 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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

Maven ጭማሪ bugfix

ተግባሩ 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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ሁለተኛው የ Maven እርምጃ በpom.xml ፋይል ውስጥ የbugfix ሥሪቱን እየቀየረ ነው።

ግቦች: ማቨን ሁሉንም ነገር በአንድ መስመር ውስጥ ይዟል

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

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ሦስተኛው እርምጃ የ 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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

አራተኛው ደረጃ የግንኙነት መርሃ ግብሩን በገንቢ ግንኙነት ከኤችቲቲፒኤስ ወደ ጂአይቲ ይለውጠዋል።

እና በቡድን ከተማ ውስጥ ወደተገለጸው ቅርንጫፍ በ%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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

አምስተኛው ደረጃ ከፋይሉ ማግኘት ነው ፖም ስሪት እና ውስጥ ይጫናል የቡድንነት ተለዋዋጭ 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ን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ስድስተኛ ደረጃ - መለያ መስጠት ሳንካ ማስተካከል ስሪቶች. ይህ የሚከናወነው በመጠቀም ነው። Maven ውስጥ ከሚፈለገው አማራጭ ጋር ግብ.

አማራጭ ግቦች:

-Dtag=%TAG_FROM_VERSION% scm:tag

TeamCityን በመጠቀም በማቨን ፕሮጄክቶች ውስጥ የ HotFix አውቶማቲክ

ምንጭ: hab.com

አስተያየት ያክሉ