CICD的工作流程
CICD 包含如下流程
- Build & Package
- Test
- Deployment
需要的服务
- Git仓库:使用 Github
- Docker 镜像仓库:使用阿里云镜像仓库
- Jenkins:使用阿里云 k8s 上搭建的 jenkins
- K8s: 使用阿里云 k8s
CICD 工具
- Jenkins:Jenkins pipeline 流水线
- CICD Pipeline: 包含一系列按照指定顺序执行的脚本
- 包含有用来完成任务的多个阶段(stages)
- Spinnaker
- Harness
CD 阶段不同的部署策略
- Rolling Upgrade: 滚动更新,多个实例,下线一台升级一台,直至升级完
- Blue/Green Deployment: 蓝绿部署,部署到新集群,部署完切流量到新集群
- Canary Deployment:金丝雀部署,过程中新老版本共存,持续做灰度验证
CICD的使用 - 前提
如何对 Django Web 应用进行 CICD, 自动化镜像打包,测试,发布,部署
- 前提:镜像的构建不依赖于本地的文件
- 安全策略:账号密码不保存在代码库中
- 账号密码保存到哪里? 密码如何使用?
- Kubernetes Secrets
- KMS 系统: 如 Vault,阿里云 KMS 等
使用 Kubernetes Secrets 管理账号密码
用 Kubernetes Secrets 管理账号密码的使用流程
- K8s secrets 中管理密码,k8s 配置文件中引用密码,代码中通过环境变量来引用
如何使用
- 基于文件创建 Secret:kubectl apply -f mysecret.yaml
- 基于命令创建:kubectl create secret generic
- 在云厂商 k8s 的管理控制台创建 secrets
示例
1
| kubectl create secret generic prod-db-secret --fromliteral=username=produser --from-literal=password=Y4nys7f11
|
1
| kubectl get secret prod-db-secret
|
1
| kubectl describe secret prod-db-secret
|
1
| kubectl delete secret prod-db-secret
|
CICD的使用 – 阿里云创建密钥
-
创建密钥:配置管理 – 保密字典
-
使用密钥:K8s 文件中引用 secrets
-
Python 代码从环境变量读取配置
CICD的使用 - Jenkins使用
搭建 k8s 中的 Jenkins 环境
使用 Jenkins DoD 版本 (Docker on Docker),部署到 k8s
1
| docker pull ihopeit/jenkins-dod:1.1
|
1
| docker tag ihopeit/jenkins-dod:1.1 registry.cn-beijing.aliyuncs.com/ihopeit/jenkins-dod:1.1
|
1
| docker push registry.cn-beijing.aliyuncs.com/ihopeit/jenkins-dod:1.1
|
初始化完成后,部署到 k8s
1
| kubectl apply -f jenkins-service.yaml
|
1
| kubectl apply -f jenkins-deployment.yaml
|
jenkins 的启动日志里面会自动产生初始化的 admin 密码,可用于登陆
流程总结
- 阿里云 K8s 创建 Jenkins 路由(ingress路由)
- 访问 Jenkins, 配置 kubeconfig, 配置 阿里云 镜像仓库账号密码
- 创建 Jenkins 项目, Pipeline 项目,设置 Pipeline
- Build 项目