k8s 发布应用后触发接口自动化测试

罐头鱼 - devopser 罐头鱼 - devopser 本文由博客端 http://www.devopser.org 主动推送
本贴最后更新于 181 天前,其中的信息可能已经水流花落

背景:

针对测试环境,在应用发布到 k8s 集群启动成功后自动触发接口自动化测试,如果测试不通过,应用不允许显示正常运行
原计划放到平台当中去做,不过这要排期一段时间,目前短时间要投入应用

解决方案:

readinessProbe 使用 command 方式,执行自定义的工具完成健康检测、调用中台 api 触发自动化测试一系列动作。

工具设计思路:

  1. 使用 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 状态码
  2. 如果 deployment 下有 n 个 pod(n=replicas>=2),就会触发 n 次数 api 接口调用,可以在中台 api 中做逻辑判断,对于相同 image,在一定时间间隔内的就不再触发接口自动化测试了
  3. 中台 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
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    31 引用 • 23 回帖 • 3 关注
1 操作
fish2018 在 2020-10-20 17:43:26 更新了该帖

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...