为什么 Concourse 在“放置”资源后“获取”资源?

Why does Concourse `get` a resource after `put`ing it?

当我配置以下管道时:

resources:
- name: my-image-src
  type: git
  source:
    uri: https://github.com/concourse/static-golang
- name: my-image
  type: docker-image
  source:
    repository: concourse/static-golang
    username: {{username}}
    password: {{password}}

jobs:
- name: "my-job"
  plan:
  - get: my-image-src
  - put: my-image

构建映像并将其推送到 Docker 注册表后,它随后会获取映像。这可能需要一些时间,并且最终不会真正向构建中添加任何内容。有没有办法禁用它?

每个 put 意味着创建的版本的 get。这有几个原因:

这样做的主要原因是新创建的资源可以在构建计划的后续步骤中使用。没有 get 就无法在构建执行期间引入 "new" 资源,因为它们都被解析为特定版本以在构建开始时获取。

这样做也有一些附带好处。首先,它会立即预热一名工作人员的缓存。所以它至少不是完全没有价值;以后的工作将不必获取它。它还可以验证 put 确实达到了预期的效果。

在这种特殊情况下,由于这是构建计划的最后一步,主要原因并不适用。但是我们没有费心去优化它,因为在大多数情况下,附带的好处使得次要问题不值得出现 ("why do only SOME put steps imply a get?")。

它也 不能 被禁用,因为我们拒绝添加如此多的旋钮,以至于你有一天会想要转动,然后在你真正转动后不得不返回并关闭需要它恢复到默认值。

文档:https://concourse-ci.org/put-step.html