用于构建rpm的Makefile可以在本地运行,但不能在Jenkins

时间:2015-07-06 19:43:14

标签: jenkins makefile packages rpm

我有一个用于构建debian和rpm包的makefile。我有两个Jenkins环境,一个用于Ubuntu,另一个用于CentOS。 debian包没有问题,rpm make命令可以在我的机器上运行,但不适用于Jenkins。 Jenkins返回以下错误:

cp: cannot stat /root/rpmbuild/SOURCES/myfile.file': No such file or directory

error: Bad exit status from /var/tmp/rpm-tmp.mII8KL (%install)

我在开发软件包时遇到了类似的错误,但最终把所有内容弄清楚了,一切都很好。我认为问题可能出在$RPM_BUILD_ROOT%{buildroot}_topdir选项上。然而,我所尝试过的任何东西都无法引导我。

这是我的(修改过的)Makefile:

# a list of tools we depend on and must install if they're missing
DEBTOOLS=/usr/bin/debuild-pbuilder
RPMTOOLS=/usr/bin/rpmbuild

# convenience target for "make deb"
deb: my-package_1.0_all.deb

# convenience target for "make rpm".  
rpm: my-package-1.0-Public.x86_64.rpm

# the target package (on Ubuntu at least)
my-package_1.0_all.deb: $(DEBTOOLS)
    cd my-package; debuild-pbuilder -us -uc

my-package-1.0-Public.x86_64.rpm: $(RPMTOOLS)
    cd rpmbuild; rpmbuild -bb SPECS/my-package.spec

/usr/bin/debuild-pbuilder:
    apt-get -y install pbuilder

/usr/bin/rpmbuild:
    yum -y install rpm-build

这是我的spec文件:

Summary: My Package
Name: my-package
Version: 1.0
Release: Public
Group: Applications/System
License: Public
Requires: external-package
Source1: myfile.file

%description
blah blah

%files
%config /etc/myfile.file

%install
mkdir -p $RPM_BUILD_ROOT/etc/
cp %{SOURCE1} %{buildroot}/etc/myfile.file

%post
ln -sf /etc/myfile.file /etc/external-package.conf

1 个答案:

答案 0 :(得分:0)

问题实际上是找不到文件(很明显)。对我而言,这与构建rpm文件的混乱性质有很大关系。执行make命令并调用rpmbuild命令时,我需要能够指定目录。在阅读文档时,声明可以使用rpmbuild -D '_topdir .' -bb path/to/spec.spec将_topdir变量设置为您调用的本地目录。这是有道理的,因为.在linux中代表了这一点。

然而实际的通话需要

rpmbuild -D "_topdir `pwd`" -bb path/to/spec.spec

除了使用双引号至关重要之外,这看起来并没有什么不同。使用此命令将在您调用它的目录中运行构建。在此之后rpmbuild将为您复制和处理文件(这本身就令人困惑)。