开发运维一体化小结
# 术语
敏捷开发 : 重在build代码通过。以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 CI-持续集成 : 重在单元test通过。源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。 CI 的流程执行和理论实践让我们可以确定新代码和原有代码能否正确地集成在一起。 CD-持续交付 : 重在release版本发布。可自动将已验证的代码发布到存储库。 它目标是拥有一个可随时部署到生产环境的代码库。 CD-持续部署 : 重在deploy版本部署。所有的变更都会被自动部署到生产环境中。 DevOps : 是一种方法论,为了实现上面的目标。用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运维之间的壁垒和鸿沟。
持续交付和持续部署的异同:
持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。 持续交付表示的是一种能力,而持续部署表示的则一种方式。持续部署是持续交付的最高阶段
# Jenkins的安装
- k8s搭建3pod
- 拉取的代码的工作空间放到pvc使用wrm模式,提高速度。
- k8s创建一个ServiceAccount,用于将来配置API
- 部署yaml: Deployment、指定serviceAccountName、volumeMounts用上面的PVC
- 访问: Service为ClusterIP , ingress代理
# Jenkins的配置
- 查看 Jenkins 日志,记录初始化密码,填入初始化页面
- 初始化用户
- 安装插件
- Cloud environment配置:
用于配置Agent的集群jenkins,分发任务。Slave 会执行构建脚本进行构建。 配置k8s的apiserver的连接。以启动pod来执行。 注意 Jenkins pod 的 SA 权限要配对,否则连不上k8s。 pod模板中的label,将会在pipline中使用。 在agent 定义label,来拉起pod。 如使用 master 则使用 Jenkins Master 进行构建 2个路径需要配置 : docker.sock(设置执行模式: dorcker in docker 再容器里再起容器执行。docker out of docker【DooD 方式】 再容器里调用宿主机的docker命令,避免再安装docker。) Workspace 使用 PVC的wrm模式,这样不用每次都下载各种库,减少构建的时间
- Git 连接设置: 添加凭证;添加私有服务器配置
- Image repository 设置 : 添加凭证;添加私有服务器配置
- 图形化界面 BlueOcean: 专为 Jenkins Pipeline 重新设计的一套 UI 界面,为Pipeline提供更多的功能。如: Pipeline 编辑器、异常处理提示、复杂的可视化。
# Jenkins Pipeline
特点: 以代码的形式描述,并存储于源代码控制系统;持久性;可暂停;多功能;可扩展;
基本概念:
- Node : Jenkins运行的节点
- Stage : 每个 Stage 代表一组操作,是一个逻辑分组的概念 (Stage View 插件展示给用户查看)
- Step : 最基本的操作单元
# Jenkinsfile
定义了流水线的各个阶段,在每个阶段可以执行相应的任务。 同时再可以放到git仓库同代码一起做版本分支管理。 它还提供了内置环境变量。
编写: agent : 指定 parameters : 参数化构建 (也可以使用jenkins的job的参数) environment : 环境变量的使用,可以Stage里面独立使用。
插件: intput()插件可以让用户输入交互。 checkout : 源码管理,在凭证中进行定义gitId withCredentials : 可以从获得凭据的账号和密码。 kubernetes CLI : 配置kubernetes 的 kubeconfig
脚本: 使用 sed 命令修改 k8s-YAML 文件中的变量值。 envsubst 将环境变量传递给文件。
# 部署Java 项目
流程图 : push 代码 -》 gitee webhook -》jenkins工作 -> pull and build -》 生成镜像 -》 把镜像推送到 Harbor 仓库 -》 然后在部署的时候通过 k8s 拉取 Harbor 上面的代码进行创建容器和服务 编写jenkinsfile,dockerfile,harbor仓库。
# 参考资料
他属于云原生的ops工具。用产商提供的task流水线模板
重点还是Argo支持k8s的滚动更新。 istio的流量管理。 Argo-Rollout主要集成了Ingress和ServiceMesh两种流量控制方法