wydevops——项目的README带你全面了解它
wydevops 介绍
本项目使用统一的标准过程来管理微服务的编译构建、docker镜像生成(多架构)、Chart镜像生成、离线发布包生成,以及自动部署等过程。
wydevops的目标是打造功能最强大的、最易扩展和维护的、使用最简单的CI/CD流水线。
当前V1.*版本的功能特点
- 从设计上支持多语言项目(目前已完成了GO、JAVA、Next.js、Vue项目的适配)、单模块和多模块项目。
- 支持构建linux/amd64和linux/arm64两种架构的docker镜像。
- 支持K8S、docker两种微服务自动部署方式。在本地工作模式下,可直接从源码项目中完成整个CI/CD流程,
直至微服务在docker或K8S集群中运行起来。 - 支持微服务镜像分层打包,生产环境下部署包更小。
- 具备向外部系统发送通知消息的机制。
- 支持离线构建微服务部署包,本地会缓存从公网拉取的所有第三方镜像,为私网环境下的微服务开发提供了极大便利。
- 支持单chart部署多个微服务,便于对耦合紧密的业务模块进行统一发布和卸载。
- 支持单容器内部署多个微服务,占用最少的宝贵的Pod资源。
- 支持nexus3和harbor(2.10+)作为docker镜像和chart镜像仓库,不再需要helm push插件。
- 支持与Jenkins的集成,仅使用一个入口脚本即可完成与Jenkins Pipeline流水线的整合。
- 全部代码均采用shell开发,具备最大灵活性和用户适应性,各类语言的开发人员学习和掌握的成本最低。
- 项目内原创开发有强大的Yaml文件的读写工具,为用户自定义扩展功能提供极大的便利。
- 设计有公司级、开发组级、项目级三层管理模型,留有为各级人员提供了管理和控制CI/CD流程的接口。
- 为K8S资源配置文件提供了插件机制,便于开发人员自定义配置文件。
- 在本项目的基础上,维护团队已经开发完成了wydevops微服务管理平台,目前尚未开源。
运行环境
- 可在windows下的git bash命令行中运行。
- 可在linux下的bash命令行中运行。
- 可通过源码中提供的Jenkinsfile文件,与Jenkins Pipeline流水线进行整合。
依赖的第三方库
-
git
Ubuntu (Debian/Ubuntu 系列)下:
更新包索引并安装:
sudo apt update
sudo apt install -y git
验证: git --version
基本配置: git config --global user.name “你的名字” git config --global user.email “you@example.com”Windows下采用官方安装程序:
下载并运行:https://git-scm.com/download/win
按安装向导完成(可保留默认选项)。
打开 PowerShell 或 cmd,验证: git --version
基本配置(在 PowerShell 或 Git Bash 中): git config --global user.name “你的名字” git config --global user.email “you@example.com” -
libxml2
这是一个用于处理xml文件的库。需要用户自行下载安装。
ubuntu (Debian/Ubuntu 系列)下的安装命令:apt install libxml2-dev
windows下的安装命令:choco install libxml2 -
docker
这是用于构建和管理docker镜像的工具。需要用户自行下载安装。
ubuntu (Debian/Ubuntu 系列)下的安装命令:apt install docker-ce
windows下可从这里下载安装:docker desktop -
helm
这是一个用于K8S微服务部署的工具。本项目会根据系统架构的不同自动安装/tools目录下对应的helm(内置的版本为v3.15.1)命令,无需用户安装。 -
kubectl
这是一个用于K8S资源管理的命令行工具。
linux下本项目会根据系统架构的不同自动安装/tools目录下对应的kubectl命令,无需用户安装。
在windows下用户可安装docker desktop工具并启动内置的K8S集群(便于本地调试),docker desktop中自带Kubectl命令;或者执行安装命令:choco install kubectl
kubectl安装完后需要为其指定管理的K8S集群信息,方法如下:- 在 Windows 搜索中输入 “环境变量”,然后选择 “编辑系统环境变量”。
- 在 “系统属性” 对话框中,点击 “环境变量…” 按钮。
- 在 “用户变量” 或 “系统变量” 部分,点击 “新建…”。
- 变量名 输入 KUBECONFIG。
- 变量值 输入您的 kubeconfig 文件的完整路径,例如 C:\Users\YourUser.kube\my-cluster-config。
- 点击确定保存。您需要重新打开一个新的终端窗口来使设置生效。
-
K8S集群中需要安装好istio
默认配置下,wydevops会采用istio sidecar模式来部署微服务。
因此要求K8S集群中已经安装了istio(安装方法详见这里)。
特别提醒:wydevops会连接目标集群(由目标参数targetApiServer指定)动态获取所有生成的K8S资源类型的apiVersion参数,
以便确保生成的K8S资源类型的版本与目标集群保持一致。
安装步骤
-
创建一个目录作为wydevops的根目录,并定义环境变量WYDEVOPS_HOME指向这个目录。
ubuntu (Debian/Ubuntu 系列)下:- vim ~/.bashrc
- 在文件末尾添加:export WYDEVOPS_HOME={新建的那个目录}, 并保存退出。
- 执行命令:source ~/.bashrc
windows下:
- 在 Windows 搜索中输入 “环境变量”,然后选择 “编辑系统环境变量”。
- 在 “系统属性” 对话框中,点击 “环境变量…” 按钮。
- 在 “用户变量” 或 “系统变量” 部分,点击 “新建…”。
- 变量名 输入 WYDEVOPS_HOME。
- 变量值 输入刚创建的那个目录。
- 点击确定保存。您需要重新打开一个新的终端窗口来使设置生效。
-
在$WYDEVOPS_HOME目录下打开git bash命令行,在命令行中执行下列命令下载本项目的源码。
git clone -b master https://github.com/sichuanwuyi/wydevops.git
或
git clone -b master https://gitee.com/tmt_china/wydevops.git -
创建$WYDEVOPS_HOME/client-config.json文件,并将下述内容写入该文件中,以便后续wydevops执行时能自动更新到最新版本。
{
“repoUrl”: “https://gitee.com/tmt_china/wydevops.git”,
“branch”: “master”
} -
安装第三方的依赖库(安装方法详见前述)
-
安装成功验证
执行命令:bash $WYDEVOPS_HOME/wydevops/script/wydevops.sh -h
如果没有报错,说明安装成功。
与需要打包部署的项目集成
-
将$WYDEVOPS_HOME/wydevops/script/wydevops-run.sh文件复制到目标项目的根目录下。
-
打开目标项目的根目录下wydevops-run.sh文件,在其末尾的执行wydevops.sh命令的参数行中做如下修改或确认:
- 指定本地的第三方docker镜像的缓存目录(-I参数)。默认值为~/.wydevops/cachedImage。
- 指定项目的语言类型(-L参数),目前支持的值有:java、go、nextjs、vue。如果是其他项目类型需要自行扩展或联系wydevops运维团队。
- 确认本次打包的架构类型(-A参数),可选值有:linux/amd64、linux/arm64。默认值为linux/amd64。
- 确认本次流程生成的离线安装包的架构类型(-O参数),可选值有:linux/amd64、linux/arm64。默认值为linux/amd64。
- 其他参数保持不变即可,如需修改可执行命令:bash $WYDEVOPS_HOME/wydevops/script/wydevops.sh -h,进行参数详情查询。
-
在目标项目的根目录下创建一个名为ci-cd-config.yaml的文件。
在该文件的globalParams配置节下必须添加的参数有:- 微服务的名称(serviceName)
- 微服务的版本(businessVersion)
- 微服务的主端口号(mainPort),支持多端口配置(端口号间使用英文逗号隔开)
- 微服务的网关域名(gatewayHost),默认值为*,表示任意Host。
- 微服务的网关路径前缀(gatewayPath),默认值为"/ s e r v i c e N a m e " ,这个参数可以根据实际情况进行修改。默认情况下,网关在转发时会将请求路径中的 " / {serviceName}",这个参数可以根据实际情况进行修改。 默认情况下,网关在转发时会将请求路径中的"/ serviceName",这个参数可以根据实际情况进行修改。默认情况下,网关在转发时会将请求路径中的"/{serviceName}"丢弃(rewrite规则决定的)。
- 是否启用K8S服务存活探针(livenessProbeEnable),默认值为true。
- 如果livenessProbeEnable=true,则必须配置K8S服务存活探针的URI(livenessUri),默认值为"/health"。
- 是否启用K8S服务就绪探针(readinessProbeEnable),默认值为true。
- 如果readinessProbeEnable=true,则必须配置K8S服务就绪探针的URI(readinessUri),默认值为"/health"。
- 默认的K8S集群节点服务器SSH参数信息(targetApiServer),格式为:{服务器IP地址}|{SSH端口号}|{SSH连接账号}|{SSH连接密码}
需要提前配置好本地计算机到该节点服务器的SSH免密登录,否则会导致部署失败。 - 部署的目标命名空间(targetNamespace),默认值为default。部署时会自动创建不存在的命名空间。
例如:targetApiServer: 172.27.213.84|22|admin|admin123456 - K8s集群内部拉取镜像的仓库信息(targetDockerRepo),
格式为:{仓库类型(nexus或harbor)},{仓库实例名称(nexus)或项目名称(harbor)},{仓库访问地址({IP}:{端口})},{登录账号},{登录密码}
例如:targetDockerRepo: registry,wydevops,192.168.1.218:30783,admin,admin123,30784
上述参数是在执行后续流程前必须配置好的,否则会导致部署失败。除此之外还有很多其他配置参数,如需更全面的了解
请参考$WYDEVOPS_HOME/wydevops/script/templates/config目录下各语言的配置模板文件_ci-cd-template.yaml。该文件中包含了所有的配置参数详情。
对部分项目类型的深度定制
对java项目和go项目,wydevops做了进一步的深度定制,通过params-mapping-in-yaml-file.config、params-mapping-in-xml-file.config配置文件
将上述1)-5)的参数绑定到了目标项目自有的配置文件的某些参数上了(具体绑定规则请参考params-mapping-in--file.config文件中的注释),
wydevops运行时会根据目标项目的配置文件自动提取被绑定参数的值。这类params-mapping-in--file.config配置文件依赖各公司或组织机构内部的项目开发规范,
是研发团队项目规范在wydevops中的具体体现。通过这个绑定机制可强制约束开发人员对研发规范的严格执行。
实际开发中可灵活调整params-mapping-in-*-file.config配置文件的内容,以适配研发团队的项目开发规范。
- java项目默认规范
- wydevops默认支持的Java规范中,所有的application.yaml文件都必须存放在/resources/config目录下。
- wydevops默认Java项目使用的生成环境配置文件为application-prod.yaml,也即生成环境打包时spring.profiles.active必须配置为prod。
- 在params-mapping-in-yaml-file.config文件中详细定了application*.yaml文件中哪个参数的值被绑定到了wydevops的哪些参数上。
- 在params-mapping-in-xml-file.config文件中详细定了pom.yaml文件又哪些自定义的参数并且这些参数的值被绑定到了wydevops的哪些参数上。
- go项目默认规范
- 默认生产环境下的配置文件名称为config-prod.yaml,这个文件必须存放在项目的根目录下。
- 在config-prod.yaml文件中,必须存在:
- app.appName——该参数值被绑定到了globalParams.serviceName、globalParams.serviceNameZh。
- app.version——该参数值被绑定到了globalParams.businessVersion。
- app.port——该参数值被绑定到了globalParams.mainPort、globalParams.containerPorts、globalParams.servicePorts
- app.gateway.domain——该参数值被绑定到了globalParams.gatewayHost。
- app.gateway.route-prefix——该参数值被绑定到了globalParams.gatewayPath
特别说明,凡是被params-mapping-in-*-file.config文件中定义了绑定规则的wydevops参数,可以不在ci-cd-config.yaml文件中定义。
示例项目说明
项目源码的/sample目录下包含了java、go、nextjs、vue四种类型的示例项目。每个示例都比较简单,感兴趣的开发者可以参考这些示例项目。
wydevops微服务管理平台(V1.0.0)
基于wydevops打包的微服务离线安装包,团队开发了一个微服务管理平台,用于管理微服务的部署、监控、日志等。
该平台目前尚未开源,后续会在团队内部进行完善和优化。主要的核心界面展示如下:
-
登录界面

-
集群总览界面

-
集群节点界面


-
应用列表界面

-
服务列表界面

-
用户管理界面


-
离线安装包切片上传界面

-
上传后解压验证界面

-
应用安装过程界面


-
配置参数动态修改界面


-
基于istio的灰度发布界面


-
应用日志查看界面

-
容器命令行界面

更多推荐
所有评论(0)