GNU/Linux >> Znalost Linux >  >> Linux

Použití Jenkins BUILD NUMBER v souboru specifikace RPM

Už je to dlouho... a naštěstí nemám žádné systémy založené na otáčkách, takže to nemůžu otestovat.

Parametry můžete předat do rpmbuild na příkazovém řádku

rpmbuild --define="version ${env.BUILD_NUMBER}"

Bylo by užitečné zveřejnit úryvky specifikace a skriptu, který používáte k sestavení rpm. Nechcete, aby váš sestavení skript upravoval soubor spec, o kterém předpokládám, že se stahuje z nějakého ovládacího prvku zdroje.


Používal jsem číslo sestavení Jenkins jako „vydání“ a balení přes fpm.

Pár fpm s některými globálními, které poskytl 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.

V níže uvedeném příkladu příkazu jsou některé mlhavé proměnné, ale $BUILD_NUMBER je to, co používám pro vydání zde (fpm tomu říká iterace místo).

fpm_out=$(fpm -a all -n $real_pkg_name -v $version -t rpm -s dir --iteration $BUILD_NUMBER ./*)

V mém nastavení Jenkins jsem se rozhodl úplně obejít číslo sestavení s ohledem na číslování verze RPM. Místo toho používám podomácku vytvořený skript, který generuje a sleduje různá generovaná vydání.

V mém souboru specifikací:

Version:    %{_iv_pkg_version}
Release:    %{_iv_pkg_release}%{?dist}

A ve skriptu sestavování 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 je jednoduchý skript, který udržuje databázi založenou na souborech (ve formátu JSON pro snadnou údržbu). Zvládne být spuštěn ve stejnou dobu, takže žádný strach, ale nebude to fungovat, pokud máte build slave (pokud mohu říci, nepoužívám je, takže nemohu testovat). Zdrojový kód a dokumentaci naleznete zde.

Výsledkem je, že dostanu následující schéma verzování balíčku:

# 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:Všimněte si, že skript sestavování Jenkins je jen příkladem, logika za vytvořením adresářové struktury rpmbuild a načtením názvů souborů .src.rpm a .spec je trochu složitější.


Linux
  1. 7 kroků k vytvoření balíčku RPM ze zdroje na CentOS / RedHat

  2. dočasné umístění souboru při použití tmpfile() v C

  3. Odstraňte soubor v systému Linux pomocí čísla inodu

  1. Používáte podtržítko v názvech souborů?

  2. Jak podložit soubor pomocí FF pomocí dd?

  3. Jak odstranit soubor bez použití rm?

  1. Spravujte spouštění pomocí systemd

  2. Co je číslo inodu v Linuxu?

  3. Používáte Inotify ke sledování přístupu k souboru?