TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Bu yazıda Teamcity kullanılarak Maven projelerinde HotFix otomasyonunun kurulması anlatılacaktır.

HotFix'i gerçekleştirmek için genellikle birçok manuel adım gerçekleştirilir:

  1. HotFix'i kullanıma sunmak istediğiniz sürüm için bir brunch oluşturun
  2. Sürümdeki bir hatayı düzeltin
  3. Yayın dalındaki hata düzeltme sürümünü değiştirin
  4. Hata düzeltme sürüm etiketinin kullanıma sunulması

1,3,4 noktaları otomatikleştirilebilir.

Konuya geçmeden önce önemli ve karmaşık bir konuya değinmek istiyorum. versiyonlama yazılım. Bu ekran görüntüsünde Semver'i kısaca anlayabilirsiniz. TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Daha fazlasını bağlantıdan okuyabilirsiniz: 1.

Bu yazıda açıklanan tüm ayarlar, semver и Gövde Tabanlı Geliştirme.

Trunk-Based Development'ta her sürüm için kendi şubenizi oluşturmanız gerekir. Bu sürümdeki tüm değişiklikler (düzeltmeler) bu şubeye yöneliktir.

Bu yazının bir parçası olarak aşağıdaki şeyleri otomatikleştireceğiz:

  • CI yapısı

  • Yeni bir sürüm oluşturma

  • Yayın dalı oluşturma

  • Hata düzeltme sürümünü değiştirme

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Gereksinimler:

Teamcity'de “Automation Maven Hotfix” projesini oluşturalım ve orada 4 adet görev oluşturalım.

  • CI Yapısı

  • Sürüm için şube oluştur

  • Maven artış hatası düzeltmesi (Hata düzeltme sürümünü değiştir))

  • Maven sürümü (Yeni bir sürüm oluşturma)

Proje ekran görüntüsü:

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Genel ayarlar

Tüm görevlerde "kutucuğunu işaretlemelisiniz"Derlemeyi temizle: Derlemeden önce ödeme dizinindeki tüm dosyaları silin“çünkü bu onay kutusu olmadan hatalar alıyorum.

Tek bir VCS oluşturuyoruz. VCS özellikleri kırmızı daire içine alınmıştır.

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Tipik olarak VCS'ler HTTPS şemasını kullanır. İÇİNDE Şube özellikleri: tüm brunch'ları ve tüm etiketleri izlemek için belirtildi:

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

4 Konfigürasyon Parametresi oluşturmak gereklidir.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

BRANCH_FOR_INCREMENT ve TAG_FROM_VERSION içindeki değer alanı boş bırakılmalıdır.

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Özel bir anahtar yüklemeniz/eklemeniz gerekir. CI Build dışındaki tüm görevler özel anahtar gerektirir.

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

CI Build dışındaki her görevde, Yapı Özellikleri bölümünde özel bir anahtar bağlamanız gerekir.

Örnek: Maven sürümü

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

CI Derlemesi**.

Bir görevde CI Yapısı sadece bir adım mvn temiz testi

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Maven sürümü

Bir görevde Maven sürümü 2 adım. İlk adım brunch'ın olup olmadığını kontrol etmektir. usta. Brunch değilse ustao zaman görev düşüyor.

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

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

İkinci adım standarttır mvn sürümü:hazırla seçeneği ile --toplu modu

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Sürüm için şube oluştur

Bir sürüme yönelik düzeltme oluşturmak için bir dal oluşturmanız gerekir. Taska'nın yaptığı budur Sürüm için şube oluştur. 2 adımı var.

İlk adım, brunch'ın uygun olup olmadığını kontrol eder. ustave ikincisi sürümün dosyada olup olmadığını kontrol eder pom.xml kelimeyi içermiyordu ENSTANTANE FOTOĞRAF

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 kullanarak Maven projelerinde HotFix'in otomasyonu

İkinci adım, DeveloperConnection'daki bağlantı şemasını HTTPS'den GIT'e değiştirir.

# Здесь получаем 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 kullanarak Maven projelerinde HotFix'in otomasyonu

Maven artış hatası düzeltmesi

Görev 6 bölümden oluşmaktadır. Yeniden düzenlenebilirdi ama hala çalışıyor.

İlk adım, brunch'ın uygun olup olmadığını kontrol etmektir. usta. Brunch ise usta görev düşüyor.

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 kullanarak Maven projelerinde HotFix'in otomasyonu

İkinci Maven adımı pom.xml dosyasındaki hata düzeltme sürümünü değiştirmektir.

Gol: Maven'de her şey tek satırda

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

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Üçüncü adım Git durum bilgilerini ve diğerlerini görüntülemektir:

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 kullanarak Maven projelerinde HotFix'in otomasyonu

Dördüncü adım, DeveloperConnection'daki bağlantı şemasını HTTPS'den GIT'e değiştirir.

Ve değişiklikleri %BRANCH_FOR_INCREMENT% değişkeni tarafından Teamcity'de belirtilen şubeye aktarır

# Здесь получаем 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 kullanarak Maven projelerinde HotFix'in otomasyonu

Beşinci adım dosyadan almak pom.xml sürümü ve onu yükler takım şehri değişken TAG_FROM_VERSION. Dosyadaki sürümün pom.xml önünde v harfi olmadan. Ve bu versiyona göre etiketin başında zaten v harfi 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 kullanarak Maven projelerinde HotFix'in otomasyonu

Altıncı adım - etiketleme bugfix versiyonları. Bu kullanılarak yapılır Maven gerekli seçenek ile Gol.

Seçenek Goller:

-Dtag=%TAG_FROM_VERSION% scm:tag

TeamCity kullanarak Maven projelerinde HotFix'in otomasyonu

Kaynak: habr.com

Yorum ekle