我一直在努力提高角色战略插件的表现,作为我的一部分谷歌夏季的代码项目.由于没有现成的方法来测量Jenkins插件的性能和进行基准测试,我在项目的第一阶段的工作是创建一个框架,使用可用的Jenkins实例在Jenkins插件必威国际有限公司中运行基准测试。为了让我们的工作轻松一点,我们选择了Java Microbenchmark Marness用于运行这些基准。这使我们能够可靠地测量我们的时间关键函数的性能,并有助于使Jenkins为每个人执行更快。必威国际有限公司
微基准测试框架最近在Jenkins单元测试工具中发布必威国际有限公司2.50.下面的博文展示了如何在插件中运行基准测试。
框架通过为JMH基准的每个分支启动临时Jenkins实例来运行,就像必威国际有限公司必威国际有限公司JenkinsRule
来自Jen必威国际有限公司kins测试线束。基准从junit测试中直接运行,允许您在飞行中失败,并轻松地从IDE运行基准,就像单位测试一样。您可以通过使用Java方法或使用Jenkins轻松配置基准测试必威国际有限公司Configuration-as-Code插件并将路径传递给YAML文件。
要从你的插件运行基准测试,你需要做以下事情:
将Jenkins版本的最低要求提高到2.60.3或以上必威国际有限公司
bump Plugin-POM到版本≥3.46或手动升级到Jenkins Test Harness≥2.51。必威国际有限公司
现在,要运行基准测试,您需要拥有一个包含一个的基准赛道@测试
所以它可以像JUnit测试一样运行。在测试方法内部,可以使用OptionsBuilder
由JMH提供以配置基准测试。例如:
民众类BenchmarkRunner{@测试民众空白runJmhBenchmarks ()抛出例外{ChainedOptionsBuilder选项=新的OptionsBuilder () .mode Mode.AverageTime .forks (2) 。结果("JMH-Report.Json.");//自动检测带有@JmhBenchmark注释的基准类新的BenchmarkFinder (getClass ()) .findBenchmarks(选项);新的跑步者(options.build ()) .run ();}}
现在,您可以编写您的第一个基准测试:
无需任何特殊设置
@jmhbenchmark.民众类JMHStateBenchmark.{民众静态类MyState扩展jmhbenchmarkstate {}@Benchmark民众空白基准(Mystate State){//基准代码在这里State.get必威国际有限公司jenkins()。SetSystemMessage("你好世界");}}
使用配置为代码
要将配置作为代码使用,除了上面的依赖项之外,还需要将以下内容添加到您的pom.xml
:
<依赖> Io.必威国际有限公司jenkins.< / groupId > configuration-as-code< / artifactId ><版本>1.21版本><可选>真的可选>< / >的依赖<依赖> Io.必威国际有限公司jenkins.< / groupId > configuration-as-code< / artifactId ><版本>1.21版本><分类>测试< /分类><范围>测试范围>< / >的依赖
现在配置基准测试与您的YAML文件的路径一样简单,并指定包含基准状态的类。
@jmhbenchmark.民众类SampleBenchmark{民众静态类MyState扩展CascJmhBenchmarkState {@nonnull.@Override受保护的字符串getResourcePath () {返回"config.yml";}@nonnull.@Override受保护的类<?> getEnclosingClass () {返回SampleBenchmark.class;}}@Benchmark民众空白benchmark(MyState state) {J必威国际有限公司enkins Jenkins = state. getjenkins ();// 必威国际有限公司Jenkins已经配置好,可以进行基准测试了。//您的基准代码进入...}}
更多样本
作为此项目的一部分,在角色策略插件中创建了一些基准,其中显示了配置各种情况的实例。你可以找到它们这里.
从Maven运行基准测试
为了方便地从Maven运行基准测试,已经创建了一个Maven概要文件来运行基准测试,并且可以从Plugin-POM 3.45版本开始使用。然后可以使用命令行运行基准测试mvn test -Dbenchmark
.
在ci.jenkins.io上运行基准测试必威国际有限公司
如果你有你的插件托管在ci.jenkins。必威国际有限公司. io,您可以轻松地直接从您的Jenkinsfile运行基准测试必威国际有限公司runBenchmarks ()
方法后buildPlugin ()
Step in your现在可以在必威国际有限公司詹金斯管道图书馆.这个函数还接受生成的JMH基准测试报告的路径作为可选参数,并归档基准测试结果。在拉请求构建中运行基准测试允许您不断监视给定更改的性能影响。例如,角色策略插件中的Jenkin必威国际有限公司sfile:
buildPlugin () runBenchmarks ('JMH-Report.Json.')
生成的基准报告(JSON格式)可以使用JMH报告插件或者通过将基准测试报告传递给JMH Visualier.网络服务。作为一个例子,这里是来自角色战略插件的一些基准的可视化报告:
通过一个小的上面看到的这些改进把请求到插件并展示了似乎似乎的变化甚至可以带来重大的性能改进。Microbenchmarks有助于找到这些热点并估计变化的影响。
自从BenchmarkRunner
上面的例子中的类名并不资格作为Maven Surefire插件的命名约定的测试,基准将不会干扰您的JUnit测试。
基准方法需要注释@Benchmark
为了jmh来检测它们。
属性自动查找包含基准的类BenchmarkFinder
当注释@jmhbenchmark.
.
对Jenkins实例的引用可以通过以下必威国际有限公司两种方式获得JmhBenchmarkState # g必威国际有限公司etJenkins ()
或通过必威国际有限公司jenkins.getInstance()
就像你会做的那样。
JmhBenchmarkState
提供了设置()
和拆除()
方法,可以根据基准测试的要求重写这些方法来配置Jenkins实例。必威国际有限公司
CI.Jenkins.IO上的基准构建目前是由于有限的必威国际有限公司可用性而令人作呕highmem
节点。
基准框架是在Jenkins Test Harness 2.50中提供的,建议使用版本必威国际有限公司2.51因为它包含了一些bug修复。
如果您有任何反馈,意见或疑问,请随时与我联系角色策略插件Gitter聊天或通过必威国际有限公司Jenkins开发者邮件列表.