TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Бұл пост Teamcity көмегімен Maven жобаларында HotFix автоматтандыруын орнатуды сипаттайды.

HotFix жасау үшін әдетте қолмен көптеген қадамдар орындалады:

  1. HotFix шығарғыңыз келетін шығарылым үшін таңғы ас жасаңыз
  2. Шығарылымдағы қатені түзетіңіз
  3. Шығарылым тармағында қатені түзету нұсқасын өзгертіңіз
  4. Қателерді түзету нұсқасы тегін шығарыңыз

1,3,4 тармақтарды автоматтандыруға болады.

Тақырыпқа көшпес бұрын мен маңызды және күрделі тақырыпқа тоқталғым келеді - нұсқалау бағдарламалық қамтамасыз ету. Бұл скриншотта Семверді қысқаша түсінуге болады. TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Толығырақ сілтемеден оқи аласыз: 1.

Осы постта сипатталған барлық параметрлерге негізделген Семвер и Магистральға негізделген даму.

Trunk-Based Development бағдарламасында әрбір шығарылым үшін өзіңіздің жеке филиалыңызды жасауыңыз қажет. Осы шығарылымдағы барлық өзгертулер (түзетулер) осы филиалға бекітілген.

Осы жазбаның бөлігі ретінде біз келесі әрекеттерді автоматтандырамыз:

  • CI құрастыру

  • Жаңа шығарылым жасау

  • Шығарылым тармағын құру

  • Қателерді түзету нұсқасын өзгерту

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

талаптар:

  • Кодты сақтауға арналған Git репозиторийі. Пост репозиторийді пайдаланады https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • Teamcity сервері және агенті. Сіз жергілікті Teamcity серверін және агентін пайдалана аласыз доккер-композитор
  • Teamcity агенті бар жерде java, maven, git орнатылуы керек

Teamcity жүйесінде «Automation Maven Hotfix» жобасын жасап, сол жерде 4 тапсырманы жасайық.

  • CI құрастыру

  • Шығару үшін филиал жасаңыз

  • Maven қосымша қатені түзету (Қателерді түзету нұсқасын өзгерту))

  • Maven шығарылымы (жаңа шығарылым жасау)

Жобаның скриншоты:

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Жалпы параметрлер

Барлық тапсырмаларда құсбелгіні қою керек.Таза құрастыру: құрастыру алдында тексеру каталогындағы барлық файлдарды жойыңыз«, өйткені бұл құсбелгісіз қателер алдым.

Біз бірыңғай VCS жасаймыз. VCS мүмкіндіктері қызыл түспен шеңберленеді.

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Әдетте 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 ішіндегі мән өрісі бос қалуы керек.

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Жеке кілтті жүктеп салу/қосу қажет. CI Build бағдарламасынан басқа барлық тапсырмалар жеке кілтті қажет етеді.

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Әрбір тапсырмада, CI құрастыруынан басқа, Құрастыру мүмкіндіктері бөлімінде жеке кілтті қосу керек.

үшін мысал Maven шығарылымы

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

CI Build**.

Тапсырмада CI құрастыру бір қадам ғана mvn таза сынақ

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Екінші қадам стандартты болып табылады mvn шығару: дайындаңыз опциясымен --топтама режимі

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Шығару үшін филиал жасаңыз

Шығарылым үшін түзетуді жасау үшін тармақты жасау керек. Бұл тапсырманы орындайды Шығару үшін филиал жасаңыз. Оның 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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Екінші қадам 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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Maven екінші қадамы pom.xml файлындағы қатені түзету нұсқасын өзгерту болып табылады.

Мақсаты: Maven бір жолда барлығы бар

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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Үшінші қадам - ​​Git күйі туралы ақпаратты және басқаларды көрсету:

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

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Төртінші қадам 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%

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Бесінші қадам - ​​файлдан алу 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']"

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Алтыншы қадам – белгілеу түзету нұсқалары. Бұл пайдалану арқылы жасалады Maven ішінде қажетті опциямен мақсат.

Опция мақсаттары:

-Dtag=%TAG_FROM_VERSION% scm:tag

TeamCity көмегімен Maven жобаларында HotFix автоматтандыруы

Ақпарат көзі: www.habr.com

пікір қалдыру