使用 PHP buildpack 构建的 Cloud Foundry 应用程序 - 自定义扩展在部署后消失

Cloud Foundry app built with PHP buildpack - custom extention disappears after deploy

我开发了一个 CIO Blumix Cloud Foundry PHP 应用程序,它需要一些额外的组件。

我使用 https://github.com/cloudfoundry/php-buildpack 进行构建。我在它的文档中读到我可以添加自己的扩展。我这样做并添加了 tar.tgz 并在 extention.py 中添加了说明如何安装它。

目标位置是:/home/vcap/。 我看到安装 运行 没问题,我在部署阶段看到了文件夹(在 DevOps Pipelines 部署阶段日志和历史记录中)。

但是当部署通过并且我使用已部署的 php 页面读取文件夹时,我发现它不存在。我在部署日志中阅读了 "container destroyed successfully" 消息。也许整个安装环境都被破坏了?部署文件结构中哪里是我可以安装组件的安全位置,以便它们在部署通过后保留?

我正在使用 def compile(install): 来放置我的 unix 命令。示例:os.system('ls') 列出安装文件夹内容。它们工作正常。

提前致谢!

您的应用使用了两种完全不同的环境:暂存和 运行时间。暂存是 buildpack 运行s & 运行time 是暂存产品(即你的应用程序)是 运行.

的地方

不幸的是,暂存路径和 运行时间路径不同。在 runtime 处,您的应用位于 /app/home/vcap/app 下(前者是后者的符号链接)。分期是不同的。有一个 /home/vcap 目录,但它没有用于任何用途。

相反,buildpack 脚本是通过 cli 参数提供的路径。这都记录在案 here.

作为 PHP buildpack extension,您可以通过查看 buildpack 维护的上下文来访问 cli args 和许多其他内容。这会直接传递到 buildpack 扩展方法中,例如 service_environment & service_commandscompile buildpack 扩展方法略有不同,因为传入的参数不是内容,但该参数确实有对上下文的引用(它是 install.builder._ctx)。

话虽如此,我现在不建议使用 PHP buildpack 扩展。 buildpack 正在被重写并且该功能正在被删除。它不会直接替换,但最接近的是 Composer's ability to execute scripts。我的建议是看看您是否可以使用 Composer 功能。它将更便携,因为它不依赖于 buildpack 的特定行为。