将网站构建和部署为 .deb 包的最佳方式

Dan*_*rys 5 debian continuous-integration jenkins

一段时间以来,我一直在努力将(主要是 PHP)网站部署为 .deb 文件,并想知道是否有比我相当复杂的方法更好的方法。我的目标是在我的临时服务器上进行持续集成,并从 Jenkins 内一键部署到实时服务器。

我现在的用例:

  • 在 OSX 上开发代码
  • Git 中的版本控制
  • 源包含带有控制、postinst 和 prerm 脚本的 debian/ 文件夹
  • Phing 构建脚本在 fakeroot 环境中本地运行
    • 将文件复制到镜像文件系统布局的 /tmp 构建文件夹中
    • 根据需要将文件所有权设置为 root / www-data
    • 运行 dpkg-deb --build ${build.dir} ${working.dir}
    • 将包复制到我 LAN 上的私有 deb 存储库

我试图设置一个 Jenkins CI 服务器来观察 Git 存储库的提交并自动执行构建。问题是 Jenkins 以自己的用户身份运行,该用户无权设置上述文件权限。我也看不到在 Jenkins 内部的 fakeroot 环境中运行 Phing 构建的明显方法。

我的问题是:

  • 有没有更好的方法来设置正确的文件所有权和权限,而不必将所有内容复制到临时目录并使用 Phing 步骤来修改所有内容?
    • dpkg-deb 命令真的需要事先在文件系统上设置所有文件权限吗?在安装 .deb 时,我可以在 debian/ 文件夹中放入一些可以设置这些权限的东西吗?
  • 如何让 Jenkins 运行具有设置文件所有权的正确权限的构建脚本?

我可能误解了 .debs 是如何工作的,但是本地文件系统源代码上的文件所有权必须镜像目标似乎相当不方便!

我对人们用来执行类似任务的任何其他构建和 CI 系统的建议持开放态度。

Zor*_*che 2

Debian 软件包是一个由多部分组成的存档,其中包含数据和控制信息/debian。数据档案基本上按原样提取。控制存档被提取并大部分移入/var/lib/dpkg/info,并在适当时调用 pre|post-inst|rm 脚本。如果您想在提取文件后更改某些内容,请在 postinst 中进行。

但本地文件系统源代码上的文件所有权必须镜像目标似乎相当不方便!

一般来说,人们会构建一个 chroot 或虚拟机来镜像他们正在为其构建包的体系结构。尝试从 OSX 为 Debian 系统构建软件包的情况相当罕见。

dpkg-deb 命令是否真的需要预先在文件系统上设置所有文件权限?

这是处理权限的正常方式。安装后修改权限是例外,而不是规则。