Posting ini akan menjelaskan cara mengkonfigurasi otomatisasi HotFix di proyek Maven menggunakan Teamcity.
Untuk melakukan HotFix, banyak tindakan manual biasanya dilakukan:
- Buat brunch untuk rilis yang Anda inginkan untuk menggulung HotFix
- Perbaiki bug rilis
- Ubah versi perbaikan bug di rilis brunch
- Luncurkan versi perbaikan bug tag
Item 1,3,4 dapat diotomatisasi.
Sebelum kita beralih ke topik, saya ingin menyentuh pada perangkat lunak versi - topik yang penting dan kompleks. Secara singkat tentang Semver dapat dipahami dalam screenshot ini. 
Anda dapat membaca lebih lanjut di tautan: 1 .
Semua pengaturan yang dijelaskan dalam posting ini didasarkan pada Semver dan Pengembangan Berbasis Batang .
Dalam Pengembangan Berbasis Batang, untuk setiap rilis Anda harus membuat brunch sendiri. Semua perubahan (perbaikan terbaru) dalam rilis ini berkomitmen untuk makan siang ini.
Sebagai bagian dari pos ini, kami mengotomatiskan hal-hal berikut:

Persyaratan:
Mari kita buat proyek "Perbaikan Otomatis Maven" di Teamcity dan buat 4 tugas di sana.
CI Build (CI build)
Buat cabang untuk dirilis
Perbaikan bug peningkatan Maven (Ubah versi perbaikan bug))
Rilis Maven (Membuat rilis baru)
Tangkapan layar proyek:

Pengaturan umum
Dalam semua tugas itu perlu untuk mengatur kotak centang " Bersihkan membangun: Hapus semua file di direktori checkout sebelum membangun ", karena ketika daw ini hilang, saya mendapat kesalahan.
Buat VCS tunggal. Fitur VCS dilingkari merah.

VCS biasanya menggunakan skema HTTPS. Dalam spesifikasi Cabang: diindikasikan untuk menonton semua brunch dan semua tag:
+:refs/heads/* +:refs/tags/*
Diperlukan untuk membuat 4 Parameter Konfigurasi.
- BRANCH_FOR_INCREMENT
- TAG_FROM_VERSION
- TEAM_USER
- TEAM_USER_EMAIL
Bidang nilai dalam BRANCH_FOR_INCREMENT dan TAG_FROM_VERSION harus dikosongkan.

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

Di setiap tugas kecuali CI Build, di bagian Build Features, Anda perlu menghubungkan kunci pribadi.
Contoh untuk rilis Maven

CI Build **.
Dalam tugas CI Build , hanya satu langkah mvn tes bersih

Rilis Maven
Ada 2 langkah dalam rilis Maven . Langkah pertama adalah memverifikasi bahwa brunch adalah master . Jika makan siang tidak master , maka tugas jatuh.
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" != "master" ]]; then echo 'Branch is not master'; echo 'Aborting'; exit 1; fi

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

Buat cabang untuk dirilis
Untuk membuat perbaikan terbaru untuk rilis Anda perlu membuat brunch. Ini dilakukan oleh Buat cabang untuk tugas rilis . Dia memiliki 2 langkah.
Langkah pertama memeriksa bahwa brunch tidak master , dan yang kedua memeriksa bahwa versi dalam file pom.xml tidak mengandung kata 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

Langkah kedua mengubah skema konektivitas developerConnection dari HTTPS ke GIT.

Perbaikan bug peningkatan Maven
Tugas terdiri dari 6 bagian. Itu bisa di refactored, tetapi bisa berfungsi seperti itu.
Langkah pertama adalah memverifikasi bahwa brunch tidak master . Jika tugas master brunch jatuh.
BRANCH=$(git branch | grep \* | cut -d ' ' -f2) echo "$BRANCH" if [[ "$BRANCH" == "master" ]]; then echo 'Branch is master'; echo 'Aborting'; exit 1; fi

Langkah Maven 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

Langkah ketiga adalah menampilkan informasi status Git dan lainnya:
echo 'cat pom.xml' cat pom.xml echo 'git status' git status echo 'git remote -v' git remote -v echo 'git branch' git branch

Langkah keempat mengubah skema konektivitas developerConnection dari HTTPS ke GIT.
Dan mendorong perubahan ke cabang yang ditentukan dalam variabel Teamcity% BRANCH_FOR_INCREMENT%

Langkah kelima mendapatkan versi dari file pom.xml dan menetapkan variabel TAG_FROM_VERSION ke Teamcity . Perhatikan bahwa versi dari file pom.xml tanpa huruf v ada di depan. Dan tag, berdasarkan versi ini sudah dengan 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']"

Langkah keenam adalah menandai versi perbaikan bug . Ini dilakukan menggunakan Maven dengan opsi yang diinginkan di Goal .
Opsi Sasaran :
-Dtag=%TAG_FROM_VERSION% scm:tag
