يصف هذا المنشور كيفية تكوين أتمتة HotFix في مشاريع Maven باستخدام Teamcity.
للقيام بـ HotFix ، عادة ما يتم تنفيذ الكثير من الإجراءات اليدوية:
- قم بإنشاء وجبة فطور للإصدار الذي تريد تطبيق HotFix عليه
- إصلاح خلل الإصدار
- تغيير نسخة bugfix في الافراج عن الغداء
- طرح إصدار علامة bugfix
البنود 1،3،4 يمكن أن يكون آليا.
قبل أن ننتقل إلى الموضوع ، أريد أن أتطرق إلى برنامج مهم لتعقيد المواضيع. لفترة وجيزة عن Semver يمكن فهمها في هذه الصورة. 
يمكنك قراءة المزيد على الرابط: 1 .
تستند جميع الإعدادات الموضحة في هذا المنشور إلى تطوير يستند إلى جذع .
في Trunk-Based Development ، لكل إصدار تحتاج إلى إنشاء وجبة غداء خاصة بك. جميع التغييرات (الإصلاح) ضمن هذا الإصدار ملتزمون بهذا الغداء.
كجزء من هذا المنشور ، نقوم بأتمتة الأشياء التالية:
CI التجمع
إنشاء الإصدار الجديد
خلق غداء للإفراج
تغيير إصدار bugfix

متطلبات:
دعونا إنشاء مشروع "أتمتة Maven Hotfix" في Teamcity وإنشاء 4 مهام هناك.
لقطة شاشة للمشروع:

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

عادةً ما يستخدم نظام VCS نظام HTTPS. في مواصفات الفرع: يشار إلى مشاهدة جميع وجبات الغداء الخفيفة وجميع العلامات:
+: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 Build ، في قسم Build Features ، تحتاج إلى توصيل مفتاح خاص.
مثال لإطلاق سراح مخضرم

بناء CI **.
في مهمة بناء CI ، مجرد خطوة واحدة اختبار mvn نظيفة

الافراج عن مخضرم
هناك 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 القياسي : الاستعداد باستخدام خيار --batch-mode

إنشاء فرع للإفراج
لإنشاء الإصلاح العاجل للإصدار تحتاج إلى إنشاء وجبة غداء. يتم ذلك عن طريق إنشاء فرع لمهمة الإصدار . لديها 2 خطوات.
تقوم الخطوة الأولى بالتحقق من أن وجبة الغداء غير رئيسية ، بينما تتحقق الخطوة الثانية من أن الإصدار الموجود في ملف pom.xml لم يحتوي على كلمة 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 "******************* WARNING *************************" echo "************ You are create branch for SNAPSHOTS ******************" echo "***********************************************************" exit 1 fi

تغيّر الخطوة الثانية نظام اتصال developerConnection من HTTPS إلى GIT.

مخضرم زيادة بوجفيكس
المهمة تتكون من 6 أجزاء. يمكن إعادة تشكيلها ، لكنها تعمل من هذا القبيل.
الخطوة الأولى هي التحقق من أن الغداء ليس سيدًا . إذا سقطت مهمة سيد الغداء.
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" == "master" ]]; then echo 'Branch is master'; echo 'Aborting'; exit 1; fi

الخطوة Maven الثانية هي تعديل إصدار bugfix في ملف pom.xml.
الأهداف: مخضرم لديه كل شيء في سطر واحد
build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion} versions:commit

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

تغيّر الخطوة الرابعة نظام اتصال developerConnection من HTTPS إلى GIT.
ويدفع التغييرات إلى الفرع المحدد في Teamcity المتغير٪ BRANCH_FOR_INCREMENT٪

الخطوة الخامسة تحصل على الإصدار من ملف pom.xml وتعيين المتغير TAG_FROM_VERSION على Teamcity . لاحظ أن الإصدار من ملف pom.xml بدون الحرف 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']"

الخطوة السادسة هي وضع علامة على إصدار bugfix . يتم ذلك باستخدام Maven مع الخيار المطلوب في الهدف .
أهداف الأهداف :
-Dtag=%TAG_FROM_VERSION% scm:tag
