V Trunk-Based Development si musíte pre každé vydanie vytvoriť vlastnú vetvu. Všetky zmeny (rýchle opravy) v rámci tohto vydania sa týkajú tejto vetvy.
V rámci tohto príspevku zautomatizujeme nasledujúce veci:
Tam, kde máte agenta Teamcity, musí byť nainštalovaná java, maven, git
V Teamcity vytvoríme projekt „Automation Maven Hotfix“ a vytvoríme tam 4 úlohy.
Zostava CI
Vytvorte vetvu na uvoľnenie
Prírastok opravy chyby Maven (zmena verzie opravy chýb))
Vydanie Maven (Vytvorenie nového vydania)
Snímka obrazovky projektu:
Všeobecné nastavenia
Vo všetkých úlohách musíte začiarknuť políčko "Čistá zostava: Pred zostavením odstráňte všetky súbory v pokladničnom adresári“, pretože bez tohto začiarkavacieho políčka som dostal chyby.
Vytvárame jeden VCS. Funkcie VCS sú zakrúžkované červenou farbou.
VCS zvyčajne používajú schému HTTPS. IN Špecifikácia pobočky: označené na sledovanie všetkých brunchov a všetkých značiek:
+:refs/heads/*
+:refs/tags/*
Je potrebné vytvoriť 4 konfiguračné parametre.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
Pole hodnoty v BRANCH_FOR_INCREMENT a TAG_FROM_VERSION musí zostať prázdne.
Musíte nahrať/pridať súkromný kľúč. Všetky úlohy okrem zostavovania CI vyžadujú súkromný kľúč.
V každej úlohe, okrem CI Build, v sekcii Build Features musíte pripojiť súkromný kľúč.
Príklad pre Vydanie Mavena
Zostava CI**.
V úlohe Zostava CI len jeden krok mvn čistý test
Vydanie Mavena
V úlohe Vydanie Mavena 2 kroky. Prvým krokom je skontrolovať, či je brunch majster. Ak nie je brunch majster, potom úloha padne.
BRANCH=$(git branch | grep * | cut -d ' ' -f2)
echo "$BRANCH"
if [[ "$BRANCH" != "master" ]]; then
echo 'Branch is not master';
echo 'Aborting';
exit 1;
fi
Druhý krok je štandardný mvn release:pripravte sa s opciou --dávkový režim
Vytvorte vetvu na uvoľnenie
Ak chcete vytvoriť rýchlu opravu pre vydanie, musíte vytvoriť vetvu. Toto robí taska Vytvorte vetvu na uvoľnenie. Má 2 kroky.
Prvý krok skontroluje, či nie je brunch majstera druhý skontroluje, či je verzia v súbore pom.xml neobsahoval slovo SNÍMAČKA
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
Druhý krok zmení schému pripojenia v developerConnection z 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
Prírastok opravy chyby Maven
Úloha pozostáva zo 6 častí. Mohlo to byť prerobené, ale stále to funguje.
Prvým krokom je skontrolovať, či nie je brunch majster. Ak brunch majster úloha padá.
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']"
Druhým krokom Maven je zmena verzie opravy chýb v súbore pom.xml.
Štvrtý krok zmení schému pripojenia v developerConnection z HTTPS na GIT.
A posúva zmeny do vetvy špecifikovanej v Teamcity premennou %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%
Piatym krokom je získanie zo súboru pom.xml verziu a nainštaluje ju do Teamcity premenlivý TAG_FROM_VERSION. Všimnite si, že verzia zo súboru pom.xml bez písmena v vpredu. A tag na základe tejto verzie už má na začiatku písmeno 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']"
Šiesty krok - značkovanie bugfix verzií. To sa robí pomocou Maven s požadovanou možnosťou v Cieľ.