linux - Jenkins 上的 RPM 构建在更新的模拟版本上失败,而不是在成功的工作站上进行模拟

标签 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/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

在 RPM build.log 文件中,还有一个比上述错误更早出现的错误,我认为这不是主要错误,因为我之前在其他运行良好的构建中也看到过这种情况发生

BUILDSTDERR: Failed to create directory /var/lib/mock/epel-7-x86_64-9876/root//sys/fs/selinux: Read-only file system

我尝试在执行模拟时设置 --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-x86_64)0分11秒

 # 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

注意:blah-api-proxy 是包含 Apache 代理服务器配置的目录。

src文件夹结构如下:

src/
├── etc
│   └── bake-scripts
│       ├── blah-api-proxy
│       └── public-endpoints
└── var
    └── www
        └── cgi-bin

如果我能得到解决此问题的帮助,我将不胜感激。 预先非常感谢您。

最佳答案

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

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

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

关于linux - Jenkins 上的 RPM 构建在更新的模拟版本上失败,而不是在成功的工作站上进行模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096424/

相关文章:

linux - rlwrap: 无法打开 master pty: 没有那个文件或目录

bash - centos+nodejs+永远(启停)

linux - RPM - 安装时间参数

centos - 如何完全删除已安装的 CentOS RPM 文件?

linux - pthread_wrlock_xxlock 不是自旋锁吗?

linux - 如何启用内核菜单配置 - HAVE_SYSCALL_TRACEPOINTS?

linux - 我能否以编程方式选择我的线程应该在多核 CPU 的哪个内核上运行?

linux - 如何为 GIT 存储库创建受限 SSH 帐户?

centos - 两个用户之间的预订

node.js - 如何将 node-js 应用程序打包成单个 rpm?