Linux Jenkins上的RPM构建在比工作站上的模拟版本更新的模拟版本上失败

Linux Jenkins上的RPM构建在比工作站上的模拟版本更新的模拟版本上失败,linux,centos,rpm,rpmbuild,rpm-spec,Linux,Centos,Rpm,Rpmbuild,Rpm Spec,我正试图从Jenkins那里构建并部署一个RPM包,该包基于另一个项目中的一些规范文件样板文件,该项目比我之前编写的项目更早。由于某些原因,当我试图从Jenkins内部构建或发布此包时,我会遇到构建错误 + rm -rf /builddir/build/BUILDROOT/component-prefix-blah-api-proxy-0.1.0.16-1.bbc.el7.x86_64 BUILDSTDERR: ++ dirname /builddir/build/BUILDROOT/compo

我正试图从Jenkins那里构建并部署一个RPM包,该包基于另一个项目中的一些规范文件样板文件,该项目比我之前编写的项目更早。由于某些原因,当我试图从Jenkins内部构建或发布此包时,我会遇到构建错误

+ rm -rf /builddir/build/BUILDROOT/component-prefix-blah-api-proxy-0.1.0.16-1.bbc.el7.x86_64
BUILDSTDERR: ++ dirname /builddir/build/BUILDROOT/component-prefix-blah-api-proxy-0.1.0.16-1.bbc.el7.x86_64
RPM build errors:
BUILDSTDERR: error: File not found by glob: /builddir/build/BUILDROOT/component-prefix-blah-api-proxy-0.1.0.16-1.bbc.el7.x86_64/var/www/cgi-bin/*
BUILDSTDERR:     File not found by glob: /builddir/build/BUILDROOT/component-prefix-blah-api-proxy-0.1.0.16-1.bbc.el7.x86_64/var/www/cgi-bin/*
Child return code was: 1
EXCEPTION: [Error()]
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/mockbuild/trace_decorator.py", line 96, in trace
    result = func(*args, **kw)
  File "/usr/lib/python2.7/site-packages/mockbuild/util.py", line 734, in do_with_status
    raise exception.Error("Command failed: \n # %s\n%s" % (command, output), child.returncode)
Error: Command failed: 
 # /usr/bin/systemd-nspawn -q -M b88888b933974fe283e8497d165b5369 -D /var/lib/mock/epel-7-x86_64-9876/root --capability=cap_ipc_lock --bind=/tmp/mock-resolv.kXeD1i:/etc/resolv.conf --setenv=LANG=en_GB.UTF-8 --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOSTNAME=mock --setenv=PROMPT_COMMAND=printf "\033]0;<mock-chroot>\007" --setenv=HOME=/builddir --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin --setenv=PS1=<mock-chroot> \s-\v\$  -u mockbuild bash --login -c /usr/bin/rpmbuild -bb --target x86_64 --nodeps /builddir/build/SPECS/blah-api-proxy.spec
我已经尝试在mock的执行上设置--old chroot标志。然而,我开始出现两个错误-

错误:异常(/var/lib/jenkins/workspace/component prefix blah api proxy/blah api proxy/SRPMS/component-prefix-blah-api-proxy-0.1.0.15-1.bbc.el7.src.rpm)配置(epel-7-x8664)0分11秒

注意:
blahapiproxy
是一个包含Apache代理服务器配置的目录

src文件夹结构如下所示:

src/
├── etc
│   └── bake-scripts
│       ├── blah-api-proxy
│       └── public-endpoints
└── var
    └── www
        └── cgi-bin
如果我能在解决这个问题上得到帮助,我将非常感激。 非常感谢您。

错误状态(在处理%files部分期间)
%{buildroot}/var/www/cgi-bin/
不存在

所以你认为你复制了一些东西,但现实是不同的


%install
部分的末尾添加:
查找%{buildroot}/
并再次运行构建,您将看到
cp
实际放在那里的内容。

我非常感谢@msuchy在这个问题上的帮助。他的建议帮助我迅速找到了根本原因

问题在于,
.gitignore
文件将
%files
部分中指定的一个目录
/var/
从git repo中排除。从
.gitignore
文件中删除目录解决了此问题


我们需要做的另一件事是在我们的发布系统(而不是Jenkins)中指定我们的规范文件所依赖的rpm存储库。

您需要发布实际的失败,而不是说明失败的摘要。对,这只是说明哪个命令失败的模拟。该命令的错误在该命令上方几行。如果没有这些,我们将无法帮助您。您好@AaronD.Marasco,很抱歉我没有发布此消息。我是RPM构建的新手,只是查看了Jenkins日志,才发现主要的RPM错误被记录到build.log文件中。我已经用它更新了上面的帖子。你好@msuchy,很抱歉我没有发布这个帖子。我是RPM构建的新手,只是查看了Jenkins日志,才发现主要的RPM错误被记录到build.log文件中。我已经用它更新了上面的帖子。@AaronD.Marasco,从上面的错误来看,它似乎找不到由通配符或glob指定的/var/www/cgi-bin/*目录下的文件。有没有更好的方法来指定通配符?将*替换为。这里有工作吗?谢谢@msuchy。我这样做了,看到所有文件都被复制到%{buildroot}/目录。那么为什么失败了呢?请注意,这次我没有设置
--old chroot标志。我共享了build.log摘要,因为构建运行时没有设置该标志。在仔细检查并使用了在%files部分下文件较少的较旧提交后,我注意到/var/文件夹没有被推送到我们的git上游分支。这导致发现有人在.gitignore文件中为该文件夹添加了一个条目。我现在已经在Jenkins中成功构建了一个完整的部署。
 # bash --login -c /usr/bin/rpmbuild -bb --target x86_64 --nodeps /builddir/build/SPECS/blah-api-proxy.spec
Version: 0.1.0%{?BUILD_NUMBER:.%{BUILD_NUMBER}}
Release: 1%{?dist}
Group: System Environment/Daemons
License: Internal COY use only
Summary: BLAH API Proxy
Source0: src.tar.gz
Requires: blah-blah-ssl-services-blah-staff jq
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildArch: x86_64

%description
BLAH API Proxy

%prep
%setup -q -n src

%build

%install
mkdir -p %{buildroot}
cp -r * %{buildroot}/

%clean
rm -rf %{buildroot}

%pre

%files
%defattr(0755, root, root, 0755)
/var/www/cgi-bin/*

%defattr(-, root, root, 0755)
/etc/bake-scripts/*

%defattr(0755, root, root, 0755)
/etc/bake-scripts/blah-api-proxy
src/
├── etc
│   └── bake-scripts
│       ├── blah-api-proxy
│       └── public-endpoints
└── var
    └── www
        └── cgi-bin