W konfiguracji Jenkins zdecydowałem się ominąć numer kompilacji pod względem numerowania wersji RPM. Zamiast tego korzystam z domowego skryptu, który generuje i śledzi różne publikacje, które są generowane.
W moim pliku spec:
Version: %{_iv_pkg_version}
Release: %{_iv_pkg_release}%{?dist}
I w skrypcie Jenkins produkcji:
# 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
jest prosty skrypt, który utrzymuje bazę danych na podstawie pliku (w formacie JSON, dla łatwej konserwacji). Może poradzić sobie z byciem uruchamianym w tym samym czasie, więc nie ma tam żadnych zmartwień, ale nie zadziała, jeśli masz zbudowanych niewolników (o ile mogę powiedzieć, nie używam ich, więc nie mogę przetestować). Możesz znaleźć kod źródłowy i dokumentację here.
Rezultatem jest to, że pojawia się następujący schemat wersjonowania pakiet:
# 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: Należy pamiętać, że Jenkins zbudować skrypt jest tylko przykładem, logika tworzenia struktury katalogów rpmbuild i pobierania .src. Nazwy plików rpm i .spec są nieco bardziej skomplikowane.
sed -i "s/VERSION/$ BUILD_NUMBER /" rpm.spec –
nie chcesz, aby plik .spec był (powinien) być pod kontrolą źródła, więc kompilacja nie powinna go zmieniać. – thekbb
try [fpm] (https://github.com/jordansissel/fpm), o wiele lepiej niż pliki spec w 80% przypadków! – quickshiftin