Sonarqube 将泄漏期设置为特定版本而不是以前的版本
Sonarqube set leak period to specific version other than previous version
评估 Sonarqube(5.4 版),我们想迁移我们当前的工作流程
使用另一个审计工具,它的工作方式如下:
在生产中运行的当前版本是我们的参考版本。
从 GIT 检出一个新的开发版本,一个 diff 过程计算新的和修改的文件 vs.
参考版本并开始审核这些文件。
对遗留代码(2012 年已经存在的组件)的处理也略有不同,并且
新组件(2012 年之后)。
构建中断如果:
来自遗留组件的已更改文件(那些在 2012 年已经存在的文件)中的阻止程序问题
来自旧组件和新组件的新文件(2012 年之后创建的文件)中的阻止程序或严重问题
如何在 Sonarqube 中实现它?
已经尝试了两件事:
1.) 在启动 Sonar 任务之前将 属性 sonar.timemachine.period1
设置为 Ant 脚本中的 production/reference 版本 => 不起作用,
总是 'since previous version'
2.) 在Sonarqube 中定义两个不同的项目,一个用于生产版本,一个用于新的开发版本。
然后以编程方式使用 Sonarqube Web UI More / Compare Projects 中已知的功能并获取差异
用于阻止程序和关键问题。
问题:f.e。如果我修复了生产中已经存在的 200 个关键问题,我将不会得到关键问题的差异
参考,但在开发版本中引入了 200 个新问题。
比较项目功能没有新问题或旧问题的指标,它只是计算比较项目的问题。
sonar.timemachine.period1
属性 必须通过 REST 调用设置(文档 here),在调用 Sonar 任务之前 - 如果使用 Ant 属性 任务定义,它不会传输到 Sonarqube 服务器。
像那样工作,创建了一个宏定义以供重用:
<project xmlns:sonar="antlib:org.sonar.ant">
<!-- Import Groovy -->
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<!-- Import Sonar -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"/>
<property name="sonar.language" value="java" />
<property name="sonar.host.url" value="http://localhost:9000" />
<property name="sonar.projectKey" value="com.whatever:foobar" />
<property name="sonar.projectName" value="foobar" />
<property name="sonar.projectVersion" value="v_1_2_3_xy" />
<property name="sonar.scm.provider" value="git" />
<property name="sonar.sources" value="src"/>
<property name="sonar.java.binaries" value="bin"/>
<property name="sonar.java.libraries" value=" ... " />
<macrodef name="sonarsetproperty">
<attribute name="host" default="${sonar.host.url}"/>
<attribute name="property" />
<attribute name="projectid" default="${sonar.projectKey}"/>
<attribute name="value"/>
<attribute name="usertoken" default="6e44ba2b9c0f47118d502fbf1d6d36fcfd5f7eb2"/>
<attribute name="verbose" default="false"/>
<sequential>
<groovy>
<![CDATA[
println """
================ Sonar SetProperty ================
SonarHost => @{host}
SonarProperty => @{property}
Value => @{value}
================ Sonar SetProperty ================
"""
s = '@{host}/api/properties?id=@{property}&value=@{value}&resource=@{projectid}'
raw = '@{usertoken}:'
bauth = 'Basic ' + javax.xml.bind.DatatypeConverter.printBase64Binary(raw.getBytes())
url = new URL(s)
HttpURLConnection conn = url.openConnection()
conn.setRequestMethod('POST')
conn.setRequestProperty("Authorization", bauth)
conn.connect()
if(conn.responseCode == 200 || conn.responseCode == 201) {
response = conn.content.text
if(@{verbose}) println '=== Response ===\n' + response + '\n=== Response ==='
} else {
ant.fail(message: "Error Connecting to ${url}, Errorcode ${conn.responseCode}")
}
]]>
</groovy>
</sequential>
</macrodef>
<!-- user needs to be admin -->
<sonarsetproperty property="sonar.timemachine.period1" value="v_1_0_0_xy"/>
<!-- Execute Sonar -->
<sonar:sonar />
</project>
不知何故我希望在
中看到sonar.timemachine.period1
Sonarqube Server Web UI / Administration /General Settings / Differential Views
在 REST 调用之后,但事实并非如此。
注意 => 不要将 username:password
用于 BasicAuth
,只需在
http://sonarhost/account/security
处创建一个用户令牌并使用 usertoken: 代替 - 表示用户令牌作为带有分隔符“:”的用户 ID 和一个空白密码。
评估 Sonarqube(5.4 版),我们想迁移我们当前的工作流程
使用另一个审计工具,它的工作方式如下:
在生产中运行的当前版本是我们的参考版本。
从 GIT 检出一个新的开发版本,一个 diff 过程计算新的和修改的文件 vs.
参考版本并开始审核这些文件。
对遗留代码(2012 年已经存在的组件)的处理也略有不同,并且
新组件(2012 年之后)。
构建中断如果:
来自遗留组件的已更改文件(那些在 2012 年已经存在的文件)中的阻止程序问题
来自旧组件和新组件的新文件(2012 年之后创建的文件)中的阻止程序或严重问题
如何在 Sonarqube 中实现它?
已经尝试了两件事:
1.) 在启动 Sonar 任务之前将 属性 sonar.timemachine.period1
设置为 Ant 脚本中的 production/reference 版本 => 不起作用,
总是 'since previous version'
2.) 在Sonarqube 中定义两个不同的项目,一个用于生产版本,一个用于新的开发版本。 然后以编程方式使用 Sonarqube Web UI More / Compare Projects 中已知的功能并获取差异 用于阻止程序和关键问题。
问题:f.e。如果我修复了生产中已经存在的 200 个关键问题,我将不会得到关键问题的差异
参考,但在开发版本中引入了 200 个新问题。
比较项目功能没有新问题或旧问题的指标,它只是计算比较项目的问题。
sonar.timemachine.period1
属性 必须通过 REST 调用设置(文档 here),在调用 Sonar 任务之前 - 如果使用 Ant 属性 任务定义,它不会传输到 Sonarqube 服务器。
像那样工作,创建了一个宏定义以供重用:
<project xmlns:sonar="antlib:org.sonar.ant">
<!-- Import Groovy -->
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<!-- Import Sonar -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"/>
<property name="sonar.language" value="java" />
<property name="sonar.host.url" value="http://localhost:9000" />
<property name="sonar.projectKey" value="com.whatever:foobar" />
<property name="sonar.projectName" value="foobar" />
<property name="sonar.projectVersion" value="v_1_2_3_xy" />
<property name="sonar.scm.provider" value="git" />
<property name="sonar.sources" value="src"/>
<property name="sonar.java.binaries" value="bin"/>
<property name="sonar.java.libraries" value=" ... " />
<macrodef name="sonarsetproperty">
<attribute name="host" default="${sonar.host.url}"/>
<attribute name="property" />
<attribute name="projectid" default="${sonar.projectKey}"/>
<attribute name="value"/>
<attribute name="usertoken" default="6e44ba2b9c0f47118d502fbf1d6d36fcfd5f7eb2"/>
<attribute name="verbose" default="false"/>
<sequential>
<groovy>
<![CDATA[
println """
================ Sonar SetProperty ================
SonarHost => @{host}
SonarProperty => @{property}
Value => @{value}
================ Sonar SetProperty ================
"""
s = '@{host}/api/properties?id=@{property}&value=@{value}&resource=@{projectid}'
raw = '@{usertoken}:'
bauth = 'Basic ' + javax.xml.bind.DatatypeConverter.printBase64Binary(raw.getBytes())
url = new URL(s)
HttpURLConnection conn = url.openConnection()
conn.setRequestMethod('POST')
conn.setRequestProperty("Authorization", bauth)
conn.connect()
if(conn.responseCode == 200 || conn.responseCode == 201) {
response = conn.content.text
if(@{verbose}) println '=== Response ===\n' + response + '\n=== Response ==='
} else {
ant.fail(message: "Error Connecting to ${url}, Errorcode ${conn.responseCode}")
}
]]>
</groovy>
</sequential>
</macrodef>
<!-- user needs to be admin -->
<sonarsetproperty property="sonar.timemachine.period1" value="v_1_0_0_xy"/>
<!-- Execute Sonar -->
<sonar:sonar />
</project>
不知何故我希望在
中看到sonar.timemachine.period1
Sonarqube Server Web UI / Administration /General Settings / Differential Views
在 REST 调用之后,但事实并非如此。
注意 => 不要将 username:password
用于 BasicAuth
,只需在 http://sonarhost/account/security
处创建一个用户令牌并使用 usertoken: 代替 - 表示用户令牌作为带有分隔符“:”的用户 ID 和一个空白密码。