אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

פוסט זה יתאר את הגדרת האוטומציה של HotFix בפרויקטים של Maven באמצעות Teamcity.

כדי לבצע HotFix, הרבה שלבים ידניים נעשים בדרך כלל:

  1. צור בראנץ' עבור המהדורה שבה אתה רוצה להפיץ את HotFix
  2. תקן באג בשחרור
  3. שנה את גרסת תיקון הבאגים בענף השחרור
  4. פרסם תג גרסת תיקון באגים

נקודות 1,3,4 יכולות להיות אוטומטיות.

לפני שנעבור לנושא, ברצוני לגעת בנושא חשוב ומורכב - ניהול גרסאות תוֹכנָה. אתה יכול להבין בקצרה את Semver בצילום מסך זה. אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

תוכל לקרוא עוד בקישור: 1.

כל ההגדרות המתוארות בפוסט זה מבוססות על סמבר и פיתוח מבוסס תא מטען.

בפיתוח מבוסס Trunk, עליך ליצור סניף משלך עבור כל מהדורה. כל השינויים (התיקונים החמים) בתוך מהדורה זו מחויבים לסניף זה.

כחלק מהפוסט הזה, נהפוך את הדברים הבאים לאוטומטיים:

  • בניית CI

  • יצירת מהדורה חדשה

  • יצירת סניף שחרור

  • שינוי גרסת תיקוני הבאגים

אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

דרישות:

בואו ניצור את פרויקט "התיקון החם של אוטומציה מייבן" ב-Teamcity וניצור שם 4 משימות.

  • CI Build

  • צור סניף לשחרור

  • תיקון באגים של Maven הגדל (שנה גרסת תיקון באגים))

  • מהדורה של Maven (יצירת מהדורה חדשה)

צילום מסך של הפרויקט:

אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

Общие настройки

בכל המשימות עליך לסמן את התיבה "בנייה נקייה: מחק את כל הקבצים בספריית התשלום לפני הבנייה", כי בלי תיבת הסימון הזו קיבלתי שגיאות.

אנו יוצרים VCS יחיד. תכונות VCS מוקפות בעיגול באדום.

אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

בדרך כלל VCSs משתמשים בסכימת HTTPS. IN מפרט סניף: ציינו לצפות בכל הבראנץ' ובכל התגים:

+: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 Build**.

במשימה CI Build רק צעד אחד בדיקה נקייה של 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

צור סניף לשחרור

כדי ליצור תיקון חם לגרסה, עליך ליצור סניף. זה מה שהטאסה עושה צור סניף לשחרור. יש לה 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

אוטומציה של 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

תיקון באגים של 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']"

אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

השלב השני של Maven הוא שינוי גרסת תיקון הבאגים בקובץ 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

שלב שישי - תיוג תיקון באגים גרסאות. זה נעשה באמצעות Maven עם האפשרות הנדרשת ב מטרה.

אפשרות שערים:

-Dtag=%TAG_FROM_VERSION% scm:tag

אוטומציה של HotFix בפרויקטים של Maven באמצעות TeamCity

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster