生产级 DevOps 自动化交付模板(基于 Kubernetes 与 GitOps)

📦 一、项目目录结构(标准企业布局)

复制代码

devops-demo/
├── app/ # 应用代码(示例)
│ ├── Dockerfile
│ └── index.html

├── jenkins/
│ └── Jenkinsfile

├── k8s/
│ ├── base/
│ │ ├── deployment.yaml
│ │ ├── service.yaml
│ │ └── ingress.yaml
│ │
│ └── rollout/
│ └── rollout.yaml # 金丝雀发布

├── argocd/
│ └── application.yaml

└── README.md


🐳 二、应用 + Dockerfile

app/index.html

<h1>Hello DevOps 🚀</h1>

app/Dockerfile

FROM nginx:1.25-alpine

COPY index.html /usr/share/nginx/html/index.html

EXPOSE 80


🔧 三、Jenkinsfile(CI核心)

📍作用:构建 + 推送镜像 + 更新 Git(触发 CD)

pipeline {
agent any

environment {
REGISTRY = "192.168.100.30:5000/devops-demo"
IMAGE = "web"
TAG = "${BUILD_NUMBER}"
GIT_CREDENTIALS = "gitlab-creds"
}

stages {

stage('Checkout') {
steps {
git branch: 'master',
credentialsId: "${GIT_CREDENTIALS}",
url: 'http://192.168.100.100/devops/devops-demo.git'
}
}

stage('Build Image') {
steps {
sh """
docker build -t $REGISTRY/$IMAGE:$TAG ./app
"""
}
}

stage('Push Image') {
steps {
sh """
docker push $REGISTRY/$IMAGE:$TAG
"""
}
}

stage('Update K8s YAML') {
steps {
sh """
sed -i 's#image:.*#image: $REGISTRY/$IMAGE:$TAG#g' k8s/rollout/rollout.yaml
git config user.name "jenkins"
git config user.email "jenkins@local"
git commit -am "update image to $TAG"
git push origin master
"""
}
}
}
}


☸️ 四、Kubernetes 部署 YAML

1️⃣ Service

apiVersion: v1
kind:Service
metadata:
name:devops-demo
spec:
selector:
app:devops-demo
ports:
-port:80
targetPort:80
type:ClusterIP


2️⃣ Ingress(外部访问)

apiVersion: networking.k8s.io/v1
kind:Ingress
metadata:
name:devops-demo
spec:
rules:
-host:devops.local
http:
paths:
-path:/
pathType:Prefix
backend:
service:
name:devops-demo
port:
number:80

👉 记得本地 /etc/hosts

192.168.100.xxx devops.local


🚀 五、金丝雀发布(重点🔥)

k8s/rollout/rollout.yaml

apiVersion: argoproj.io/v1alpha1
kind:Rollout
metadata:
name:devops-demo
spec:
replicas:3

selector:
matchLabels:
app:devops-demo

template:
metadata:
labels:
app:devops-demo
spec:
containers:
-name:app
image:192.168.100.30:5000/devops-demo/web:1
ports:
-containerPort:80

strategy:
canary:
steps:
-setWeight:20
-pause: {duration:30}
-setWeight:50
-pause: {duration:60}
-setWeight:100


🔁 六、ArgoCD(CD核心)

argocd/application.yaml

apiVersion: argoproj.io/v1alpha1
kind:Application
metadata:
name:devops-demo
namespace:argocd

spec:
project:default

source:
repoURL:http://192.168.100.100/devops/devops-demo.git
targetRevision:master
path:k8s

destination:
server:https://kubernetes.default.svc
namespace:default

syncPolicy:
automated:
prune:true
selfHeal:true


🔄 七、完整执行流程

1. 开发 push 代码 → GitLab

2. Jenkins 自动执行:
`

  • 构建 Docker 镜像
  • push Harbor
  • 修改 rollout.yaml
  • push Git`

3. ArgoCD 检测 Git 变更:
`

  • 自动同步 K8s`

4. Argo Rollouts:
`

  • 20% → 50% → 100% 灰度发布`

5. 用户访问:
devops.local


🧪 八、部署步骤(实战)

1️⃣ 准备环境

  • Kubernetes

  • Jenkins(已装)

  • Harbor(已装)

  • ArgoCD(建议 Helm 安装)


2️⃣ 安装 ArgoCD

kubectl create namespace argocd

kubectl apply -n argocd -f \
https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml


3️⃣ 安装 Argo Rollouts

kubectl create namespace argo-rollouts

kubectl apply -n argo-rollouts -f \
https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml


4️⃣ 创建应用

kubectl apply -f argocd/application.yaml


5️⃣ 访问

kubectl get svc -n argocd

相关推荐
Plastic garden3 分钟前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
苏州邦恩精密37 分钟前
江苏三维扫描仪厂家如何选择合适的工业测量方案?
人工智能·科技·机器学习·3d·自动化·制造
星辰徐哥1 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops
山里幽默的程序员1 小时前
DevOps 必备:盘点2026 年最强RESTful API 接口测试方案
运维·restful·devops·api开发·api开发工具
JimCarter1 小时前
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
docker·azure·树莓派·devops·orangepi·香橙派·raspberrypi
加农炮手Jinx1 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
无心水1 小时前
【Hermes:团队、企业、生态与边界】47、Hermes 在 CI/CD 中的完整 DevOps 流水线:从 PR 审查到自动部署,让 Agent 接管你的发布流程
运维·人工智能·devops·openclaw·养龙虾·hermes·honcho
lbb 小魔仙1 小时前
【Linux】DevOps 工程师必备:Linux 自动化脚本与高效工具链整合
linux·自动化·devops
武子康1 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose