• 这么快就来查资料了😄

  • k8s 集群监控平台的实现 at 2022年07月26日

    暂时没开源哈

  • mock server 实践 at 2022年06月23日

    我一个一个回答一下:

    1. mockserver 不是注入在 initcontainer 里的。是注入到 pod 里的一个单独的容器 。 initcontainer 只负责修改 iptables。 mockserver 容器则启动 mock 服务。
    2. 这个是 iptables 的规则。 你看我在设置规则的时候使用的是 prerouting 这个链。 如果网络包是从本主机发送出去的。 是不经过这个链的。只有外面的流量进入本主机的时候,才会经过这个链。 所以这个规则可以成功把外面发送给服务的流量转发给 mockserver,而 mockserver 本身发送给服务请求不会被这个规则拦截(mockserver 容器和服务容器都是在 Pod 中的,在 k8s 中同一个 pod 中的所有容器共用同一个网络名称空间。所以对于目标服务来说,mockserver 容器其实就是本机网络)。所以不会造成死循环。 具体的规则你看一下我下面在网上找的文章的截图:

  • 明年~

  • 很久没发帖了,聊聊 at 2022年06月05日

    好久不见,牛哥现在这么强了

  • 测开 offer 求比较 at 2022年05月16日
    仅楼主可见
  • 测试

  • allure report 可以直接启动一个 web 服务而不是静态的 html 文件。 测试用例的执行情况都在 http 的接口里。 可以直接抓。 我们之前的做法是在 jenkins 的 share lib 里写了抓取 allure report 结果的脚本。 然后在 pipeline 里直接调用即可。代码如下:

    import groovy.grape.Grape
    
    
    /**
     * Created by sungaofei on 19/3/1.
     */
    
    @Grab(group = 'org.codehaus.groovy.modules.http-builder', module = 'http-builder', version = '0.7')
    @Grab(group = 'org.jsoup', module = 'jsoup', version = '1.10.3')
    import org.jsoup.Jsoup
    import groovyx.net.http.HTTPBuilder
    
    
    import static groovyx.net.http.ContentType.*
    import static groovyx.net.http.Method.*
    import groovy.transform.Field
    
    //可以指定maven仓库
    //@GrabResolver(name = 'aliyun', root = 'http://maven.aliyun.com/nexus/content/groups/public/')
    //加载数据库连接驱动包
    //@Grab('mysql:mysql-connector-java:5.1.25')
    //@GrabConfig(systemClassLoader=true)
    
    //global variable
    @Field jenkinsURL = "http://k8s.testing-studio.com:5003"
    
    @Field int passed
    @Field int failed
    @Field int skipped
    @Field int broken
    @Field int unknown
    @Field int total
    @Field Map<String, Map<String, Integer>> map = new HashMap<>()
    
    @NonCPS
    def getResultFromAllure() {
        def reportURL = "/job/DailyBuild/${BUILD_NUMBER}/allure/"
    
    //    if (env.BRANCH_NAME != "" && env.BRANCH_NAME != null) {
    //        reportURL = "http://k8s.testing-studio.com:5003/job/Daily%20Build/allure/"
    //    } else {
    //        reportURL = "/view/API/job/${JOB_NAME}/${BUILD_NUMBER}/allure/"
    //    }
    
    //    reportURL = "/view/API/job/sage-sdk-test/185/allure/"
        println(jenkinsURL+"${reportURL}widgets/summary.json")
    
        HTTPBuilder http = new HTTPBuilder("http://k8s.testing-studio.com:5003")
        //根据responsedata中的Content-Type header,调用json解析器处理responsedata
        http.get(path: "${reportURL}widgets/summary.json") { resp, json ->
            println resp.status
            passed = Integer.parseInt((String) json.statistic.passed)
            failed = Integer.parseInt((String) json.statistic.failed)
            skipped = Integer.parseInt((String) json.statistic.skipped)
            broken = Integer.parseInt((String) json.statistic.broken)
            unknown = Integer.parseInt((String) json.statistic.unknown)
            total = Integer.parseInt((String) json.statistic.total)
        }
    
    
    }
    
    
    def call() {
        getResultFromAllure()
    
        getDatabaseConnection(type: 'GLOBAL') {
    //        map.each { feature, valueMap ->
    //            def sqlString = "INSERT INTO func_test (name, build_id, feature, version, total, passed, unknown, skipped, failed, broken, create_time) VALUES ('${JOB_NAME}', '${BUILD_ID}', '${feature}', '${version}', " +
    //                    "${valueMap['total']}, ${valueMap['passed']}, ${valueMap['unknown']}, ${valueMap['skipped']}, ${valueMap['failed']}, ${valueMap['broken']}, NOW())"
    //            println(sqlString)
    //
    //            sql sql: sqlString
    //        }
    
    //        def lineCov = 0
    //        def branchCov = 0
    //        if (coverage != null && coverage != ""){
    //            lineCov = getLineCov()
    //            branchCov = getBranchCov() * 100
    //
    //        }
    
            def sqlString = "INSERT INTO func_test_summary (name, build_id, total, passed, unknown, skipped, failed, broken, create_time) VALUES ('${JOB_NAME}', '${BUILD_ID}', " +
                    "${total}, ${passed}, ${unknown}, ${skipped}, ${failed}, ${broken}, NOW())"
    
            sql sql: sqlString
    
        }
    }
    
  • 测试

  • mock server 实践 at 2022年04月25日

    问题 1: 可以的, 我的程序就是写个 demo,你可以把自己想参数化的东西都提取出来
    问题 2:同问题 1 一样的,把端口号提取成环境变量就好了。