Тақырыпқа көшпес бұрын мен маңызды және күрделі тақырыпқа тоқталғым келеді - нұсқалау бағдарламалық қамтамасыз ету. Бұл скриншотта Семверді қысқаша түсінуге болады.
Trunk-Based Development бағдарламасында әрбір шығарылым үшін өзіңіздің жеке филиалыңызды жасауыңыз қажет. Осы шығарылымдағы барлық өзгертулер (түзетулер) осы филиалға бекітілген.
Осы жазбаның бөлігі ретінде біз келесі әрекеттерді автоматтандырамыз:
Teamcity сервері және агенті. Сіз жергілікті Teamcity серверін және агентін пайдалана аласыз доккер-композитор
Teamcity агенті бар жерде java, maven, git орнатылуы керек
Teamcity жүйесінде «Automation Maven Hotfix» жобасын жасап, сол жерде 4 тапсырманы жасайық.
CI құрастыру
Шығару үшін филиал жасаңыз
Maven қосымша қатені түзету (Қателерді түзету нұсқасын өзгерту))
Maven шығарылымы (жаңа шығарылым жасау)
Жобаның скриншоты:
Жалпы параметрлер
Барлық тапсырмаларда құсбелгіні қою керек.Таза құрастыру: құрастыру алдында тексеру каталогындағы барлық файлдарды жойыңыз«, өйткені бұл құсбелгісіз қателер алдым.
Біз бірыңғай VCS жасаймыз. VCS мүмкіндіктері қызыл түспен шеңберленеді.
Әдетте VCS HTTPS схемасын пайдаланады. IN Филиал сипаттамасы: барлық таңғы астарды және барлық тегтерді көру үшін көрсетілген:
+:refs/heads/*
+:refs/tags/*
4 конфигурация параметрін жасау қажет.
BRANCH_FOR_INCREMENT
TAG_FROM_VERSION
TEAM_USER
TEAM_USER_EMAIL
BRANCH_FOR_INCREMENT және TAG_FROM_VERSION ішіндегі мән өрісі бос қалуы керек.
Жеке кілтті жүктеп салу/қосу қажет. CI Build бағдарламасынан басқа барлық тапсырмалар жеке кілтті қажет етеді.
Әрбір тапсырмада, CI құрастыруынан басқа, Құрастыру мүмкіндіктері бөлімінде жеке кілтті қосу керек.
үшін мысал Maven шығарылымы
CI Build**.
Тапсырмада CI құрастыру бір қадам ғана mvn таза сынақ
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
Екінші қадам стандартты болып табылады mvn шығару: дайындаңыз опциясымен --топтама режимі
Шығару үшін филиал жасаңыз
Шығарылым үшін түзетуді жасау үшін тармақты жасау керек. Бұл тапсырманы орындайды Шығару үшін филиал жасаңыз. Оның 2 қадамы бар.
Бірінші қадам таңғы ас жоқ екенін тексереді мастер, ал екіншісі нұсқаның файлда екенін тексереді pom.xml деген сөз жоқ СУРЕТ
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
Екінші қадам developerConnection ішіндегі қосылым схемасын HTTPS-тен 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 ұлғайту қатені түзету
Тапсырма 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']"
Maven екінші қадамы pom.xml файлындағы қатені түзету нұсқасын өзгерту болып табылады.
Төртінші қадам developerConnection ішіндегі қосылым схемасын HTTPS-тен GIT-ке өзгертеді.
Және %BRANCH_FOR_INCREMENT% айнымалысы арқылы Teamcity-те көрсетілген филиалға өзгерістерді итереді
# Здесь получаем 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%
Бесінші қадам - файлдан алу pom.xml нұсқасын орнатады және оны орнатады командалық қала айнымалы TAG_FROM_VERSION. Файлдағы нұсқаны ескеріңіз pom.xml алдында 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']"
Алтыншы қадам – белгілеу түзету нұсқалары. Бұл пайдалану арқылы жасалады Maven ішінде қажетті опциямен мақсат.