Я создаю RPM в среде непрерывной интеграции, и мне нужно различать последовательные сборки, но очевидно, что файл спецификации не изменяется при каждой проверке.
Заголовок файла спецификации содержит что-то вроде
Version: 1.0beta7
Release: 1.1
Я хотел бы переопределить его, чтобы к версии встроенного RPM было добавлено квалифицированное, например
Version: 1.0.beta7.2913
Предполагая, что квалификатор уже доступен в качестве переменной среды, какой самый простой способ добавить квалификатор к версии?
Довольно просто:
Version: 1.0.beta7.%(echo $ENVVAR)
Вы можете запустить любую команду внутри% (); просто убедитесь, что в выводе нет пробелов.
Лично я считаю, что лучше вставить его в переменную вверху:
%define buildnumber %(whatever command to get the build number)
Version: 1.0.beta7.%{buildnumber}
Или сделать это условным для устанавливаемой переменной:
Version: 1.0.beta7%{?buildnumber:.%{buildnumber}}
Это должно печатать только "." если установлен% buildnumber.
Проблема с этим подходом заключается в том, что такие спецификации требуют внешнего параметра (buildnumber) ... например, повторная сборка файла .src.rpm, скорее всего, даст другой номер версии, чем тот, который изначально использовался вашей системой CI.
Я думаю, что вам действительно нужно встроить исходную версию (например, номер версии подрывной версии) в номер версии RPM. Я генерирую спецификации RPM из шаблонов. Шаблон управляется исходным кодом, и процесс сборки генерирует из него настоящий файл спецификации, поэтому
Version: 1.0.beta7.svn@SVN_REV@
становится чем-то вроде
Version: 1.0.beta7.svn1234