Sudah lama... dan untungnya saya tidak memiliki sistem berbasis rpm jadi saya tidak bisa mengujinya.
Anda dapat meneruskan parameter ke rpmbuild
pada baris perintah
rpmbuild --define="version ${env.BUILD_NUMBER}"
Akan sangat membantu untuk memposting cuplikan spesifikasi dan skrip yang Anda gunakan untuk membuat rpm. Anda tidak ingin skrip build Anda mengedit file spesifikasi, yang saya asumsikan ditarik dari beberapa kontrol sumber.
Saya telah menggunakan nomor build Jenkins sebagai 'rilis' dan pengemasan melalui fpm.
Pasangkan fpm dengan beberapa global yang disediakan oleh Jenkins
# $BUILD_ID - The current build id, such as "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss)
# $BUILD_NUMBER - The current build number, such as "153"
# $BUILD_TAG - String of jenkins-${JOB_NAME}-${BUILD_NUMBER}. Convenient to put into a resource file, a jar file, etc for easier identification.
Ada beberapa variabel samar dalam perintah contoh di bawah ini, tetapi $BUILD_NUMBER
adalah apa yang saya gunakan untuk rilis di sini (fpm menyebutnya iterasi sebagai gantinya).
fpm_out=$(fpm -a all -n $real_pkg_name -v $version -t rpm -s dir --iteration $BUILD_NUMBER ./*)
Dalam pengaturan Jenkins saya, saya telah memutuskan untuk mem-bypass nomor build sehubungan dengan penomoran versi RPM sepenuhnya. Sebagai gantinya, saya menggunakan skrip buatan sendiri yang menghasilkan dan melacak berbagai rilis yang sedang dibuat.
Dalam file spesifikasi saya:
Version: %{_iv_pkg_version}
Release: %{_iv_pkg_release}%{?dist}
Dan di skrip build Jenkins:
# Just initialising some variables, and retrieving the release number.
package="$JOB_NAME"
# We use setuptools, so we can query the package version like so.
# Use other means to suit your needs.
pkg_version="$(python setup.py --version)"
pkg_release="$(rpm-release-number.py "$package" "$pkg_version")"
# Creating the src.rpm (ignore the spec file variables)
rpmbuild --define "_iv_pkg_version $pkg_version" \
--define "_iv_pkg_release $pkg_release" \
-bs "path/to/my/file.spec"
# Use mock to build the package in a clean chroot
mock -r epel-6-x86_64 --define "_iv_pkg_version $pkg_version" \
--define "_iv_pkg_release $pkg_release" \
"path/to/my/file.src.rpm"
rpm-release-number.py
adalah skrip sederhana yang mengelola basis data berbasis file (dalam format JSON, untuk memudahkan pemeliharaan). Itu dapat menangani dijalankan pada saat yang sama, jadi jangan khawatir, tetapi itu tidak akan berfungsi jika Anda memiliki budak build (sejauh yang saya tahu, saya tidak menggunakannya jadi tidak bisa menguji). Anda dapat menemukan kode sumber dan dokumentasinya di sini.
Hasilnya adalah saya mendapatkan skema pembuatan versi paket berikut:
# Build the same version 3 times
foo-1.1-1
foo-1.1-2
foo-1.1-3
# Increment the version number, and build twice
foo-1.2-1
foo-1.2-2
PS:Perhatikan bahwa skrip build Jenkins hanyalah sebuah contoh, logika di balik pembuatan struktur direktori rpmbuild dan mengambil nama file .src.rpm dan .spec sedikit lebih rumit.