GitOps:使用 ArgoCD 持续部署(Java 开发者版)
2025-08-26 本文已影响0人
_浅墨_
1. GitOps 是什么?
如果你习惯了 Git Flow(分支、合并、提交代码),GitOps
的核心思想其实很像:
- 代码:写 Java 代码放 Git 仓库\
-
配置:把应用的 Kubernetes 部署
YAML(Deployment、Service、Ingress 等)也放 Git 仓库\ - 交付:ArgoCD 自动去 Git 仓库拉取最新配置 → 同步到 Kubernetes → 应用更新完成
👉 简单说:
Git 是唯一的真相来源,K8s 部署完全由 Git 驱动,ArgoCD
帮你做自动化对齐。
2. 为什么 Java 开发者需要 GitOps?
想象一个常见的 Java 微服务场景:
- 你写了一个 Spring Boot 服务
order-service\ - 打包成 Docker 镜像:
my-registry/order-service:1.0.0\ - 部署到 Kubernetes 上
如果没有 GitOps,流程可能是这样的:
- CI 构建镜像(Jenkins / GitHub Actions)\
- 手动改 YAML 里的
image: my-registry/order-service:1.0.0\ kubectl apply -f deployment.yaml
👉 手工步骤多,容易出错。
有了 ArgoCD + GitOps:
- CI 构建镜像,自动修改 Git 仓库里的
deployment.yaml(或 Helm
values.yaml)\ - ArgoCD 发现 Git 仓库更新\
- 自动把变更同步到 K8s 集群\
- Pod 滚动升级,完成部署
👉 所有环境状态与 Git 保持一致,部署可回溯、可审计、可回滚。
3. 使用场景
① 多环境部署(Dev / Test / Prod)
- 在 Git 仓库建三个目录:
environments/dev、environments/test、environments/prod - 每个环境有独立的
deployment.yaml - ArgoCD 配置三个 Application,分别同步到不同 K8s namespace
② 快速回滚
- 如果新版本有 bug,只需
git revert上一次提交 - ArgoCD 自动检测 → 回滚到上一个镜像版本
- 不需要
kubectl rollout undo
③ 团队协作 & 审计
- DBA、运维、后端都通过 Git PR 修改 YAML
- Git 历史记录清晰,谁改了什么一目了然
- 部署完全自动化,不怕有人误操作
4. 示例:Spring Boot 服务的 GitOps 部署
目录结构
gitops-repo/
├── environments/
│ ├── dev/
│ │ └── order-service.yaml
│ ├── prod/
│ │ └── order-service.yaml
└── apps/
└── order-service.yaml # 定义 ArgoCD Application
order-service.yaml(K8s Deployment 示例)
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
namespace: dev
spec:
replicas: 2
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: my-registry/order-service:1.0.0
ports:
- containerPort: 8080
ArgoCD Application 定义
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: order-service-dev
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/my-org/gitops-repo.git
targetRevision: main
path: environments/dev
destination:
server: https://kubernetes.default.svc
namespace: dev
syncPolicy:
automated:
prune: true # 删除 Git 里没有的资源
selfHeal: true # 偏差自动纠正
5. 工作流程回顾
- 你更新 Java 代码 → CI 构建镜像
1.0.1→ 推到镜像仓库\ - CI 脚本自动改
environments/dev/order-service.yaml里的
image: ...:1.0.1→ 提交到 Git\ - ArgoCD 检测到 Git 仓库变化 → 自动同步到 K8s → 新 Pod 滚动启动\
- 如果出问题 →
git revert→ ArgoCD 回滚
6. 总结(Java 开发者视角)
- GitOps = Git + K8s 部署声明 + ArgoCD\
- 你不再需要关心
kubectl apply,只要合 PR 就能部署\ - 适合 微服务多环境、团队协作、快速回滚 的场景\
- Java 开发者只要记住:"写代码 → 合并 Git → 自动上线"