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

Cloud foundry 使用PHP buildpack构建的Cloud Foundry应用程序-自定义扩展在部署后消失,cloud-foundry,buildpack,delivery-pipeline,diego,Cloud Foundry,Buildpack,Delivery Pipeline,Diego,我开发了一个CIO Blumix Cloud Foundry PHP应用程序,它需要一些额外的组件 我用它来建造。我在它的文档中读到,我可以添加自己的扩展。我这样做了,添加了一个tar.tgz,并在extention.py中添加了如何安装它的说明 目标位置为:/home/vcap/。 我看到安装运行正常,并且在部署阶段(在DevOps Pipelines部署阶段日志和历史记录中)看到文件夹 但是当部署通过,我用部署的php页面读取文件夹时,我发现它不在那里。我在部署日志中读到“容器已成功销毁”消

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

我用它来建造。我在它的文档中读到,我可以添加自己的扩展。我这样做了,添加了一个tar.tgz,并在extention.py中添加了如何安装它的说明

目标位置为:/home/vcap/。 我看到安装运行正常,并且在部署阶段(在DevOps Pipelines部署阶段日志和历史记录中)看到文件夹

但是当部署通过,我用部署的php页面读取文件夹时,我发现它不在那里。我在部署日志中读到“容器已成功销毁”消息。也许整个安装环境都被破坏了?在部署文件结构中,哪里是一个安全的位置,我可以在那里安装组件,以便在部署通过后它们仍然存在

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


提前谢谢

您的应用程序使用两种完全不同的环境:登台和运行时。暂存是buildpack运行的地方&运行时是暂存产品(即您的应用程序)运行的地方

不幸的是,登台和运行时的路径不同。在您的应用程序中,应用程序位于
/app
/home/vcap/app
下(前者是后者的符号链接)。舞台是不同的。有一个
/home/vcap
目录,但它不用于任何用途

相反,buildpack脚本是通过cli参数提供的路径。这些都有记录

作为示例,您可以通过查看buildpack维护的上下文来访问cli参数和许多其他内容。这将直接传递到buildpack扩展方法中,如
service\u环境
service\u命令
compile
buildpack扩展方法略有不同,因为传入的参数不是内容,但该参数确实引用了上下文(它是
install.builder.\u ctx


话虽如此,我现在不建议使用PHP构建包扩展。构建包正在被重写,该功能正在被删除。它不会有直接的替代品,但最接近的是。我的建议是看看您是否可以使用Composer功能。它将更具可移植性,因为它不依赖于buildpack特定的行为。

thx供您参考。这很有帮助。你能不能也给我指示一下输送管道的方向。。在那里我可以增加额外的工作。。构建阶段的示例。刚刚添加了一个(在我阅读您的回复之前)。。在那里,我还可以打开一个压缩包并运行安装。。。我看到安装程序将应用程序安装到了/pipeline/。。使用我的跑步web应用程序。。我仍然没有看到安装好的。一定是被删除了。也许你也可以给我建议如何写那份工作?或者如何设置其参数-我可以设置的示例输出目录..我按照建议停止使用构建包的自定义扩展,并在pipelines build stage added作业中运行相同的脚本。但在发布后仍然看不到此安装。抱歉,我不理解您的后续问题。如果脚本在登台之外运行,如在CI/CD系统上,则需要推送所有内容。如果您的脚本在登台期间通过Composer运行,则您希望包含在droplet中的任何内容都需要进入deps目录,请参阅此处的
supply
脚本注释。如果你把它放在deps文件夹中,它将包含在droplet中,并在运行时可用于你的应用程序。我正在使用添加到Cloud Foundry PHP应用程序中的IBM CIO交付管道。因为我想要一个没有在Bluemix Chatalog中列出的服务,所以我必须自己安装它。服务在产品到达tar.gz时销售。我可以上传这个tar.gz并解包。我还可以使用构建阶段的脚本窗口和部署阶段运行安装。我知道这是一种尝试失败的方法,但我是一个初学者。如果我知道可以使用什么工具安装此产品,使其保留在系统上。。这会很有帮助。(我找到了一个仍然存在的副本路径..但它不起作用)我不建议尝试在与应用程序相同的容器中运行服务。分别运行应用程序和服务。如果在Cloud Foundry上运行应用程序有意义,您可以将其作为自己的应用程序单独推送。如果它是一个预编译的应用程序,那么使用二进制buildpack(buildpack什么都不做,它非常适合运行预编译的二进制文件)就可以很容易地完成。如果在CF上运行没有意义,可能它存储持久数据,然后在其他位置的VM中运行,并将连接信息传递到您的应用程序中(可能使用用户提供的服务)。