Automasi HotFix dalam projek Maven menggunakan TeamCity

Siaran ini akan menerangkan penyediaan automasi HotFix dalam projek Maven menggunakan Teamcity.

Untuk melakukan HotFix, banyak langkah manual biasanya dilakukan:

  1. Buat makan tengah hari untuk keluaran yang anda mahu gunakan HotFix
  2. Betulkan pepijat dalam keluaran
  3. Tukar versi pembetulan pepijat dalam cawangan keluaran
  4. Keluarkan teg versi pembetulan pepijat

Mata 1,3,4 boleh diautomasikan.

Sebelum kita beralih kepada topik, saya ingin menyentuh topik yang penting dan kompleks - pembuatan versi perisian. Anda boleh memahami Semver secara ringkas dalam tangkapan skrin ini. Automasi HotFix dalam projek Maven menggunakan TeamCity

Anda boleh membaca lebih lanjut di pautan: 1.

Semua tetapan yang diterangkan dalam siaran ini adalah berdasarkan Semver и Pembangunan Berasaskan Batang.

Dalam Pembangunan Berasaskan Batang, anda perlu mencipta cawangan anda sendiri untuk setiap keluaran. Semua perubahan (pembetulan terkini) dalam keluaran ini komited kepada cawangan ini.

Sebagai sebahagian daripada siaran ini, kami akan mengautomasikan perkara berikut:

  • Binaan CI

  • Mencipta keluaran baharu

  • Mencipta cawangan keluaran

  • Menukar versi pembaikan pepijat

Automasi HotFix dalam projek Maven menggunakan TeamCity

Keperluan:

Mari buat projek "Pembetulan Terkini Automasi Maven" dalam Teamcity dan buat 4 tugasan di sana.

  • Binaan CI

  • Buat cawangan untuk keluaran

  • Pembetulan pepijat kenaikan Maven (Tukar versi pembetulan pepijat))

  • Keluaran Maven (Mencipta keluaran baharu)

Tangkapan skrin projek:

Automasi HotFix dalam projek Maven menggunakan TeamCity

Tetapan umum

Dalam semua tugas anda mesti tandakan kotak "Binaan bersih: Padam semua fail dalam direktori pembayaran sebelum binaan“, kerana tanpa kotak semak ini saya mendapat ralat.

Kami mencipta satu VCS. Ciri VCS dibulatkan dengan warna merah.

Automasi HotFix dalam projek Maven menggunakan TeamCity

Biasanya VCS menggunakan skema HTTPS. DALAM Spesifikasi cawangan: ditunjukkan untuk menonton semua makan tengah hari dan semua tag:

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

Ia adalah perlu untuk mencipta 4 Parameter Konfigurasi.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Medan nilai dalam BRANCH_FOR_INCREMENT dan TAG_FROM_VERSION mesti dibiarkan kosong.

Automasi HotFix dalam projek Maven menggunakan TeamCity

Anda perlu memuat naik/menambah kunci peribadi. Semua tugas kecuali CI Build memerlukan kunci peribadi.

Automasi HotFix dalam projek Maven menggunakan TeamCity

Dalam setiap tugas, kecuali CI Build, dalam bahagian Build Features anda perlu menyambungkan kunci peribadi.

Contoh untuk pelepasan Maven

Automasi HotFix dalam projek Maven menggunakan TeamCity

CI Build**.

Dalam sesuatu tugasan Binaan CI hanya satu langkah ujian bersih mvn

Automasi HotFix dalam projek Maven menggunakan TeamCity

pelepasan Maven

Dalam sesuatu tugasan pelepasan Maven 2 langkah. Langkah pertama ialah menyemak sarapan tengah hari itu master. Jika tidak makan tengah hari master, maka tugas itu jatuh.

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

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah kedua adalah standard mvn release:prepare dengan pilihan --mod-batch

Automasi HotFix dalam projek Maven menggunakan TeamCity

Buat cawangan untuk keluaran

Untuk mencipta hotfix untuk keluaran anda perlu membuat cawangan. Inilah yang dilakukan oleh taska Buat cawangan untuk keluaran. Dia mempunyai 2 langkah.

Langkah pertama menyemak bahawa makan tengah hari tidak master, dan yang kedua menyemak bahawa versi ada dalam fail pom.xml tidak mengandungi perkataan GAMBAR GAMBAR

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

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah kedua menukar skema sambungan dalam developerConnection daripada HTTPS kepada 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

Automasi HotFix dalam projek Maven menggunakan TeamCity

Pembetulan pepijat peningkatan Maven

Tugasan terdiri daripada 6 bahagian. Ia mungkin telah difaktorkan semula, tetapi ia masih berfungsi.

Langkah pertama adalah untuk memeriksa sama ada makan tengah hari tidak master. Jika makan tengah hari master tugas itu jatuh.

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']"

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah Maven kedua ialah menukar versi pembaikan pepijat dalam fail pom.xml.

Matlamat: Maven mempunyai segala-galanya dalam satu baris

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

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah ketiga ialah untuk memaparkan maklumat status Git dan lain-lain:

echo 'cat pom.xml'
cat pom.xml
echo 'git status'
git status
echo 'git remote -v'
git remote -v
echo 'git branch'
git branch

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah keempat menukar skema sambungan dalam developerConnection daripada HTTPS kepada GIT.

Dan menolak perubahan pada cawangan yang ditentukan dalam Teamcity dengan pembolehubah %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%

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah kelima ialah mendapatkan daripada fail pom.xml versi dan memasangnya Teamcity pembolehubah TAG_FROM_VERSION. Ambil perhatian bahawa versi daripada fail pom.xml tanpa huruf v di hadapan. Dan teg, berdasarkan versi ini, sudah mempunyai huruf v pada permulaannya.

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']"

Automasi HotFix dalam projek Maven menggunakan TeamCity

Langkah keenam - penandaan bugfix versi. Ini dilakukan menggunakan Maven dengan pilihan yang diperlukan dalam Matlamat.

Pilihan Anda:

-Dtag=%TAG_FROM_VERSION% scm:tag

Automasi HotFix dalam projek Maven menggunakan TeamCity

Sumber: www.habr.com

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster