我在 Ubuntu QA 站点上找到了 OpenStack 构建任务,但是我对构建步骤有点困惑。
从 jenkins 构建日志中,我知道了 Ubuntu 构建 Openstack 包的步骤:
- 从 github 获取 openstack 代码,使用
git clone
- 使用构建
openstack tar.gz
文件python setup.py sdist
- 用于
bzr
获取由 canonical 维护的 debian 控制文件 - 使用
dch
命令生成新的构建版本并将其提交到本地 - 用于
bzr builddeb -S -- -sa -us -uc
生成源码包及相关控制文件,如:dsc
- 签署包裹
- 使用
mk-build-deps
安装依赖项 - 用于
sbuild
生成真正的 deb 包 - 上传到测试仓库
我的问题是:
- 在第5步中,我们已经可以在没有 的情况下生成 deb 包了
-S
,但为什么最后还要使用sbuild
来生成呢? 这只是为了签名吗? bzr builddeb
和有什么区别sbuild
?我发现 jenkins 使用的构建脚本位于此处:
~openstack-ubuntu-testing/openstack-ubuntu-testing
,但是当我尝试运行下的任何命令时bin
,我总是得到:root@demo:~/openstack-ubuntu-testing/bin# ./build-package Traceback (most recent call last): File "./build-package", line 14, in <module> from openstack_ubuntu_testing.build.component_build import ComponentBuild File "/home/sysadmin/openstack-ubuntu-testing/bin/openstack_ubuntu_testing/build/component_build.py", line 11, in <module> from schroot.executor import SchrootExecutor ImportError: No module named schroot.executor
我尝试使用 pip 来安装 schroot,但似乎其中没有执行器。
请帮忙。
答案1
sbuild
使用 在隔离环境中构建包schroot
。在此环境中,仅安装源包声明的构建依赖项,而不会安装其他任何内容。这有助于确保构建不受其运行的开发人员或 CI 环境的影响。例如,如果没有 sbuild,CI 环境中的包的存在可能会使构建看起来成功,而实际上它是未声明的构建依赖项,因此在其他地方都会失败。出于可重复性和稳定性的原因,最好使用 sbuild。