TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Bu yazı Teamcity istifadə edərək Maven layihələrində HotFix avtomatlaşdırmasının qurulmasını təsvir edəcək.

HotFix etmək üçün adətən bir çox əl addımları edilir:

  1. HotFix-i yaymaq istədiyiniz buraxılış üçün səhər yeməyi yaradın
  2. Buraxılış zamanı səhvi düzəldin
  3. Buraxılış bölməsində səhv düzəltmə versiyasını dəyişdirin
  4. bugfix versiyası etiketini yaymaq

1,3,4-cü bəndlər avtomatlaşdırıla bilər.

Mövzuya keçməzdən əvvəl vacib və mürəkkəb bir mövzuya toxunmaq istərdim - versiyalaşdırma proqram təminatı. Bu ekran görüntüsündə Semveri qısaca başa düşə bilərsiniz. TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Ətraflı linkdən oxuya bilərsiniz: 1.

Bu yazıda təsvir edilən bütün parametrlər bunlara əsaslanır Semver и Magistral Əsaslı İnkişaf.

Trunk-Based Development-də hər buraxılış üçün öz filialınızı yaratmalısınız. Bu buraxılış daxilindəki bütün dəyişikliklər (təmizləmələr) bu filiala aiddir.

Bu yazının bir hissəsi olaraq aşağıdakıları avtomatlaşdıracağıq:

  • CI qurmaq

  • Yeni buraxılış yaradılması

  • Buraxılış filialının yaradılması

  • Hata düzəliş versiyasının dəyişdirilməsi

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

tələblər:

Teamcity-də “Automation Maven Hotfix” layihəsini yaradaq və orada 4 tapşırıq yaradaq.

  • CI Build

  • Buraxılış üçün filial yaradın

  • Maven artımı bugfix (bağ düzəliş versiyasını dəyişdirin))

  • Maven buraxılışı (Yeni buraxılış yaradılması)

Layihənin ekran görüntüsü:

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Ümumi parametrlər

Bütün tapşırıqlarda qutuyu qeyd etməlisiniz "Təmiz quruluş: Quraşdırmadan əvvəl yoxlama qovluğundakı bütün faylları silin", çünki bu onay qutusu olmadan səhvlərim var.

Biz vahid VCS yaradırıq. VCS xüsusiyyətləri qırmızı rənglə əhatə olunub.

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Tipik olaraq VCS-lər HTTPS sxemindən istifadə edirlər. IN Filialın spesifikasiyası: bütün səhər yeməyi və bütün etiketləri izləmək üçün göstərilir:

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

4 Konfiqurasiya Parametri yaratmaq lazımdır.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

BRANCH_FOR_INCREMENT və TAG_FROM_VERSION-da dəyər sahəsi boş qalmalıdır.

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Siz şəxsi açar yükləməli/əlavə etməlisiniz. CI Build-dən başqa bütün tapşırıqlar şəxsi açar tələb edir.

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Hər tapşırıqda, CI Build istisna olmaqla, Quraşdırma Xüsusiyyətləri bölməsində şəxsi açarı birləşdirməlisiniz.

üçün misal Maven buraxılışı

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

CI Build**.

Bir vəzifədə CI Build yalnız bir addım mvn təmiz test

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Maven buraxılışı

Bir vəzifədə Maven buraxılışı 2 addım. İlk addım səhər yeməyi olduğunu yoxlamaqdır ustad. Əgər səhər yeməyi deyilsə ustad, sonra vəzifə düşür.

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

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

İkinci addım standartdır mvn buraxılışı:hazırlayın seçimi ilə --toplu rejim

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Buraxılış üçün filial yaradın

Buraxılış üçün düzəliş yaratmaq üçün filial yaratmalısınız. Taskanın etdiyi budur Buraxılış üçün filial yaradın. Onun 2 addımı var.

İlk addım səhər yeməyinin olmadığını yoxlayır ustad, ikincisi isə versiyanın faylda olduğunu yoxlayır pom.xml sözü yox idi SNAPSHOT

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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

İkinci addım developerConnection-da bağlantı sxemini HTTPS-dən GIT-ə dəyişir.

# Здесь получаем 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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Maven artım səhv düzəlişi

Tapşırıq 6 hissədən ibarətdir. Yenidən düzəldilə bilərdi, amma yenə də işləyir.

İlk addım səhər yeməyinin olmadığını yoxlamaqdır ustad. Əgər səhər yeməyi ustad vəzifə düşür.

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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Maven-in ikinci addımı pom.xml faylında səhv düzəliş versiyasını dəyişdirməkdir.

Qollar: Mavendə hər şey bir sətirdə var

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

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Üçüncü addım Git status məlumatını və digərlərini göstərməkdir:

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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Dördüncü addım developerConnection-da əlaqə sxemini HTTPS-dən GIT-ə dəyişir.

Və %BRANCH_FOR_INCREMENT% dəyişəni ilə Teamcity-də göstərilən filiala dəyişiklikləri itələyir

# Здесь получаем 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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Beşinci addım fayldan əldə etməkdir pom.xml versiyasını daxil edir və quraşdırır Komanda şəhəri dəyişən TAG_FROM_VERSION. Qeyd edək ki, fayldan versiya pom.xml qarşısında v hərfi olmadan. Və bu versiyaya əsaslanan etiketin əvvəlində artıq v hərfi var.

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 istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Altıncı addım - etiketləmə bugfix versiyaları. Bu istifadə edilir Maven tələb olunan seçim ilə Məqsəd.

Seçim Məqsədləri:

-Dtag=%TAG_FROM_VERSION% scm:tag

TeamCity istifadə edərək Maven layihələrində HotFix-in avtomatlaşdırılması

Mənbə: www.habr.com

Добавить комментарий