Hierdie pos sal die opstel van HotFix-outomatisering in Maven-projekte met Teamcity beskryf.
Om HotFix te doen, word gewoonlik baie handmatige stappe gedoen:
- Skep 'n brunch vir die vrystelling waarheen jy HotFix wil uitrol
- Maak 'n fout in vrystelling reg
- Verander die bugfix-weergawe in die vrystellingtak
- Ontplooi bugfix-weergawemerker
Punte 1,3,4 kan geoutomatiseer word.
Voordat ons oorgaan na die onderwerp, wil ek graag 'n belangrike en komplekse onderwerp aanraak - weergawe sagteware. U kan Semver kortliks in hierdie skermkiekie verstaan. 
Jy kan meer lees by die skakel: .
Alle instellings wat in hierdie pos beskryf word, is gebaseer op и .
In Trunk-Based Development, moet jy jou eie tak vir elke vrystelling skep. Alle veranderinge (hotfixes) binne hierdie vrystelling is verbind tot hierdie tak.
As deel van hierdie pos sal ons die volgende dinge outomatiseer:
CI bou
Skep 'n nuwe vrystelling
Skep 'n vrystellingtak
Verander die bugfix-weergawe

vereistes:
- Git-bewaarplek vir die stoor van u kode. Die pos sal die bewaarplek gebruik .
- Teamcity bediener en agent. U kan u plaaslike Teamcity-bediener en -agent verhoog deur
- Waar jy Teamcity-agent het, moet java, maven, git geïnstalleer word
Kom ons skep die "Automation Maven Hotfix"-projek in Teamcity en skep 4 take daar.
CI Bou
Skep tak vir vrylating
Maven verhoog foutoplossing (Verander foutoplossing weergawe))
Maven-vrystelling (skep 'n nuwe vrystelling)
Projek skermkiekie:

Algemene instellings
In alle take moet jy die blokkie merk "Skoon bou: Vee alle lêers in die betaalgids uit voor die bou“, want sonder hierdie merkblokkie het ek foute gekry.
Ons skep 'n enkele VCS. VCS-kenmerke is in rooi omsirkel.

Tipies gebruik VCS'e die HTTPS-skema. IN Tak spesifikasie: aangedui om na alle brunches en alle etikette te kyk:
+:refs/heads/*
+:refs/tags/*Dit is nodig om 4 konfigurasieparameters te skep.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Die waardeveld in BRANCH_FOR_INCREMENT en TAG_FROM_VERSION moet leeg gelaat word.

Jy moet 'n private sleutel oplaai/byvoeg. Alle take behalwe CI Build vereis 'n private sleutel.

In elke taak, behalwe CI Build, in die Bou-kenmerke-afdeling moet jy 'n private sleutel koppel.
Voorbeeld vir Maven vrylating

CI Bou**.
In 'n taak CI Bou net een stap mvn skoon toets

Maven vrylating
In 'n taak Maven vrylating 2 treë. Die eerste stap is om seker te maak dat brunch is meester. As brunch is nie meester, dan val die taak.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Die tweede stap is standaard mvn vrystelling: berei voor met opsie --batch-modus

Skep tak vir vrylating
Om 'n hotfix vir 'n vrystelling te skep, moet jy 'n tak skep. Dit is wat die taska doen Skep tak vir vrylating. Sy het 2 treë.
Die eerste stap kontroleer dat brunch nie is nie meester, en die tweede kontroleer dat die weergawe in die lêer is pom.xml het nie die woord bevat nie KIEZIE
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
Die tweede stap verander die verbindingskema in developerConnection van HTTPS na 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
Maven verhoog foutoplossing
Die taak bestaan uit 6 dele. Dit kon gerefaktoreer gewees het, maar dit werk steeds.
Die eerste stap is om seker te maak dat die brunch dit nie is nie meester. As brunch meester die taak val.
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']"
Die tweede Maven-stap is om die bugfix-weergawe in die pom.xml-lêer te verander.
Doelwitte: Maven het alles in een lyn
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit
Die derde stap is om Git-statusinligting en ander te vertoon:
echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch
Die vierde stap verander die verbindingskema in developerConnection van HTTPS na GIT.
En stoot veranderinge aan die tak gespesifiseer in Teamcity deur die %BRANCH_FOR_INCREMENT% veranderlike
# Здесь получаем 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%
Die vyfde stap is om van die lêer af te kom pom.xml weergawe en installeer dit in Spanstad veranderlike TAG_FROM_VERSION. Let daarop dat die weergawe van die lêer pom.xml sonder die letter v voor. En die merker, gebaseer op hierdie weergawe, het reeds die letter v aan die begin.
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']"
Sesde stap - tagging bugfix weergawes. Dit word gedoen met behulp van Maven met die vereiste opsie in Doel.
opsie Doelwitte:
-Dtag=%TAG_FROM_VERSION% scm:tag
Bron: will.com
