GNU/Linux >> Tutoriales Linux >  >> Linux

Usando el NÚMERO DE CONSTRUCCIÓN de Jenkins en el archivo de especificaciones RPM

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.


Linux
  1. Administrar el inicio usando systemd

  2. Cómo construir paquetes rpm

  3. ¿Usando Uniq en texto Unicode?

  4. 7 pasos para crear un paquete RPM desde el origen en CentOS/RedHat

  5. Usando nc para transferir archivos grandes

Uso del archivo de configuración SSH

5 formas de contar el número de líneas en un archivo

Cómo:una introducción al uso de Git

Transferir archivos usando WinSCP

Eliminar un archivo en Linux usando el número de inodo

¿Cómo eliminar un archivo sin usar rm?