CI/CD 流水线实战:GitLab CI 与 ArgoCD 自动化部署方案
网站运维(DevOps)的核心是把代码到生产的路径标准化。GitLab CI 负责构建与测试,ArgoCD 负责 Kubernetes 集群内的声明式部署,两者组合实现从代码提交到应用更新的全自动发布链路。本文给出一条完整可用的 CI/CD 流水线配置:提交代码后自动触发测试与镜像构建,镜像推送至私有仓库,ArgoCD 检测到镜像更新后自动同步部署到测试环境,人工确认后再推广到生产。
# .gitlab-ci.yml
stages:
- test
- build
- deploy
test:
stage: test
image: python:3.11-slim
script:
- pip install -r requirements.txt
- pytest --junitxml=report.xml
artifacts:
reports:
junit: report.xml
build:
stage: build
image: docker:24
services:
- docker:24-dind
script:
- docker build -t registry.example.com/app:${CI_COMMIT_SHORT_SHA} .
- docker push registry.example.com/app:${CI_COMMIT_SHORT_SHA}
only:
- main
deploy:
stage: deploy
image: argoproj/argocd:v2.10
script:
- argocd app set my-app --image registry.example.com/app:${CI_COMMIT_SHORT_SHA}
- argocd app sync my-app --async
environment:
name: staging
only:
- main
CI 流水线阶段划分与缓存优化
流水线阶段要保证失败时尽早反馈。test 阶段跑单元测试与静态检查,build 阶段做镜像构建与安全扫描,deploy 阶段负责部署。依赖缓存用 cache 关键字声明路径,Python 项目缓存 site-packages,Node 项目缓存 node_modules,可显著缩短流水线时长。构建镜像优先使用多阶段构建:builder 阶段安装编译依赖,runner 阶段只复制产物,最终镜像体积可减少 70% 以上。
ArgoCD 声明式部署与镜像更新策略
ArgoCD 采用 GitOps 模式,应用期望状态保存在 Git 仓库,集群以 Git 为唯一事实来源。用 Application 资源声明目标集群、仓库路径与同步策略。自动同步模式配合 selfHeal 可实现配置漂移自动纠正;发布节奏较慢的场景使用 manual 同步,把镜像版本号写入 Git,用 PR 审查控制发布。生产环境禁止手工 kubectl apply 修改配置,防止集群状态与 Git 仓库不一致。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api
namespace: argocd
spec:
project: default
source:
repoURL: https://git.example.com/k8s-manifests.git
path: apps/api
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: prod
syncPolicy:
automated:
prune: true
selfHeal: true
CI/CD 流水线失败排查与发布回滚
流水线失败优先看测试阶段输出,构建失败重点检查 Dockerfile 上下文与依赖源是否可访问。ArgoCD 部署失败通过 argocd app get 与 kubectl describe pod 定位,Pod 处于 CrashLoopBackOff 时先看 kubectl logs --previous。发布异常回滚有两种方式:argocd app rollback api 版本号 回退到历史部署版本,或直接在 Git 仓库 revert 提交,ArgoCD 自动同步。回滚后保留现场信息用于复盘,避免重复踩坑。
网站运维常用检查项与流水线监控
流水线本身也要纳入监控。GitLab Runner 使用率与排队时长影响交付效率,CI/CD 失败率与平均恢复时间应作为核心指标。配置钉钉或飞书机器人 webhook,在发布成功与失败时推送通知;ArgoCD 通过 application 状态与同步状态暴露 Prometheus 指标,接入 Grafana 大盘后可观察集群内每个应用的漂移情况。自动化部署能力建设是一个持续投入过程,先把发布失败率降到最低,再逐步放开自动发布范围。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/devops-shi-jian-gitlabci-yu-argocd-zi-dong-hua-bu-shu-liu/