Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Pòs sa a pral dekri konfigirasyon automatisation HotFix nan pwojè Maven lè l sèvi avèk Teamcity.

Pou fè HotFix, yo anjeneral fè anpil etap manyèl:

  1. Kreye yon kolasyon pou lage ou vle woule HotFix la
  2. Ranje yon ensèk nan lage
  3. Chanje vèsyon bugfix nan branch lage a
  4. Woule tag vèsyon bugfix

Pwen 1,3,4 ka otomatize.

Anvan nou ale sou sijè a, mwen ta renmen manyen yon sijè enpòtan ak konplèks - vèsyon lojisyèl. Ou ka yon ti tan konprann Semver nan Ekran sa a. Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Ou ka li plis nan lyen an: 1.

Tout paramèt ki dekri nan pòs sa a baze sou Semver и Devlopman ki baze sou kòf.

Nan Devlopman ki baze sou kòf, ou bezwen kreye pwòp branch ou pou chak lage. Tout chanjman (reparasyon) nan lage sa a angaje nan branch sa a.

Kòm yon pati nan pòs sa a, nou pral otomatize bagay sa yo:

  • CI bati

  • Kreye yon nouvo lage

  • Kreye yon branch lage

  • Chanje vèsyon bugfix

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Kondisyon:

Ann kreye pwojè "Automation Maven Hotfix" nan Teamcity epi kreye 4 travay la.

  • CI Bati

  • Kreye branch pou lage

  • Maven ogmante bugfix (Chanje vèsyon bugfix))

  • Lage Maven (Kreye yon nouvo lage)

Ekran pwojè:

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Anviwònman jeneral yo

Nan tout travay ou dwe tcheke ti bwat la "Netwaye bati: Efase tout fichye ki nan anyè kesye a anvan bati a", paske san kaz sa a mwen te resevwa erè.

Nou kreye yon sèl VCS. Karakteristik VCS yo makonnen an wouj.

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Tipikman, VCS yo itilize konplo HTTPS la. NAN Espesifikasyon branch: endike pou gade tout kolasyon ak tout tags:

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

Li nesesè yo kreye 4 Paramèt Konfigirasyon.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Chan valè nan BRANCH_FOR_INCREMENT ak TAG_FROM_VERSION dwe rete vid.

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Ou bezwen telechaje / ajoute yon kle prive. Tout travay eksepte CI Build mande pou yon kle prive.

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Nan chak travay, eksepte CI Build, nan seksyon Build Features ou bezwen konekte yon kle prive.

Egzanp pou Maven lage

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

CI Bati**.

Nan yon travay CI Bati jis yon etap mvn pwòp tès

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Maven lage

Nan yon travay Maven lage 2 etap. Premye etap la se tcheke ke kolasyon se mèt. Si kolasyon pa mèt, Lè sa a, travay la tonbe.

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Dezyèm etap la se estanda mvn release:prepare ak opsyon --pakèt-mòd

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Kreye branch pou lage

Pou kreye yon korektif pou yon lage ou bezwen kreye yon branch. Sa a se sa taska a fè Kreye branch pou lage. Li gen 2 etap.

Premye etap la tcheke ke kolasyon se pa mèt, ak dezyèm lan tcheke ke vèsyon an nan dosye a pom.xml pa t genyen mo a ENSTANTAN

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Dezyèm etap la chanje konplo koneksyon an nan developerConnection soti nan HTTPS a 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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Maven ogmante bugfix

Travay la konsiste de 6 pati. Li te kapab refactorize, men li toujou ap travay.

Premye etap la se tcheke ke kolasyon an pa mèt. Si kolasyon mèt travay la tonbe.

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Dezyèm etap Maven a ap chanje vèsyon bugfix nan fichye pom.xml la.

Bi: Maven gen tout bagay nan yon sèl liy

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Twazyèm etap la se montre enfòmasyon sou estati Git ak lòt moun:

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Katriyèm etap la chanje konplo koneksyon an nan developerConnection soti nan HTTPS a GIT.

Epi pouse chanjman nan branch ki espesifye nan Teamcity pa %BRANCH_FOR_INCREMENT% varyab la

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Senkyèm etap la ap resevwa nan dosye a pom.xml vèsyon epi enstale li nan Teamcity varyab TAG_FROM_VERSION. Remake byen ke vèsyon an soti nan dosye a pom.xml san lèt v devan. Ak tag la, ki baze sou vèsyon sa a, deja gen lèt la v nan kòmansman an.

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

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Sizyèm etap - tagging bugfix vèsyon. Sa a se fè lè l sèvi avèk Maven ak opsyon ki nesesè nan Objektif.

Opsyon Objektif:

-Dtag=%TAG_FROM_VERSION% scm:tag

Otomatik HotFix nan pwojè Maven lè l sèvi avèk TeamCity

Sous: www.habr.com

Add nouvo kòmantè