我一直在试验一种本地的小型机器人装置。能够在尽可能接近生产的地方开发您的项目是一件很好的事情。
如果我使用在skaffold上提供的入门示例,一切都很好,我的IDE (intellij )停止在断点上,当我修改我的代码时,更改会立即反映出来。
现在,在我的个人项目上,它比一个简单的main.go文件要复杂一些,事情并不像预期的那样工作。IDE在断点上停止,但是热代码重新加载并没有发生,尽管我在控制台中看到skaffold检测到了对特定文件所做的更改,但不幸的是,这些更改没有得到反映/应用。
停靠文件用于生成图像,停靠文件如下所示
FROM golang:1.14 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app.o ./cmd/shortener/shortener.go
FROM alpine:3.12
COPY --from=builder /app.o ./
COPY --from=builder /app ./
EXPOSE 3000
ENV GOTRACEBACK=all
CMD ["./app.o"]在kubernetes方面,我创建了一个部署和一个服务,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: url-shortener-deployment
spec:
selector:
matchLabels:
app: url-shortener
template:
metadata:
labels:
app: url-shortener
spec:
containers:
- name: url-shortener
image: url_shortener
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: url-shortener-service
spec:
selector:
app: url-shortener
ports:
- port: 3000
nodePort: 30000
type: NodePort至于skaffold,下面是skaffold.yaml文件:
apiVersion: skaffold/v2beta5
kind: Config
metadata:
name: url-shortener
build:
artifacts:
- image: url_shortener
context: shortener
docker:
dockerfile: build/docker/Dockerfile.dev
noCache: false
deploy:
kubectl:
manifests:
- stack/mongo/mongo.yaml
- shortener/deployments/kubernetes/shortener.yaml我已经启用了详细的日志记录,每当我保存(CTRL+S)源代码文件时,我就会在输出中注意到这一点。
time="2020-07-05T22:51:08+02:00" level=debug msg="Found dependencies for dockerfile: [{go.mod /app true} {go.sum /app true} {. /app true}]"
time="2020-07-05T22:51:08+02:00" level=info msg="files modified: [shortener/internal/handler/rest/rest.go]"我假设这意味着已经检测到了变化。
断点在IDE中正常工作,但kubernetes中的代码交换似乎没有发生
发布于 2020-07-08 02:33:16
调试功能故意禁用Skaffold的文件监视功能,后者在文件更改时重新构建和重新部署容器。重新部署会导致现有容器终止,从而删除任何正在进行的调试会话。让您精心构建的调试会话被拆除确实令人困惑和恼怒,因为您意外地保存了对评论的更改!
但是,我们正在研究如何更好地支持云代码中更多的迭代调试。
如果您直接使用Skaffold,我们最近添加了通过skaffold debug --auto-build --auto-deploy重新启用文件监视的功能(出现在v1.12中)。
https://stackoverflow.com/questions/62746288
复制相似问题