Go微服务不应集成Argo CD,其职责是运行HTTP服务;Argo CD仅从Git拉取YAML同步集群。spec.source.path须指向已提交的manifests子目录(如manifests/prod),含合法YAML文件;Go构建、镜像打包由CI完成,Argo CD只处理声明式部署。
Go 微服务本身不集成 Argo CD,也不该集成——它只负责跑好自己的 HTTP 服务;Argo CD 负责从 Git 拉取 YAML 并同步到集群。强行在 Go 代码里调用 argocd CLI 或 SDK,是方向性错误。
spec.source.path 必须指向 manifests 目录,不是 Go 源码根目录很多人把 Go 项目整个推到 Git 仓库,然后让 Argo CD 的 Application 指向 . 或 cmd/,结果一直报 Unable to get app details: failed to load manifests。
spec.source.path 必须是一个已 git push 的子目录,且里面至少有一个合法的 *.yaml(如 manifests/prod/deployment.yaml)kustomization.yaml 的目录,并开启 spec.source.kustomize.enabled: true
file:// 或 http://localhost 当 repoURL,生产环境必须切回真实 Git 地址(如 https://git.example.com/myapp.git)image: 字段,得靠 argocd-image-updater 或 CI 脚本自动提交CI 构建完 myapp:v1.2.3 后,如果只是打 tag,Argo CD 不会感知——它只拉 Git,不查 Registry。
sed -i 或 envsubst 更新 manifests/prod/kustomization.yaml 中的 images: 列表,然后 git commit -m "chore(release): update myapp to v1.2.3" 并 git push
argocd-image-updater,它轮询镜像仓库,匹配 kustomization.yaml 里的 name: myapp,自动 patch 并提交 PR(需配置 GitHub/GitLab webhook 或定时 job)image: myapp:latest —— latest 标签不可追溯,且 argocd-image-updater 默认忽略它spec.source.helm.valueFiles 显式指定 values-prod.yaml,否则 updater 找不到 image.tag 字段Progressing 状态Argo CD 判断 Deployment 是否就绪,依赖 Kubernetes 的 healthStatus,而后者由 readinessProbe 决定。Go 服务启动慢 + probe 设置激进 = 反复重启 + 同步超时。
立即学习“go语言免费学习笔记(深入)”;
initialDelaySeconds: 10 是底线,别设成 1;periodSeconds: 5 足够,高频 probe 会压垮轻量 Go 服务http.HandleFunc("/ready", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }),别走中间件链或 DB 连接池检查startupProbe(Argo CD v2.8 前支持不稳定),用 readinessProbe + initialDelaySeconds 组合更可靠livenessProbe,确保失败时进程退出(os.Exit(1)),否则 Argo CD 会持续看到 CrashLoopBackOff 却无法推进同步真正容易被忽略的点:Argo CD 的同步节奏和 Go 服务的启动节奏是异步的。它不等你服务 ready 就开始发 Deployment,而 readinessProbe 又是你唯一能控制“何时算部署成功”的开关——这个边界没对齐,所有自动化的前提就塌了。