【发布时间】:2021-09-18 05:01:21
【问题描述】:
我正在尝试使用 skaffold 和 helm 进行内部项目。在我问我的实际问题之前,这里是skaffold.yaml:
apiVersion: skaffold/v2beta17
kind: Config
build:
tagPolicy:
gitCommit: {}
artifacts:
- image: my-image
custom:
buildCommand: ./build.sh
local:
useDockerCLI: false
useBuildkit: false
push: false
deploy:
helm:
releases:
- name: config-map-it
chartPath: src/main/helm
artifactOverrides:
# skaffold will override this with a different tag
image: my-image
valuesFiles:
- src/main/helm/values.yaml
wait: true
setValues:
namespace: my-namespace
您可能会注意到,我有一种自定义方式来构建图像。它实际上是多个步骤,但最终它会执行以下操作:
#!/usr/bin/env bash
# build jar only, no tests, no chart
gradle clean build -x test -x helmChartBuild --quiet
# ... more steps here
docker build --build-arg JAR_FILE='build/libs/*.jar' -t ${IMAGE} .
# load docker image into kind
kind load docker-image ${IMAGE} --name my-namespace
具体来说,请注意${IMAGE}。我需要这个,因为我要调用:
skaffold build
skaffold deploy
(是的,这就是我出于其他不相关原因需要它的方式)
所以,我首先调用skaffold build。我得到的图像如下:
myimage/a3eadcc-dirty
下一步:skaffold deploy 将失败:
no tag provided for image [my-image]
我明白了原因,现在我稍微更改了命令:
skaffold build --file-output=tag.json
kind load docker-image ${IMAGE} --name my-namespace
skaffold deploy -a tag.json
很遗憾,这也行不通。
问题是${IMAGE}会变成myimage/a3eadcc-dirty,而tag.json会包含图片的sha作为标签,所以deploy会失败,因为这样的图片不能找到了。
公平地说,我的解决方案并不复杂。只需解析${IMAGE},找出标签:
export MY_TAG=...
并将其与skaffold deploy --image...一起使用...
问题是,是这样吗?
【问题讨论】:
-
我对这里发生的事情感到很困惑。您能解释一下为什么要明确地将图像加载到实物中吗?并且回复:“
deploy将失败,因为找不到这样的图像”——为什么找不到图像? -
@BriandeAlwis 我应该为你感到困惑的事实负责。 1)“您能解释一下为什么要明确地将图像加载到实物中吗?” - 我计划在构建图像之前静态验证 k8s 清单。所以我这样做:“验证、构建、加载到实物”。当我想到它时,这对我来说是有道理的……我可能错了。 2)“部署将失败,因为找不到这样的图像” - 最终加载到 kind 的图像是
123-dirty,清单试图加载的图像是带有sha作为标签的图像.