Skip to end of metadata
Go to start of metadata

Plugin Information

View HP ALM Quality Center on the plugin site for more information.

Allows users to synchronize test results from Jenkins with HP ALM Quality Center.

Configuration 

Quality Center Connection

Job Configuration

User Interface Method

Pipeline Syntax Method

As of V1.4 this plugin support Jenkins pipeline syntax for job configuration using the 'qc' symbol. For example:

 

qc domain: 'DOMAIN', project: 'PROJECT', planFolder: 'Subject/Software/Cat 0/Unit Tests', labFolder: 'Software/Cat 0', userDefinedFields: 'user-01=Demonstration', failOnNoTestResults: false

Note that userDefinedFields and failOnNoTestResults are optional parameters that do not need to be specified unless required.
Synchronized Unit Tests

Test Plan

Test Lab

28 Comments

  1. Can anyone explain the criteria my job must meet or the activities it has to perform in order to synchronize test results? Like, do I have to produce a certain artifacts in a certain manner?

    1. Anthony, at this early version the plugin requires that you are enabling it on a Maven job as it consumes maven test results as its input. I'm hoping that version 2.0 of the plugin will allow you to instead specify artifacts such as surefire/junit/cppunit reports which will make it more capable. Also, I have only been able to test the plugin against ALM version 11 at this stage. 

      I'd very much appreciate it if you could let me know how you get along with the plugin and what version of ALM you are using it with so that I can begin to curate a list of supported versions.

      Also thanks for raising the credentials issue in JIRA. I think this is a great idea.

      Thanks,

      -Michael

  2. Hello,

    I am facing an issue using the plugin behind a proxy. Do I need to configure proxy for the plugin to work and how??

    I receive the following error:

    A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

    Stack tracejavax.servlet.ServletException: javax.ws.rs.ProcessingException: java.net.ConnectException: Connection timed out: connect

    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
    at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
    at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:49)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
    at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
    at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: javax.ws.rs.ProcessingException: java.net.ConnectException: Connection timed out: connect
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:229)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:667)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:664)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:399)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:303)
    at org.jenkinsci.plugins.qc.client.QualityCenter.login(QualityCenter.java:61)
    at org.jenkinsci.plugins.qc.QualityCenterIntegrationRecorder$QualityCenterIntegrationDescriptor.doTestConnection(QualityCenterIntegrationRecorder.java:369)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:320)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:163)
    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
    at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
    ... 58 more
    Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275)
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:932)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:321)
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227)
    ... 80 more

    1. Maged,

      Thanks for reporting this. I had not considered proxy support in this early version of the plugin. I've created the following issue to track this functionality and hopefully it will be picked up by a developer (or myself) soon. 

      Add Proxy Support to HP QLM Plugin

      1. Thank you for your feedback :)

        As a work around I set the proxy in the JVM for Jenkins and it worked fine

        java  -Dhttp.proxyHost=host -Dhttp.proxyPort=port -Dhttps.proxyHost=host -Dhttps.proxyPort=port -jar jenkins.war

  3. Hi, are you planning to support a plugin to latest Jenkins versions (2.6)?

    1. Dima,

       

      I'm in the process of releasing version 1.4 which should work versions of Jenkins 2.0 and upwards. It includes support for use in Jenkins pipeline as well.

      Stay tuned. Should have it release in the next few hours. 

      1. Cool. now it works.

        Is it possible to import HP QC test result to the jenkins build? So user could see relevant QC information on the jenkins build dashboard?

        1. Dima. I'm sure that it is possible but I don't have any plans to implement that in the near term just because of other work commitments.

        2. Also. I have just realised that the last release (1.4) has a nasty bug that results in multiple test sets being created for every build. My apologies. 
          I have just re-released the plugin at version 1.5.

  4. Hi,

    I configured the plugin and the test connection pass with success, When I'm trying to set a post-build step I get the below error:

    javax.ws.rs.NotAuthorizedException: HTTP 401 Authentication failed. Browser based integrations - to login append '?login-form-required=y' to the url you tried to access.
    	at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:950)
    	at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:855)
    	at org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:91)
    	at org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:705)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:701)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:417)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:313)
    	at org.jenkinsci.plugins.qc.client.QualityCenter.domains(QualityCenter.java:34)

    Does anyone know what to do? 

    I've double checked the URL and the credentials and all seems OK.

    1. Assaf this usually indicates that the URL is not pointing to the API endpoint. Make sure the URL ends with "/qcbin". Hope this helps.

      1. Hi,

        The URL ends with /qcbin and I managed to run commands with the URL using REST client.

        With the rest client I use:

        1. /qcbin/authentication-point/authenticate
        2. /qcbin/rest/site-session
        3. and the rest call - for example: /qcbin/rest/domains/CONTINUOUS_DELIVERY/projects/ReleaseAutomation/test-set-folders?query={name['Tar-Test-1']}

        Hereunder the configuration in Jenkins

         

        1. Very odd. Further suggestions:

          1. Ensure that the user you are specifying actually has the appropriate read/write permissions to be able to manipulate test sets and lab folders (remember authentication does not imply authorisation).
          2. Ensure that there is no reverse proxy service or filter between you and the server that is intercepting and possibly removing/manipulating session cookies.

          If either of these two things are not the culprit then I'm kind of out of ideas. What version of HP ALM are you using? 

          1. Hi,

             

            We are using ALM 12.1

            With my user, I can run a test and alter tests a test. I'm not aware that proxy exits (I can send REST calls to the ALM).

            I tried a clean browser and I still get the error.

            Thanks

            1. Hrmm.... From your stack trace it appears that the failing request occurs when attempting to list the domains. Specifically, when the resource '/qcbin/rest/domains' is queried. 

              The code immediately preceding this call however does perform a login.

              Are you able to manually authenticate and query that endpoint using a rest client? 

               

              1. Yes. I can. 

                Do you happen to know which rest call I can use to run a test in ALM? This also will resolve my issue - all I need is to be able send a REST call to run a test set

                1. Sorry Assaf I don't know how to do that off the top of my head. With that being said however, if running a test set is what you are after out of a Jenkins plugin then you are using the wrong one to start with!

                  This plugin will not run a test set. It will only create new test sets and runs from unit test results gathered from Jenkins. (sad) 

  5. Hi, we are having the same issue we configured the plugin and the test connection passed with success but When trying to set a post-build step getting the below error:

    A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

    Stack trace

    javax.ws.rs.NotAuthorizedException: HTTP 401 Authentication failed. Browser based integrations - to login append '?login-form-required=y' to the url you tried to access.
    	at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:950)
    	at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:855)
    	at org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:91)
    	at org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:705)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:701)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:417)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:313)
    	at org.jenkinsci.plugins.qc.client.QualityCenter.domains(QualityCenter.java:34)
    	at org.jenkinsci.plugins.qc.QualityCenterIntegrationRecorder$QualityCenterIntegrationDescriptor.doFillDomainItems(QualityCenterIntegrationRecorder.java:473)
  6. we also tried with the https://dev.pc.xx.com:8443/qcbin/?login-form-required=y parameters and successfully able to test the connection but getting this error in the post-build step.

    A problem occurred while processing the request. Please check our bug tracker to see if a similar problem has already been reported. If it is already reported, please vote and put a comment on it to let us gauge the impact of the problem. If you think this is a new issue, please file a new issue. When you file an issue, make sure to add the entire stack trace, along with the version of Jenkins and relevant plugins. The users list might be also useful in understanding what has happened.

    Stack trace

    org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=text/html; charset=ISO-8859-1, type=interface java.util.List, genericType=java.util.List<org.jenkinsci.plugins.qc.client.Schema$Domain>.
    	at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:230)
    	at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:154)
    	at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124)
    	at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:851)
    	at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:810)
    	at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:368)
    	at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:846)
    	at org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:91)
    	at org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:705)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:701)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:417)
    	at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:313)
    	at org.jenkinsci.plugins.qc.client.QualityCenter.domains(QualityCenter.java:34)
    	at org.jenkinsci.plugins.qc.QualityCenterIntegrationRecorder$QualityCenterIntegrationDescriptor.doFillDomainItems(QualityCenterIntegrationRecorder.java:473)
    	at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
    	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
    	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
    	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
    	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)
    	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
    	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
  7. can you please have a look and suggest

     

  8. Anil. Can you please let me know the exact version of your Jenkins server please? I will try and replicate on my end.

  9. Hi Michael we are using 2.73.2.1.

    Thanks,

    Anil.

  10. Hi Michael , 

     

    We have installed our plugin on the master with admin id , and we are having  a security lapse where the user is able to trigger any job. Can you suggest of any method we can consolidate the ways that this plugin triggers jobs to use a particular jenkins credentials or API key. Please let me know how we can fix this. 

     

    The Plugin is setup on the Jenkins machine with the Admin ID. Because of this, it has the ability to execute any of the jobs in Jenkins. We need a way to define which user the plugin should impersonate within Jenkins.

  11. Hi Michael, did you get a chance to checkout the error. Can you please suggest any solutions.

    Thanks,

    Anil.

  12. Anil,

     

    I've tested this against the Jenkins version you specify with our Quality Center instance (running QC ALM 11.0). I have not been able to reproduce the problem. (sad)

     

    -M

  13. Hi Michael, currently we are using HP ALM Quality Center Plugin(1.6). Do you think its a version compatability issue if so can you please recommend the prefered version.

    Thanks,

    Anil.

  14. Is there a way to parameterize the ALM connection password field?  We have hundreds of reusable builds and are forced to change ALM password every 8 weeks.