Ha pasado mucho tiempo... y afortunadamente no tengo sistemas basados en rpm, así que no puedo probar esto.
Puede pasar parámetros a rpmbuild
en la línea de comandos
rpmbuild --define="version ${env.BUILD_NUMBER}"
Sería útil publicar fragmentos de la especificación y la secuencia de comandos que está utilizando para compilar el rpm. No desea que la secuencia de comandos de compilación edite el archivo de especificaciones, que asumo se está extrayendo de algún control de fuente.
He estado usando el número de compilación de Jenkins como 'lanzamiento' y empaquetado a través de fpm.
Pareja fpm con algunos globales proporcionados por 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.
Hay algunas variables nebulosas en el siguiente comando de ejemplo, pero $BUILD_NUMBER
es lo que estoy usando para el lanzamiento aquí (fpm lo llama iteración en su lugar).
fpm_out=$(fpm -a all -n $real_pkg_name -v $version -t rpm -s dir --iteration $BUILD_NUMBER ./*)
En mi configuración de Jenkins, decidí omitir el número de compilación con respecto a la numeración de la versión RPM por completo. En su lugar, utilizo un script casero que genera y realiza un seguimiento de los distintos lanzamientos que se generan.
En mi archivo de especificaciones:
Version: %{_iv_pkg_version}
Release: %{_iv_pkg_release}%{?dist}
Y en el script de compilación de 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
es un script simple que mantiene una base de datos basada en archivos (en formato JSON, para facilitar el mantenimiento). Puede manejar que se ejecute al mismo tiempo, así que no se preocupe, pero no funcionará si tiene esclavos de compilación (por lo que sé, no los uso, así que no puedo probar). Puede encontrar el código fuente y la documentación aquí.
El resultado es que obtengo el siguiente esquema de versiones del paquete:
# 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
PD:tenga en cuenta que el script de compilación de Jenkins es solo un ejemplo, la lógica detrás de la creación de la estructura de directorios de compilación rpm y la recuperación de los nombres de archivo .src.rpm y .spec es un poco más complicada.