如何实现jenkins、sql、redis、git等工具的一体化自动发布?

262 阅读4分钟

简介

在之前确认发布时间及内容后,需要运维同学在指定时间手动去多个工具之间执行构建动作;繁琐、忙碌、易出错。

使用 cronin 工具的‘流水线’功能可以解决多工具的统一调度问题,从而实现 jenkins、sql、redis、git 等工具的一体化自动发布。

案例

事件描述

当开发小组完成了xx功能并通过了测试验证后,定于 9.24号22点进行项目发布,评估发布清单如下:

事项内容pr链接
发布时间2024-09-24 22:00
发布版本release/v3.2.26.0
执行SQL2024/sm0901/mn.sql
projectB部署s1、s2、s3gitee.com/mnyuan/proj… (样例)
projectC部署gitee.com/mnyuan/proj… (样例)
菜单脚本/menu/run.sh 2024/sm0901/menu* 2024/sm0901/group* prod

补充说明:

  • sql 内容统一放于 git 项目 projectA 中,并根据开发人员命名。
  • projectB 项目为 go 语言开发,并使用微服务模式;清单描述中 s1~s3为需要发布的服务。
  • projectC 项目为早期 php 开发项目。
  • 菜单脚本 包含了sql、redis、等复杂操作,采用sh封装,通过 linux bash 命令行触发执行。

任务设置

进入:头部导航 / 流水线 / 添加流水线

新增流水线 新增流水线任务

image.png 添加任务:添加 -> 通过列表查询找到任务勾选添加。

pipeline-fast.png (可选)快速添加任务方案:快捷添加 -> 通过特定语法快速匹配任务标签。

完善信息后,提交表单 完善任务信息:名称、执行时间、当前参数、执行的任务组件。

pipeline-4.png 任务设置好后可激活状态即在指定时间自动执行;为了增加安全性,建议指定负责人进行审核。

pipeline-5.jpg 当任务开始、结束、或错误时都将会发送消息给指定人员。

补充说明

  • sql执行、pr合并、tag更新、菜单脚本都使用了动态参数(提高任务组件的复用),流水线需要实现对应的参数。
  • sql 语句存放于项目 A,指定文件路径即可拉取执行,自动解析多行 sql。
  • 项目 B 发版时需要:pr合并、tag更新、jenkins 主备构建。
  • 项目 C 为 php 程序,pr合并会自动触发 jenkins 构建。
  • 菜单脚本 具体参数存放于项目 A,输入路径即可拉取执行。

建议流程

前期准备 由运维或服务器负责同事,完成基础任务的设置。

任务设置 开发小组负责人在迭代上线前创建流水线,选择任务组件,并交由运维同事进行审核。

任务执行时 测试人员、开发人员 需要在发布时密切关注告警消息,以应对突发情况。发布完成后,测试人员即可跟进正式环境的验证。

结语

上面的案例中包含了 sql执行、pr合并、tag文件更新、jenkins构建、命令行执行等,我们的日常开发中可能还会包含更多的工具维度,都是可以包含在整个流水线中的。

原来我们需要依次打开各个工具并执行对应的操作,过程中需要小心翼翼避免出错。现在直接解放了运维同事,由开发人员自己设置任务。拒绝熬夜。

如果构建服务器资源不足无法并行构建,就需要等上一次构建完成后,再手动点击新的构建,繁琐且无形拉长了发布周期。通过任务设置将复杂度封装在内部,开发同事只需选择对应任务组件自动执行,并在事前交叉核查,简单同时又减少了风险。

原来较大版本发布时,可能超过一小时,过程中除了发布执行同事忙了外,其他同事无法感知进度时常催促询问(紧张同时又增加烦躁)。现在设置推送信息后,每一个步骤都有消息通知,并可指定@对应人员,全员实时感知发布进度。

Gitee:gitee.com/mnyuan/cron…