开玩笑詹金斯报道

时间:2018-11-02 15:39:57

标签: reactjs testing jenkins code-coverage jestjs

所以我正在詹金斯(Jenkins)成功地进行开玩笑的测试。现在,我们有一些旧项目的覆盖范围为零,我想开始收集更改文件的覆盖范围。

所以这是我的情况,今天我对100行代码覆盖了0%,明天我添加了10行代码,现在我想确保对新添加的10行代码有适当的覆盖。 / p>

如果10条新线没有涵盖范围,那么我想使构建失败并迫使开发人员编写测试用例。

如果在行级别上不可能,我也可以处理文件级别,因此,如果文件已更改,则需要具有覆盖率。

这样可能吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以使用Jenkin中的Cobertura Coverage Report插件来配置在构建过程中针对构建后操作失败的阈值。

可用的阈值选项为:

  • 包裹
  • 条件
  • 方法
  • 文件

我们的设置经过配置,使得下面的每个“拉取请求”都是单独构建的,如果不满足以下阈值,则构建将失败,因此我们将无法将其合并到开发中。

enter image description here

答案 1 :(得分:0)

我能够弄清楚。

我已经设置了一个sonarcloud实例,并根据设置规则检查我的分支和PR。

现在,我可以从jenkins对声纳进行api调用,以仅获取有关新代码的分析报告。基于此,我有责任使构建失败或继续运行。

在詹金斯大学,我首先运行常规的声纳云扫描,

然后通过以下步骤,我从质量门检查中获取结果:

sh "cat .scannerwork/report-task.txt"
def props = readProperties file: '.scannerwork/report-task.txt'
def sonarServerUrl = props['serverUrl'].replaceAll('https://', '')
def ceTask
def analysisId
timeout(time: 1, unit: 'MINUTES') {
    waitUntil {
      def response = sh(script: """
          curl -v -X POST https://${SONAR}@${sonarServerUrl}/api/ce/task -d "id=${props["ceTaskId"]}"
        """, returnStdout: true)
        ceTask = readJSON text: response
        analysisId = ceTask["task"]["analysisId"]
        return "SUCCESS".equals(ceTask["task"]["status"])
    }
}

def response2 = sh(script: """
    curl -v -X POST https://${SONAR}@${sonarServerUrl}/api/qualitygates/project_status -d "analysisId=${analysisId}"
  """, returnStdout: true)

def qualitygate =  readJSON text: response2

这将给我留下很多质量门,我可以在其中检查状态,而我的最后一步就是这样做:

if ("ERROR".equals(qualitygate["projectStatus"]["status"])) {
    error  "Quality Gate failure"
}

这将使jenkins作业出错,并且只会使用声纳中的规则设置检查新添加的代码。