从命令行调用时覆盖 rpmbuild 构建位置

问题描述 投票:0回答:2

我正在制作一些由 Jenkins 构建的配置包,然后在需要时检出它们。包本身已构建并运行良好。我现在的问题是 rpmbuild 用于实际构建项目的目录。当我从工作目录调用 rpmbuild SPECS/package.spec 时,rpmbuild 在

/home/user/rpmbuild
处创建一个新目录。当我运行测试时,这很好,但我宁愿能够从 Jenkins 进程调用的任何文件进行构建。

我看到网上有人说制作一个

~/.rpmmacros
文件来覆盖
$_topdir
变量。这种方法并不真正适用于 Jenkins 构建。有没有什么方法可以简单地调用 rpmbuild 并在当前目录中构建?结构都在那里,它会更好地适合我想做的事情。谢谢。

jenkins command-line-interface package rpm
2个回答
3
投票

是的,直接覆盖

_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
显示)。


0
投票

如果

--define
是例如,则将
rpmbuild
添加到
rpmbuild
调用可能不是一个选项。在源代码的 Makefile 中,然后需要对其进行修改。

但是,

%{_topdir}
基于
$HOME
,因此您可以尝试在修改后的环境中运行
rpmbuild
,您可以在其中重新定义
$HOME

$ HOME=my/topdir rpmbuild -E %{_topdir}
my/topdir/rpmbuild

此外,

~/.rpmmacros
并不是唯一可以定义 RPM 宏的位置,其他位置例如:
/etc/rpm/macros
这可能更适合设置 Jenkins 代理机器。在这些宏文件中,您可以使用环境变量,包括 Jenkins 特定的变量。

© www.soinside.com 2019 - 2024. All rights reserved.