这是一个基于您的要求详细扩展的 CI/CD 改进方案设计。该设计旨在支持 Kubernetes (K8s) 和虚拟机 (VM) 环境中的应用程序部署,并利用 GitHub Actions 和 Jenkins 实现 CI/CD 流程。
1. 环境支持
- K8s 环境: 使用 helmfile 部署应用程序。
- VM 环境: 使用 Ansible playbook 部署应用程序。
2. CI 工具
- GitHub Actions 和 Jenkins 用于实现 CI 流程。
3. CD 工具
- GitHub Actions 和 Jenkins 用于实现 CD 流程。
4. CI 阶段检查
- 代码检查 (code lint & code sec check): 使用适合项目的代码静态分析工具进行代码规范和安全检查。
- 构建镜像 (build image): 将应用程序打包成容器镜像以供部署使用。
- 构建图表 (build chart): 使用 helmfile 构建 K8s 应用程序的 Helm 图表。
- 单元测试 (unit test): 运行应用程序的单元测试,确保基本功能正常。
- 集成测试 (integration test): 运行应用程序的集成测试,确保组件之间的交互正常。
5. CD 阶段检查
- 部署配置检查: 检查部署配置文件是否正确。
- 部署状态检查: 检查部署是否成功完成。
- 运行状态检查: 检查应用程序在部署环境中的运行状态。
- 监控配置项目检查: 检查监控配置是否正确,包括资源监控、日志监控和业务监控覆盖。
- 备份/回滚检查: 检查备份和回滚机制是否正常工作。
6. 分支模型和 Docker 镜像标签策略
- 非主分支无 tag 构建的镜像标签: dev + git commit_id_前7位 + build num。
- 非主分支 + tag 构建的镜像标签: stage + git commit_id_前7位 + build num。
- 主分支 + cannary 构建的镜像标签: cannary + git commit_id_前7位 + build num。
- 主分支 + V_Release_ID 构建的镜像标签: V_Release_ID + build num。
7. GitOps Workflow 分支示意图
- 初始化阶段 (Init stage): 包括代码提交、PR、CI 作业和 CD 作业。
- 循环阶段 (Loop stage): 持续处理代码提交、PR、CI 作业和 GitOps 配置同步。
8. CI Runner 镜像
- 为不同任务 (代码检查、测试、构建镜像/图表、运行 Ansible) 使用特定的 CI Runner 镜像,以提高效率和可靠性。
这个设计提供了一个全面的框架,但具体的实现细节和工具选择应根据您的项目需求和环境来确定。
使用 PlantUML 绘制的 GitHub 分支模型图表:
plantumlCopy code@startuml
title GitHub 分支模型
[*] --> NonMaster : 非主分支
NonMaster --> NonMasterNoTag : 无 tag 构建的镜像
NonMasterNoTag --> dev : dev + commit_id_前7位 + build num
NonMaster --> NonMasterWithTag : 有 tag 构建的镜像
NonMasterWithTag --> stage : stage + commit_id_前7位 + build num
[*] --> Master : 主分支
Master --> Cannary : cannary 构建的镜像
Cannary --> VRelease : V_Release_ID + build num
@enduml
这个图表描述了 GitHub 分支模型,包括非主分支和主分支的不同情况下镜像标签的命名方式。
CI/CD Workflow Pipeline (CI/CD 工作流程管道)
GitHub Actions 工作流程文件 (GitHub Actions Workflow Files)
workflows-call-build-image.yaml
: 构建镜像的工作流程。workflows-call-build-charts.yaml
: 构建图表的工作流程。workflows-call-deploy-charts.yaml
: 部署图表的工作流程。workflows-call-setup-gitops.yaml
: 设置 GitOps 的工作流程。workflows-call-run-chaos-mesh.yaml
: 运行 Chaos Mesh 的工作流程。
Jenkinsfile
workflows-call-run-ansible.yaml
: 用于在虚拟机中运行 Ansible 的工作流程。
CI Runner Images (CI 运行器镜像)
| |
---|
alpine-code-lint/Dockerfile | |
alpine-test-tools/Dockerfile | |
alpine-image-builder/Dockerfile | |
alpine-chart-builder/Dockerfile | |
alpine-ansible-runner/Dockerfile | |
这些翻译将您提供的详细信息转换为中文,以便更好地理解 CI/CD 工作流程和 CI 运行器镜像。
编写一个 CICD improve 方案包括一下要点:
- 需要支持 k8s 环境容器应用,使用helmfile 部署应用
- 需要支持 VM 环境 应用,使用 ansible playbook部署应用
- 需要支持Pipeline Github Action,Jenkinsfile
| ENV | method | CI | CD |
| K8s-Stage | helmfile | Github Action | Github Action |
| K8s-Prod | helmfile | Github Action | Jenkinsfile |
| VM-Prod | ansible playbook | Github Action | Jenkinsfile |
列举下 CI 可能包含的check 阶段
- code lint & code sec check
- build image
- build chart
- 单元测试
5 集成测试
CD 可能包含的check 阶段
- 部署配置检查
- 部署状态
- 运行状态
- 监控配置项目检查(资源监控 日志监控,业务监控覆盖)
- 备份/回滚检查
提供下github branch 分支模型
- 非主分支 无tag 构建的镜像tag: dev+git commit_id_前7位+ build num
- 非主分支 + tag PickUp branch 构建的镜像tag: stage+git commit_id_前7位+ build num
- 主分支 + cannary 构建的镜像tag: cannary +git commit_id_前7位+ build num
- 主分支 + V_Realse_ID 构建的镜像 tag:V_Realse_ID+build num
基于GitOPS 的workflow 分支示意图:
- Init stage: code commit -> PR -> CI Jobs -> CD job -> Init ArgoCD CRD for APP
- Loop stage: code commit -> PR -> CI Jobs -> GitOPS Config Repo:
|
ArgoCD 控制器 ( watch GitOPS Config Repo) -> Syncd Stats
CI runner Image:
- alpine-code-lint/Dockerfile For Code
- alpine-test-tools/Dockerfile For Code & artifact
- alpine-image-builder/Dockerfile for K8S/APP
- alpine-chart-builder/Dockerfile K8S/APP
- alpine-ansible-runner/Dockerfile VM/APP
genneral helm chart:
- App-frontend
2.APp-backend
CI/CD workflow
Github action workflow-call:
- workflows-call-build-image.yaml
- workflows-call-build-charts.yaml
- workflows-call-deploy-charts.yaml
- workflows-call-setup-gitops.yaml
- workflows-call-run-choas-mesh.yaml
Jenkinffile
- workflows-call-run-ansible.yaml for VM