首页 > 解决方案 > 仅在第一次使用 Skaffold 构建后才忽略对映像中文件的更新?

问题描述

我有一个包含 Angular 项目的部署。为了测试我的 Angular 项目,我使用ng serve了可以连接到它自己的快速更新服务器的主机。为了开发,我经常保存和编辑这些文件。因为这个镜像是在我的 Skaffold 部署中使用的,这意味着 Skaffold 会不断地重建和编译我的 Angular 项目。

在我没有积极更新 Angular 方面的时候,我希望它只构建最新的文件,然后在我skaffold dev再次运行之前不再检查它们的更新。

目前,Angular 图像的 skaffold.yaml 看起来像这样:

    - image: angular
      context: ../Images/angular
      custom:
        dependencies:
          ignore: ['../Images/angular']

这成功地运行了一次角度图像,然后不再检查它的更新,但如果我对其进行更改,停止 Skaffold,然后skaffold dev再次运行,它不会重建图像。

我理解它为什么这样做,这是有道理的,也是意料之中的。但我想知道是否有更好的方法来处理在开发过程中快速变化的图像的图像构建,例如 Vue/Angular/React。或者,也许有一种更好的方法可以将文件定义为在更改期间 skaffold dev被忽略,而不是在运行之间进行所有更改。

我想停止不断构建它以节省笔记本电脑电池的主要原因。

标签: skaffold

解决方案


Skaffold 支持其他触发模式,包括手动触发模式:

skaffold dev --trigger=manual

然后 Skaffold 将等待您点击enter以启动下一次开发重建。

另一种方法是使用Skaffold Control API来切换自动构建。例如,您可以使用 REST API 关闭自动构建:

curl -X PUT -d '{"enabled":false}' localhost:50052/v1/build/auto_execute

然后,您可以根据需要重新启用它。如果您希望构建但不部署图像(例如,查看构建时错误),您可以使用控制 API 切换自动部署,并且您也可以手动触发构建/部署/同步。


您可以通过运行找到控制端口skaffold dev -v info;gRPC 端口通常为 50051,REST 端口通常为 50052:

$ skaffold dev -v info
INFO[0000] starting gRPC server on port 50051
INFO[0000] starting gRPC HTTP server on port 50052
INFO[0000] Skaffold &{Version:v1.23.0 ConfigVersion:skaffold/v2beta15 GitVersion: GitCommit:e8f3c652112c338e75e03497bc8ab09b9081142d BuildDate:2021-04-28T00:55:12Z GoVersion:go1.14.14 Compiler:gc Platform:darwin/amd64} 
...

或者您可以显式配置端口:

skaffold dev --rpc-http-port=50099

对于旧版本的 Skaffold,您可能需要使用--enable-rpc.


推荐阅读