Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Wannan sakon zai bayyana kafa HotFix aiki da kai a cikin ayyukan Maven ta amfani da Teamcity.

Don yin HotFix, yawancin matakai na hannu ana yin su:

  1. Ƙirƙiri brunch don sakin da kake son mirgine HotFix zuwa
  2. Gyara kwaro a cikin saki
  3. Canja sigar bugfix a cikin reshen saki
  4. Fitar da alamar bugfix

Za a iya sarrafa maki 1,3,4.

Kafin mu ci gaba zuwa ga maudu'in, zan so in tabo wani muhimmin batu mai rikitarwa - versioning software. Kuna iya fahimtar Semver a taƙaice a cikin wannan hoton. Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Kuna iya karanta ƙarin a mahadar: 1.

Duk saitunan da aka bayyana a cikin wannan sakon an dogara ne akan su Semver и Cigaban Girgizawa.

A cikin Ci gaban Tushen Ganga, kuna buƙatar ƙirƙirar reshen ku don kowane saki. Duk canje-canje (hotfixes) a cikin wannan sakin an sadaukar da su ga wannan reshe.

A matsayin wani ɓangare na wannan sakon, za mu sarrafa abubuwa masu zuwa ta atomatik:

  • CI gini

  • Ƙirƙirar sabon saki

  • Ƙirƙirar reshen saki

  • Canza sigar bugfix

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Bukatun:

Bari mu ƙirƙiri aikin "Automation Maven Hotfix" a cikin Teamcity kuma ƙirƙirar ayyuka 4 a can.

  • CI Gina

  • Ƙirƙiri reshe don saki

  • Maven increment bugfix (Canja sigar bugfix))

  • Maven saki (Ƙirƙirar sabon saki)

Hoton hoton aikin:

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Gabaɗaya saituna

A cikin dukkan ayyuka dole ne ku duba akwatin "Tsaftace gini: Share duk fayiloli a cikin kundin wurin biya kafin ginin“, domin ba tare da wannan akwati ba na sami kurakurai.

Mun ƙirƙiri VCS guda ɗaya. An kewaya fasalin VCS da ja.

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Yawanci VCSs suna amfani da tsarin HTTPS. IN Bayanin reshe: an nuna don kallon duk brunches da duk tags:

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

Wajibi ne don ƙirƙirar Sigina Kanfigareshan 4.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Dole ne a bar filin darajar da ke BRANCH_FOR_INCREMENT da TAG_FROM_VERSION fanko.

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Kuna buƙatar loda/ƙara maɓalli na sirri. Duk ayyuka banda CI Gina suna buƙatar maɓalli na sirri.

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

A cikin kowane ɗawainiya, ban da CI Gina, a cikin ɓangaren Gina Abubuwan Gina kuna buƙatar haɗa maɓalli na sirri.

Misali ga Maven saki

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

CI Gina ***.

A cikin wani aiki CI Gina mataki daya kawai mvn gwajin tsabta

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Maven saki

A cikin wani aiki Maven saki 2 matakai. Mataki na farko shine duba cewa brunch shine master. Idan brunch ba master, sai aikin ya fadi.

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

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na biyu shine misali mvn saki: shirya tare da zabin -- tsari-yanayin

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Ƙirƙiri reshe don saki

Don ƙirƙirar hotfix don saki kuna buƙatar ƙirƙirar reshe. Wannan shi ne abin da aikin yake yi Ƙirƙiri reshe don saki. Tana da matakai 2.

Mataki na farko yana bincika cewa brunch ba master, kuma na biyu ya duba cewa sigar tana cikin fayil ɗin fansa.xml bai ƙunshi kalmar ba HOTUNA

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

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na biyu yana canza tsarin haɗin kai a cikin haɓaka Haɗin kai daga HTTPS zuwa 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

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Maven increament bugfix

Aikin ya ƙunshi sassa 6. Ana iya gyara shi, amma har yanzu yana aiki.

Mataki na farko shine duba cewa brunch ɗin ba master. Idan brunch master aikin ya fadi.

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']"

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na biyu na Maven yana canza sigar bugfix a cikin fayil ɗin pom.xml.

Manufofin: Maven yana da komai a layi ɗaya

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

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na uku shine don nuna bayanin matsayin Git da sauransu:

echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na huɗu yana canza tsarin haɗin kai a cikin Haɗin haɓakawa daga HTTPS zuwa GIT.

Kuma yana tura canje-canje zuwa reshe da aka ƙayyade a cikin Ƙungiyar ta % BRANCH_FOR_INCREMENT% m

# Здесь получаем 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%

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na biyar yana samun daga fayil ɗin fansa.xml version kuma shigar da shi a ciki Ƙungiya m TAG_FROM_VERSION. Lura cewa sigar daga fayil ɗin fansa.xml ba tare da harafin v a gaba ba. Kuma alamar, bisa wannan sigar, tana da harafin v a farkon.

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']"

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

Mataki na shida - tagging bugfix iri-iri. Ana yin wannan ta amfani da Maven tare da zaɓin da ake buƙata a ciki Kwallo.

Zaɓi Kwallaye:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automation na HotFix a cikin ayyukan Maven ta amfani da TeamCity

source: www.habr.com

Add a comment