使用 Bamboo 的 SonarQube 5.1 执行错误
SonarQube 5.1 execution error using Bamboo
我有 MSBuild.SonarQube.Runner.exe 运行 在我自己的电脑上,一切正常。我现在正在尝试将这项工作自动化并将其交给 Bamboo。我使用相同的 SonarQube 配置(但环境不同,因为它是 Windows 2008 R2 Server 与 Windows 7)。我正在使用 MSBuild.SonarQube.Runner.exe 和最简单的配置文件(仅 MySQL 服务器)。
我的错误指示 Dinesh 桌面的路径(如果我没记错的话,他是 Sonar Qube 开发人员)
此错误发生在 运行 MSBuild.SonarQube.Runner.exe 结束 之后。任何的想法 ?
18:00:06 Writing processing summary to E:\bamboo-home\xml-data\build-dir\SON-SVACN0-TEST\.sonarqube\out\ProjectInfo.log
18:00:06 Creating directory: E:\bamboo-home\xml-data\build-dir\SON-SVACN0-TEST\.sonarqube\bin\sonar-runner
18:00:06 The SONAR_RUNNER_HOME environment variable is not required and will be ignored.
18:00:06 Calling the sonar-runner...
18:00:06 SONAR_RUNNER_OPTS is not configured. Setting it to the default value of -Xmx1024m
Unhandled Exception: System.ArgumentException: Item has already been added. Key in dictionary: 'bamboo_capability_system_builder_snr_Sonar_Runner' Key being added: 'bamboo_capability_system_builder_snr_Sonar_runner'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at System.Collections.Specialized.StringDictionaryWithComparer.Add(String key, String value)
at System.Diagnostics.ProcessStartInfo.get_EnvironmentVariables()
at SonarQube.Common.ProcessRunner.SetEnvironmentVariables(ProcessStartInfo psi, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 151
at SonarQube.Common.ProcessRunner.Execute(String exeName, String args, String workingDirectory, Int32 timeoutInMilliseconds, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 87
at SonarRunner.Shim.SonarRunnerWrapper.ExecuteJavaRunner(ILogger logger, String exeFileName, String propertiesFileName) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarRunner.Shim\SonarRunner.Wrapper.cs:line 114
at SonarRunner.Shim.SonarRunnerWrapper.Execute(AnalysisConfig config, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarRunner.Shim\SonarRunner.Wrapper.cs:line 68
at SonarQube.TeamBuild.PostProcessor.Program.Main() in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.TeamBuild.PostProcessor\Program.cs:line 51
Bamboo 正在创建许多环境变量。问题是它创建了两次相同的变量(Runner vs runner)。
bamboo_capability_system_builder_snr_Sonar_Runner=E:\sonar-runner-2.3
bamboo_capability_system_builder_snr_Sonar_runner=E:\sonar-runner-2.3
bamboo_capability_system_builder_snr_Sonar_runners=E:\sonar-runner-2.3
我认为 MSBuild.SonarQube.Runner 中存在错误,因为它应该检查密钥是否已包含在此函数中
at SonarQube.Common.ProcessRunner.SetEnvironmentVariables(ProcessStartInfo psi, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 151
作为快速解决方法,我决定在我的 bamboo 脚本中将两个变量之一设置为 null:
set bamboo_capability_system_builder_snr_Sonar_runner=
在 Windows 上,环境变量不区分大小写。
出于某种原因,您试图定义两者:
- bamboo_capability_system_builder_snr_Sonar_Runner
- bamboo_capability_system_builder_snr_Sonar_runner
.NET 框架对此没有很好的支持,请参阅:
https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.Process/src/System/Diagnostics/ProcessStartInfo.cs#L97
当存在具有多个大小写的相同环境变量时,对 ProcessStartInfo.Environment
的任何调用都会导致您看到的失败。
所以 - 也许这需要在 CoreFX(.NET Framework)中修复 - 但我认为不需要更改 MSBuild SonarQube Runner 本身。
另一个修复是让 Bamboo 不要多次定义同一个环境变量。例如,如果您在 foo
已定义时尝试定义 FOO
,则用于设置环境变量的 Windows 用户界面会覆盖该值。
我有 MSBuild.SonarQube.Runner.exe 运行 在我自己的电脑上,一切正常。我现在正在尝试将这项工作自动化并将其交给 Bamboo。我使用相同的 SonarQube 配置(但环境不同,因为它是 Windows 2008 R2 Server 与 Windows 7)。我正在使用 MSBuild.SonarQube.Runner.exe 和最简单的配置文件(仅 MySQL 服务器)。
我的错误指示 Dinesh 桌面的路径(如果我没记错的话,他是 Sonar Qube 开发人员)
此错误发生在 运行 MSBuild.SonarQube.Runner.exe 结束 之后。任何的想法 ?
18:00:06 Writing processing summary to E:\bamboo-home\xml-data\build-dir\SON-SVACN0-TEST\.sonarqube\out\ProjectInfo.log
18:00:06 Creating directory: E:\bamboo-home\xml-data\build-dir\SON-SVACN0-TEST\.sonarqube\bin\sonar-runner
18:00:06 The SONAR_RUNNER_HOME environment variable is not required and will be ignored.
18:00:06 Calling the sonar-runner...
18:00:06 SONAR_RUNNER_OPTS is not configured. Setting it to the default value of -Xmx1024m
Unhandled Exception: System.ArgumentException: Item has already been added. Key in dictionary: 'bamboo_capability_system_builder_snr_Sonar_Runner' Key being added: 'bamboo_capability_system_builder_snr_Sonar_runner'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at System.Collections.Specialized.StringDictionaryWithComparer.Add(String key, String value)
at System.Diagnostics.ProcessStartInfo.get_EnvironmentVariables()
at SonarQube.Common.ProcessRunner.SetEnvironmentVariables(ProcessStartInfo psi, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 151
at SonarQube.Common.ProcessRunner.Execute(String exeName, String args, String workingDirectory, Int32 timeoutInMilliseconds, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 87
at SonarRunner.Shim.SonarRunnerWrapper.ExecuteJavaRunner(ILogger logger, String exeFileName, String propertiesFileName) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarRunner.Shim\SonarRunner.Wrapper.cs:line 114
at SonarRunner.Shim.SonarRunnerWrapper.Execute(AnalysisConfig config, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarRunner.Shim\SonarRunner.Wrapper.cs:line 68
at SonarQube.TeamBuild.PostProcessor.Program.Main() in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.TeamBuild.PostProcessor\Program.cs:line 51
Bamboo 正在创建许多环境变量。问题是它创建了两次相同的变量(Runner vs runner)。
bamboo_capability_system_builder_snr_Sonar_Runner=E:\sonar-runner-2.3
bamboo_capability_system_builder_snr_Sonar_runner=E:\sonar-runner-2.3
bamboo_capability_system_builder_snr_Sonar_runners=E:\sonar-runner-2.3
我认为 MSBuild.SonarQube.Runner 中存在错误,因为它应该检查密钥是否已包含在此函数中
at SonarQube.Common.ProcessRunner.SetEnvironmentVariables(ProcessStartInfo psi, IDictionary`2 envVariables, ILogger logger) in c:\Users\dinesh\Desktop\sonarsource\sonar-msbuild-runner\SonarQube.Common\ProcessRunner.cs:line 151
作为快速解决方法,我决定在我的 bamboo 脚本中将两个变量之一设置为 null:
set bamboo_capability_system_builder_snr_Sonar_runner=
在 Windows 上,环境变量不区分大小写。 出于某种原因,您试图定义两者:
- bamboo_capability_system_builder_snr_Sonar_Runner
- bamboo_capability_system_builder_snr_Sonar_runner
.NET 框架对此没有很好的支持,请参阅: https://github.com/dotnet/corefx/blob/master/src/System.Diagnostics.Process/src/System/Diagnostics/ProcessStartInfo.cs#L97
当存在具有多个大小写的相同环境变量时,对 ProcessStartInfo.Environment
的任何调用都会导致您看到的失败。
所以 - 也许这需要在 CoreFX(.NET Framework)中修复 - 但我认为不需要更改 MSBuild SonarQube Runner 本身。
另一个修复是让 Bamboo 不要多次定义同一个环境变量。例如,如果您在 foo
已定义时尝试定义 FOO
,则用于设置环境变量的 Windows 用户界面会覆盖该值。