Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Posting ini akan menjelaskan pengaturan otomatisasi HotFix di proyek Maven menggunakan Teamcity.

Untuk melakukan HotFix, biasanya banyak langkah manual yang dilakukan:

  1. Buat sarapan siang untuk rilis yang HotFixnya ingin Anda luncurkan
  2. Perbaiki bug dalam rilis
  3. Ubah versi perbaikan bug di cabang rilis
  4. Luncurkan tag versi perbaikan bug

Poin 1,3,4 dapat diotomatisasi.

Sebelum kita beralih ke topik, saya ingin menyentuh topik yang penting dan kompleks - pembuatan versi perangkat lunak. Anda dapat memahami Semver secara singkat di tangkapan layar ini. Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Anda dapat membaca lebih lanjut di tautan: 1.

Semua pengaturan yang dijelaskan dalam posting ini didasarkan pada Semver и Pembangunan Berbasis Batang.

Dalam Pengembangan Berbasis Batang, Anda perlu membuat cabang Anda sendiri untuk setiap rilis. Semua perubahan (perbaikan terbaru) dalam rilis ini dilakukan pada cabang ini.

Sebagai bagian dari postingan ini, kami akan mengotomatiskan hal-hal berikut:

  • membangun CI

  • Membuat rilis baru

  • Membuat cabang rilis

  • Mengubah versi perbaikan bug

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Persyaratan:

Mari kita buat proyek "Automation Maven Hotfix" di Teamcity dan buat 4 tugas di sana.

  • Membangun CI

  • Buat cabang untuk rilis

  • Perbaikan bug kenaikan Maven (Ubah versi perbaikan bug))

  • Rilis Maven (Membuat rilis baru)

Tangkapan layar proyek:

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Pengaturan umum

Dalam semua tugas, Anda harus mencentang kotak "Clean build: Hapus semua file di direktori checkout sebelum build“, karena tanpa kotak centang ini saya mendapatkan kesalahan.

Kami membuat satu VCS. Fitur VCS dilingkari merah.

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Biasanya VCS menggunakan skema HTTPS. DI DALAM Spesifikasi cabang: diindikasikan untuk menonton semua brunch dan semua tag:

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

Penting untuk membuat 4 Parameter Konfigurasi.

  • BRANCH_FOR_INCREMENT
  • TAG_FROM_VERSION
  • TEAM_USER
  • TEAM_USER_EMAIL

Bidang nilai di BRANCH_FOR_INCREMENT dan TAG_FROM_VERSION harus dibiarkan kosong.

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Anda perlu mengunggah/menambahkan kunci pribadi. Semua tugas kecuali CI Build memerlukan kunci pribadi.

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Di setiap tugas, kecuali CI Build, di bagian Fitur Build Anda perlu menghubungkan kunci pribadi.

Contoh untuk Rilis Maven

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Pembangunan CI**.

Dalam sebuah tugas Membangun CI hanya satu langkah tes bersih mvn

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Rilis Maven

Dalam sebuah tugas Rilis Maven 2 langkah. Langkah pertama adalah memeriksa apakah brunch tersebut menguasai. Jika makan siang tidak menguasai, maka tugasnya gagal.

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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah kedua adalah standar rilis mvn: persiapkan dengan opsi --mode batch

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Buat cabang untuk rilis

Untuk membuat perbaikan terbaru untuk rilis, Anda perlu membuat cabang. Inilah yang dilakukan tugas Buat cabang untuk rilis. Dia memiliki 2 langkah.

Langkah pertama memeriksa apakah brunch tidak menguasai, dan yang kedua memeriksa apakah versinya ada di file pom.xml tidak mengandung kata tersebut FOTO

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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah kedua mengubah skema koneksi di developerConnection dari HTTPS ke 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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Perbaikan bug kenaikan Maven

Tugas terdiri dari 6 bagian. Itu bisa saja difaktorkan ulang, tetapi masih berfungsi.

Langkah pertama adalah memeriksa apakah brunchnya tidak menguasai. Jika makan siang menguasai 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']"

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah Maven yang kedua adalah mengubah versi perbaikan bug di file pom.xml.

Tujuan: Maven memiliki segalanya dalam satu baris

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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah ketiga menampilkan informasi 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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah keempat mengubah skema koneksi di developerConnection dari HTTPS ke GIT.

Dan mendorong perubahan ke cabang yang ditentukan di Teamcity dengan variabel %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%

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah kelima adalah mendapatkan dari file pom.xml versi dan menginstalnya kota tim variabel TAG_FROM_VERSION. Perhatikan bahwa versi dari file pom.xml tanpa huruf v di depannya. Dan tagnya berdasarkan versi ini sudah ada huruf v di awal.

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

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Langkah keenam - penandaan bugfix versi. Ini dilakukan dengan menggunakan Maven dengan opsi yang diperlukan di Tujuan.

Pilihan Anda:

-Dtag=%TAG_FROM_VERSION% scm:tag

Otomatisasi HotFix di proyek Maven menggunakan TeamCity

Sumber: www.habr.com

Tambah komentar