cf push 和 cf restage 的区别

Difference between cf push and cf restage

我有一个使用 cf push 推送到 cf 的应用程序。现在我已经更改了其中一个环境变量,然后使用 cf restage 重新暂存应用程序。我的理解是,当我们进行 restage 时,它​​将再次编译 droplet 并构建它,同样可以为应用程序再次使用 cf push 来完成。所以我想知道的是这两个命令之间的区别以及 cf 内部如何处理它?

区别是一种上传文件,一种不上传文件。

当您 运行 cf push 时,cli 将从您的本地文件系统中取出数据,上传它们,暂存您的应用程序,如果成功,运行 您的应用程序。如果您对应用程序中的文件进行了更改并希望部署它们,这就是您想要的。

当您 cf restage 时,cli 不会上传任何内容。它只会重新加载您的应用程序,如果成功,运行 应用程序。如果没有应用程序更改或您没有应用程序源代码,这就是您想要的,但您想要再次强制构建包 运行 并使用新的 Droplet 重新启动您的应用程序。

当您 cf restart 时,cli 不会上传或重新启动,它只会停止并启动应用程序。这是最快的选项,但仅在您只需要获取环境更改(如更改的服务、内存限制或环境变量)时才有效。这也很好,如果你只是想尝试将你的应用程序放在不同的 Diego Cell 上。

如果您只是更改环境变量,您可能可以使用 cf restart,除非这些环境变量正被您的构建包之一使用,例如 JBP_CONFIG_*.

希望对您有所帮助!

关于

So what I want to know is the difference between the 2 commands

cf push 内部执行以下序列

  • 上传:从您的应用
  • 创建
  • 暂存:使用包
  • 创建容器映像
  • starting :根据 container image
  • 将容器作为一个长 运行 进程启动

我们需要restage

的一些用例
  • 引入 buildpack 更改:CF 操作员出于各种原因更新 buildpack(一个示例:安全补丁)有效地更新了我们的应用程序使用的运行时依赖项。

  • 引入新的软件组件:我们可能需要引入在最初push。一个例子可以是:为您的应用程序引入监控代理

  • 更改根文件系统时。

在上述所有 3 个场景中,我们的应用程序代码都没有更改,但我们需要 re-create 容器映像。在这些情况下,我们需要 restage。如果我们与 cf push 比较,在 restage 的情况下我们跳过 package 创建步骤。