背景:
针对测试环境,在应用发布到 k8s 集群启动成功后自动触发接口自动化测试,如果测试不通过,应用不允许显示正常运行
原计划放到平台当中去做,不过这要排期一段时间,目前短时间要投入应用
解决方案:
readinessProbe 使用 command 方式,执行自定义的工具完成健康检测、调用中台 api 触发自动化测试一系列动作。
工具设计思路:
- 使用 golang 封装 http client,调用 127.0.0.1:8888/actuator/info 判断是否启动成功,如果启动成功,调用中台 api 触发接口自动化测试,传入参数如{"env":"test","app":"demo","image":"harbor.com/demo:1.0"}。
需要注意的是 readinessProbe 是周期执行的,要避免重复触发自动化测试,可以在初次就绪性检测通过后创建个本地文件,每次调用中台 api 前先检测该文件是否存在,存在就不再调用 api 了。减少开销,只判断 http 状态码 - 如果 deployment 下有 n 个 pod(n=replicas>=2),就会触发 n 次数 api 接口调用,可以在中台 api 中做逻辑判断,对于相同 image,在一定时间间隔内的就不再触发接口自动化测试了
- 中台 api 根据自己情况实现,比如调用 jenkins 任务、测试平台。
我们是调用的 jenkins job 方式,jenkins job 是不支持同一个 Job 并行的。所以不能同时调用同一个 job,我们会先检测 app 对应的 Job 是否存在,不存在则根据 xml 模板和相关参数取测试平台的一些信息,再自动创建临时的 job 执行。
项目
https://github.com/fish2018/readyCheck.git
deployment 的 yaml 配置
需要注意的是,如果之前有使用的其他方式检测,再直接 kubectl apply 会提示不能使用多个 readinessProbe 检测方式,可以先把之前的删掉
readinessProbe:
exec:
command:
- /im-svc/readyCheck
initialDelaySeconds: 20
periodSeconds: 10
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于