Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute "Publish TestNG results" step in Jenkinsfile

I'm trying to convert an existing set of Jenkins jobs to the new pipeline syntax, and I don't understand how to convert the post-build action "Publish TestNG results". The pipeline syntax page doesn't help as this specific action is not listed, so I've tried the following syntax:

step([$class: 'hudson.plugins.testng.Publisher', reportFilenamePattern: 'test-output/testng-results.xml'])

My assumption being that the class name would have to match the content of config.xml in the current configuration:

<hudson.plugins.testng.Publisher plugin="[email protected]">
  <reportFilenamePattern>test-output/testng-results.xml</reportFilenamePattern>
  <escapeTestDescp>true</escapeTestDescp>
  <escapeExceptionMsg>true</escapeExceptionMsg>
  <showFailedBuilds>false</showFailedBuilds>
  <unstableOnSkippedTests>false</unstableOnSkippedTests>
  <failureOnFailedTestConfig>false</failureOnFailedTestConfig>
</hudson.plugins.testng.Publisher>

However, an exception is being thrown when executing the statement :

java.lang.IllegalArgumentException: argument type mismatch
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
  at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:193)
  at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:104)
  at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:134)
  at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:113)
  at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
  at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
  at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
  at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
  at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
  at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
  at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
  at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
  at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
  at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:123)
  at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:15)
  at WorkflowScript.testBranch(WorkflowScript:71)

So my questions are :

  • is it possible to trigger any kind of post-job action using the 'step' statement ?
  • if yes, is there a rule of thumb to find the class name, and attribute names ?

In case that's relevant for the question, I'm running Jenkins 2.8 with all pipeline plugins up to date, and the full Jenkinsfile can be found on GitHub

like image 735
Gilles QUERRET Avatar asked Jun 09 '16 11:06

Gilles QUERRET


Video Answer


2 Answers

Publishing TestNG test results is now available in Pipelines. Use:

step([$class: 'Publisher'])

or with custom location of the result file:

step([$class: 'Publisher', reportFilenamePattern: '**/custom/testng-results.xml'])

According to this comment on Jenkins Jira adding to Pipeline snippet generator is pending.

(tested on Jenkins 2.9.13 and Pipeline plugin 2.4)

like image 184
user1053510 Avatar answered Oct 08 '22 16:10

user1053510


At this time, the TestNG Plugin isn't compatible with Pipelines. See JENKINS-27121

like image 4
Jason Swager Avatar answered Oct 08 '22 14:10

Jason Swager