我正在制作一些由 Jenkins 构建的配置包,然后在需要时检出它们。包本身已构建并运行良好。我现在的问题是 rpmbuild 用于实际构建项目的目录。当我从工作目录调用 rpmbuild SPECS/package.spec 时,rpmbuild 在
/home/user/rpmbuild
处创建一个新目录。当我运行测试时,这很好,但我宁愿能够从 Jenkins 进程调用的任何文件进行构建。
我看到网上有人说制作一个
~/.rpmmacros
文件来覆盖$_topdir
变量。这种方法并不真正适用于 Jenkins 构建。有没有什么方法可以简单地调用 rpmbuild 并在当前目录中构建?结构都在那里,它会更好地适合我想做的事情。谢谢。
是的,直接覆盖
_topdir
即可。
rpmbuild -D '_topdir /new/value/for/_topdir'
或
rpmbuild --define='_topdir /new/value/for/_topdir'
这些应该是相同的,但我了解到它们并不总是由于某种原因(并且在快速测试中
rpm -D '_topdir /opt/tnstmp' --showrc | grep _topdir
不显示修改后的值,但rpm --define '_topdir /opt/tnstmp' --showrc | grep _topdir
显示)。
如果
--define
是例如,则将 rpmbuild
添加到 rpmbuild
调用可能不是一个选项。在源代码的 Makefile 中,然后需要对其进行修改。
但是,
%{_topdir}
基于$HOME
,因此您可以尝试在修改后的环境中运行rpmbuild
,您可以在其中重新定义$HOME
:
$ HOME=my/topdir rpmbuild -E %{_topdir}
my/topdir/rpmbuild
此外,
~/.rpmmacros
并不是唯一可以定义 RPM 宏的位置,其他位置例如: /etc/rpm/macros
这可能更适合设置 Jenkins 代理机器。在这些宏文件中,您可以使用环境变量,包括 Jenkins 特定的变量。