CICD

CICD #

Zadig 概述 #

项目 #

Zadig 中的项目包括工作流、环境、服务、构建、测试、版本等资源,用户在项目中可以进行服务开发、服务部署、集成测试、版本发布等CICD操作。

工作流 #

典型的软件开发过程一般包括以下几个步骤: 编写代码 -> 构建 -> 部署 -> 测试 -> 发布 工作流就是 Zadig 平台对这样一个开发流程的实现,通过工作流来更新环境中的服务或者配置。

工作流组成 #

Zadig 工作流简化示意图如下所示:

环境 #

Zadig 环境是一组服务集合及其配置、运行环境的总称,与 Kubernetes 的 NameSpace 一对一的对应关系,使用一套服务模板可以创建多套环境。

服务 #

Zadig 中的服务可以理解为一组 Kubernetes 资源,包括 Ingress、Service、Deployment/Statefulset、ConfigMap 等,也可以是一个完整的 Helm Chart 或者云主机/物理机服务,成功部署后可对外提供服务能力。

服务组件 #

服务组件是 Zadig 中可被更新的最小单元,是使用 Kubernetes 作为基础设施的项目中的概念。一个服务中可包括多个服务组件。不同项目中的服务组件信息如下表:

项目类型服务组件来源服务组件名称服务组件镜像信息
K8s YAML 项目服务 K8s YAML 配置中的 Deployment/Statefulset、Job 资源对应资源的 container 名称对应资源的 container 镜像
K8s Helm Chart 项目服务 Helm Chart values.yaml 文件values.yaml 文件中的镜像名称values.yaml
K8s 托管项目被托管服务实例中的 Deployment/Statefulset、Job 资源对应资源的 container 名称对应资源的 container 镜像

服务组件是服务构建配置中的一部分。为服务组件配置构建后,运行工作流时可选择对应的服务组件对其进行更新。

构建 #

Zadig 构建属于服务配置的一部分,同时在工作流运行阶段会被调用,与服务是一对多的对应关系,即一套构建可以支持多个服务共享。

测试 #

Zadig 测试属于项目的资源,同时也可以作为一个非必要阶段在工作流中调用,支持跨项目。

版本管理 #

Zadig 版本是一个完整的可靠交付物,比如 Helm Chart,或 K8s YAML 完整配置文件。

Zadig安装 #

# 添加helm charts镜像源
helm repo add zhirenyun https://harbor.oneitfarm.com/chartrepo/zhirenyun
# 安装的k8s命名空间 
export NAMESPACE=zadig
# Ingress域名
export DOMAIN= ${需要创建的Ingress域名}
# IngressClass名称
export IngressClass=${IngressClass名称}
helm template zadig zhirenyun/zadig --version=1.17.1 --set endpoint.FQDN=${DOMAIN} \
--set global.extensions.extAuth.extauthzServerRef.namespace=${NAMESPACE} \
--set "dex.config.staticClients[0].redirectURIs[0]=http://${DOMAIN}/api/v1/callback,dex.config.staticClients[0].id=zadig,dex.config.staticClients[0].name=zadig,dex.config.staticClients[0].secret=ZXhhbXBsZS1hcHAtc2VjcmV0" \
--set gloo.k8s.clusterName=k8s.sh  \
--set "gloo.gateway_ingress.hosts[0].host=${DOMAIN}" \
--set gloo.gateway_ingress.annotations."kubernetes\.io/ingress\.class"${ IngressClass }

默认的用户名为 admin,密码为 zadig,登录后即可进入首页。

Zadig配置 #

集成代码源 #

首先我们要去添加下代码源,比如常见的 GitHub、GitLab 等。 系统集成->代码源->添加

需要注意填写的应用回调地址是否正确

集成镜像仓库 #

代码源集成完成后,接下来我们需要添加镜像仓库到 Zadig 中,支持集成阿里云 ACR、腾讯云 TCR、华为云 SWR、Amazon ECR、DockerHub、Harbor 等镜像仓库。

软件包管理 #

在 Zadig 中运行构建以及测试步骤,一般都需要用户根据实际业务去安装必要的软件包环境来进行构建或者编译。比如编译后端相关代码就需要 Go 环境、Java 环境等,前端代码的 NodeJS 环境以及其他环境。 有一些外网地址速度很慢,可以修改软件包的地址,例如图中的maven

创建项目和服务 #

以 spring-demo 项目为例,该项目为spring构建的后端backend,共包括 dev 和 qa 2 个环境。案例源码位于:https://gitlab.oneitfarm.com/zhuzhenjun/spring-web,相关文件说明如下:

zadig/examples/microservice-demo
├── Dockerfile // 镜像构建文件
├── HELP.md
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml //maven pom文件
├── spring-web.iml
└── src // 源码目录

新建一个项目 #

项目->新建项目 输入项目名称,以k8s yaml项目为例,点击“立即新建”进入项目初始化向导,初始化向导会默认指引我们初始化配置2套环境、3条工作流; 如果在项目初始化向导中配置有误或者提供的信息不完整,后续可以重新进入项目中进行调整,并不需要一次性配置完成。

项目初始化向导 点击下一步进入“新建服务”,Zadig 中的服务可以理解为一组 Kubernetes 资源,比如 Service、Deployment 等等,也可以是一个 Helm Chart 包。

点击+按钮新建服务 在一个服务中,可以定义多个k8s资源对象,如图中service1所示;不同的服务可以根据需要点击左侧的按钮进行服务编排;除了手动输入,服务也可以使用预先设置好的模板来新建,或者从k8s中导入后修改,也支持从代码库同步。 然后点击保存按钮,保存后会自动加载YAML 中的自定义变量以及服务组件, 接下来在变量区域点击“添加构建”为我们的服务配置构建方式。 在构建中,重点配置三个信息,分别是:依赖的软件包、代码源与构建脚本 如图中所示,示例项目所需的软件包为java与maven,如果所需的版本不在选项中,可以在软件包管理中进行配置。 脚本中的 $IMAGE 变量就是前面变量中读取到的当前镜像版本($IMAGE)

配置后点击保存构建即可看到已经关联上了上面创建的构建信息 点击下一步进入“创建环境“,初始化向导默认会创建2套环境,每一套环境都会在集群中创建一个单独的命名空间 点击创建环境后,若环境创建成功,会提示点击下一步,进入“执行工作流”步骤 如果创建有错误,可以在项目中调整后重新创建。

初始化向导默认创建了3条工作流,分别对应着不同的环境 我们选择dev环境的的工作流做一次示例,点击运行

点击执行

此时工作流显示正在运行 如果工作流执行失败,可以在项目中调整后重新执行,经过一段时间后,进入项目界面可以查看到工作流已经执行完成了 任务执行完成后会使用新构建的镜像 去替换掉前面我们配置的资源清单中的镜像地址,自动部署到dev环境中去。

在项目中选择环境,可以看到刚刚执行工作流的dev环境下,服务已经是running状态了 服务入口则展示了我们在项目初始化向导中配置的服务ingress的地址

实际工作当中也可以通过给工作流设置触发器来实现自动工作流