أتمتة HotFix في مشاريع Maven باستخدام TeamCity

سيصف هذا المنشور إعداد أتمتة HotFix في مشاريع Maven باستخدام Teamcity.

للقيام بالإصلاح العاجل، عادةً ما يتم تنفيذ الكثير من الخطوات اليدوية:

  1. أنشئ وجبة فطور وغداء للإصدار الذي تريد طرح HotFix عليه
  2. إصلاح الخلل في الإصدار
  3. قم بتغيير إصدار bugfix في فرع الإصدار
  4. طرح علامة إصدار bugfix

يمكن أتمتة النقاط 1,3,4،XNUMX،XNUMX.

قبل أن ننتقل إلى الموضوع، أود أن أتطرق إلى موضوع مهم ومعقد - الإصدار برمجة. يمكنك فهم Semver بإيجاز في لقطة الشاشة هذه. أتمتة HotFix في مشاريع Maven باستخدام TeamCity

يمكنك قراءة المزيد على الرابط: 1.

تعتمد جميع الإعدادات الموضحة في هذا المنشور على سمفر и التنمية القائمة على الجذع.

في التطوير القائم على Trunk، تحتاج إلى إنشاء فرع خاص بك لكل إصدار. جميع التغييرات (الإصلاحات العاجلة) في هذا الإصدار مخصصة لهذا الفرع.

كجزء من هذا المنشور، سنقوم بأتمتة الأمور التالية:

  • بناء سي.آي

  • إنشاء إصدار جديد

  • إنشاء فرع الإصدار

  • تغيير إصدار bugfix

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

المتطلبات:

  • مستودع Git لتخزين التعليمات البرمجية الخاصة بك. سيستخدم المنشور المستودع https://gitlab.com/anton_patsev/automation-maven-hotfix.
  • خادم ووكيل Teamcity. يمكنك رفع خادم ووكيل Teamcity المحلي الخاص بك باستخدام عامل ميناء-يؤلف
  • عندما يكون لديك وكيل Teamcity، يجب تثبيت java وmaven وgit

لنقم بإنشاء مشروع "Automation Maven Hotfix" في Teamcity وإنشاء 4 مهام هناك.

  • بناء سي.آي

  • إنشاء فرع للإفراج عنه

  • زيادة Maven bugfix (تغيير إصدار bugfix))

  • إصدار Maven (إنشاء إصدار جديد)

لقطة شاشة للمشروع:

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الإعدادات العامة

في جميع المهام يجب عليك تحديد المربع "البناء النظيف: احذف جميع الملفات الموجودة في دليل الخروج قبل الإنشاء"، لأنه بدون مربع الاختيار هذا حصلت على أخطاء.

نقوم بإنشاء VCS واحد. ميزات VCS محاطة بدائرة باللون الأحمر.

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

عادةً ما تستخدم VCSs نظام HTTPS. في مواصفات الفرع: تمت الإشارة إليه لمشاهدة جميع وجبات الإفطار والغداء وجميع العلامات:

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

من الضروري إنشاء 4 معلمات التكوين.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

يجب ترك حقل القيمة في BRANCH_FOR_INCREMENT وTAG_FROM_VERSION فارغًا.

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

تحتاج إلى تحميل/إضافة مفتاح خاص. تتطلب كافة المهام باستثناء CI Build مفتاحًا خاصًا.

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

في كل مهمة، باستثناء CI Build، في قسم Build Features (ميزات البناء)، تحتاج إلى توصيل مفتاح خاص.

مثال ل الافراج عن مافن

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

بناء CI **.

في مهمة بناء سي.آي خطوة واحدة فقط اختبار mvn النظيف

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الافراج عن مافن

في مهمة الافراج عن مافن 2 خطوات. الخطوة الأولى هي التحقق من أن الغداء رئيسي. إذا لم يكن الغداء رئيسي، ثم تقع المهمة.

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

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الخطوة الثانية هي القياسية إصدار mvn: تحضير مع الخيار --دفعة واسطة

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

إنشاء فرع للإفراج عنه

لإنشاء إصلاح عاجل لإصدار ما، يلزمك إنشاء فرع. وهذا ما تفعله المهمة إنشاء فرع للإفراج عنه. لديها خطوتين.

الخطوة الأولى تتحقق من عدم وجود وجبة فطور وغداء رئيسي، والثاني يتحقق من وجود الإصدار في الملف 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

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

تقوم الخطوة الثانية بتغيير نظام الاتصال في 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

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

زيادة مخضرم bugfix

تتكون المهمة من 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']"

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الخطوة الثانية لـ Maven هي تغيير إصدار bugfix في ملف pom.xml.

الأهداف: Maven لديه كل شيء في سطر واحد

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

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الخطوة الثالثة هي عرض معلومات حالة 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

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

تقوم الخطوة الرابعة بتغيير نظام الاتصال في DeveloperConnection من HTTPS إلى GIT.

ويدفع التغييرات إلى الفرع المحدد في Teamcity بواسطة المتغير %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%

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الخطوة الخامسة هي الحصول على من الملف 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']"

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

الخطوة السادسة - وضع العلامات إصلاح الخلل الإصدارات. يتم ذلك باستخدام مخضرم مع الخيار المطلوب في المبلغ المستهدف.

خيار الأهداف:

-Dtag=%TAG_FROM_VERSION% scm:tag

أتمتة HotFix في مشاريع Maven باستخدام TeamCity

المصدر: www.habr.com

إضافة تعليق