![构建附加唯一限定符的 rpm 文件](https://linux22.com/image/497953/%E6%9E%84%E5%BB%BA%E9%99%84%E5%8A%A0%E5%94%AF%E4%B8%80%E9%99%90%E5%AE%9A%E7%AC%A6%E7%9A%84%20rpm%20%E6%96%87%E4%BB%B6.png)
我正在持续集成环境中构建 RPM,我需要区分连续的构建,但显然 spec 文件不会在每次签入时被修改。
spec 文件头包含类似
Version: 1.0beta7
Release: 1.1
我想覆盖它,以便构建的 RPM 将有一个限定附加到版本,例如
Version: 1.0.beta7.2913
假设限定符已经可用,作为环境变量,将限定符附加到版本的最简单方法是什么?
答案1
相当简单:
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,则仅打印“。”。
答案2
这种方法的问题在于,这种规范需要外部定义的参数(buildnumber)...例如,重新构建 .src.rpm 文件很可能会产生与 CI 系统最初使用的版本号不同的版本号。
我认为您真正想要的是将源版本(例如,Subversion 修订号)嵌入到 RPM 版本号中。我从模板生成 RPM .specs。该模板是源代码控制的,构建过程会从中生成一个真正的 spec 文件,因此
Version: 1.0.beta7.svn@SVN_REV@
变成类似
Version: 1.0.beta7.svn1234