Warnings ng plugin

Hi,

After upgrading the Warnings ng plugin, we are experiencing some troubles with seeding freestyle jobs using it.

The seed content related to the warnings ng plugin is:

def publisher_cpp(def context, String xmlpattern) {
    context.recordIssues {
        aggregatingResults(true)
        enabledForFailure(true)
        tools {
            cppCheck {
                pattern(xmlpattern)
            }
        }
        qualityGates {
            qualityGate {
                threshold(1)
                type('TOTAL_HIGH')
                unstable(false)
            }
            qualityGate {
                threshold(1)
                type('NEW_HIGH')
                unstable(false)
            }
        }
    }
}

APPS.each { Map config ->
  job("${PATH_APPS}/${config.prjname}") {
publishers {
      publisher_cpp(delegate, "myProjectsPath/${config.prjname}/${config.prjname}-cppcheck.xml")
    }
}

When processed by Jenkins, the following error is reported:

ERROR: (unknown source) No signature of method: javaposse.jobdsl.dsl.helpers.publisher.PublisherContext.publisher_cpp() is applicable for argument types: (javaposse.jobdsl.dsl.helpers.publisher.PublisherContext, java.lang.String) values: [javaposse.jobdsl.dsl.helpers.publisher.PublisherContext@14263ba2, …]

I could narrow down the scope of research and determined that the definition of the qualityGates is at the origin of the problem.

Does one know about this issue and how to solve it?

Jenkins setup:

Jenkins: 2.452.3
OS: Linux - 5.15.0-113-generic
Java: 17.0.11 - Eclipse Adoptium (OpenJDK 64-Bit Server VM)

analysis-model-api:12.3.3
ant:497.v94e7d9fffa_b_9
antisamy-markup-formatter:162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api:4.5.14-208.v438351942757
apache-httpcomponents-client-5-api:5.3.1-110.v77252fb_d4da_5
asm-api:9.7-33.v4d23ef79fcc8
authentication-tokens:1.119.v50285141b_7e1
bitbucket:241.v6d24a_57f9359
blueocean:1.27.13
blueocean-bitbucket-pipeline:1.27.13
blueocean-commons:1.27.13
blueocean-config:1.27.13
blueocean-core-js:1.27.13
blueocean-dashboard:1.27.13
blueocean-display-url:2.4.3
blueocean-events:1.27.13
blueocean-git-pipeline:1.27.13
blueocean-github-pipeline:1.27.13
blueocean-i18n:1.27.13
blueocean-jwt:1.27.13
blueocean-personalization:1.27.13
blueocean-pipeline-api-impl:1.27.13
blueocean-pipeline-editor:1.27.13
blueocean-pipeline-scm-api:1.27.13
blueocean-rest:1.27.13
blueocean-rest-impl:1.27.13
blueocean-web:1.27.13
bootstrap5-api:5.3.3-1
bouncycastle-api:2.30.1.78.1-248.ve27176eb_46cb_
branch-api:2.1169.va_f810c56e895
build-name-setter:2.4.3
build-timeout:1.33
caffeine-api:3.1.8-133.v17b_1ff2e0599
checks-api:2.2.0
cloudbees-bitbucket-branch-source:888.v8e6d479a_1730
cloudbees-folder:6.928.v7c780211d66e
cobertura:1.17
code-coverage-api:4.99.0
commons-compress-api:1.26.1-2
commons-lang3-api:3.14.0-76.vda_5591261cfe
commons-text-api:1.12.0-119.v73ef73f2345d
copyartifact:746.vd2a_674fb_4f6f
coverage:1.16.1
credentials:1371.vfee6b_095f0a_3
credentials-binding:681.vf91669a_32e45
data-tables-api:2.0.8-1
display-url-api:2.204.vf6fddd8a_8b_e9
docker-commons:439.va_3cb_0a_6a_fb_29
docker-workflow:580.vc0c340686b_54
dtkit-api:3.0.2
durable-task:555.v6802fe0f0b_82
echarts-api:5.5.0-1
eddsa-api:0.3.0-4.v84c6f0f4969e
email-ext:1814.v404722f34263
favorite:2.218.vd60382506538
font-awesome-api:6.5.2-1
forensics-api:2.4.0
git:5.2.2
git-client:5.0.0
github:1.39.0
github-api:1.318-461.v7a_c09c9fa_d63
github-branch-source:1789.v5b_0c0cea_18c3
gitlab-plugin:1.8.1
gradle:2.12
gson-api:2.11.0-41.v019fcf6125dc
handy-uri-templates-2-api:2.1.8-30.v7e777411b_148
htmlpublisher:1.35
instance-identity:185.v303dc7c645f9
ionicons-api:74.v93d5eb_813d5f
jackson2-api:2.17.0-379.v02de8ec9f64c
jakarta-activation-api:2.1.3-1
jakarta-mail-api:2.1.3-1
javax-activation-api:1.2.0-7
javax-mail-api:1.6.2-10
jaxb:2.3.9-1
jenkins-design-language:1.27.13
jersey2-api:2.42-147.va_28a_44603b_d5
jjwt-api:0.11.5-112.ve82dfb_224b_a_d
job-dsl:1.87
joda-time-api:2.12.7-29.v5a_b_e3a_82269a_
jquery3-api:3.7.1-2
jsch:0.2.16-86.v42e010d9484b_
json-api:20240303-41.v94e11e6de726
json-path-api:2.9.0-58.v62e3e85b_a_655
junit:1265.v65b_14fa_f12f0
ldap:725.v3cb_b_711b_1a_ef
mailer:472.vf7c289a_4b_420
mapdb-api:1.0.9-40.v58107308b_7a_7
matrix-auth:3.2.2
matrix-project:832.va_66e270d2946
mercurial:1260.vdfb_723cdcc81
mina-sshd-api-common:2.13.1-117.v2f1a_b_66ff91d
mina-sshd-api-core:2.13.1-117.v2f1a_b_66ff91d
okhttp-api:4.11.0-172.vda_da_1feeb_c6e
pam-auth:1.11
pipeline-build-step:540.vb_e8849e1a_b_d8
pipeline-github-lib:61.v629f2cc41d83
pipeline-graph-analysis:216.vfd8b_ece330ca_
pipeline-groovy-lib:727.ve832a_9244dfa_
pipeline-input-step:495.ve9c153f6067b_
pipeline-milestone-step:119.vdfdc43fc3b_9a_
pipeline-model-api:2.2205.vc9522a_9d5711
pipeline-model-definition:2.2205.vc9522a_9d5711
pipeline-model-extensions:2.2205.vc9522a_9d5711
pipeline-rest-api:2.34
pipeline-stage-step:312.v8cd10304c27a_
pipeline-stage-tags-metadata:2.2205.vc9522a_9d5711
pipeline-stage-view:2.34
pipeline-utility-steps:2.17.0
plain-credentials:183.va_de8f1dd5a_2b_
plugin-usage-plugin:4.5
plugin-util-api:4.1.0
prism-api:1.29.0-15
pubsub-light:1.18
rebuild:332.va_1ee476d8f6d
resource-disposer:0.23
robot:3.5.2
scm-api:690.vfc8b_54395023
script-security:1341.va_2819b_414686
sidebar-link:2.4.1
snakeyaml-api:2.2-111.vc6598e30cc65
sse-gateway:1.27
ssh-credentials:337.v395d2403ccd4
ssh-slaves:2.973.v0fa_8c0dea_f9f
sshd:3.330.vc866a_8389b_58
structs:338.v848422169819
subversion:1269.v53185011cd9f
throttle-concurrents:2.14
timestamper:1.27
token-macro:400.v35420b_922dcb_
trilead-api:2.147.vb_73cc728a_32e
variant:60.v7290fc0eb_b_cd
warnings-ng:11.3.0
workflow-aggregator:600.vb_57cdd26fdd7
workflow-api:1316.v33eb_726c50b_a_
workflow-basic-steps:1058.vcb_fc1e3a_21a_9
workflow-cps:3908.vd6b_b_5a_a_54010
workflow-durable-task-step:1360.v82d13453da_a_f
workflow-job:1400.v7fd111b_ec82f
workflow-multibranch:783.787.v50539468395f
workflow-scm-step:427.v4ca_6512e7df1
workflow-step-api:678.v3ee58b_469476
workflow-support:920.v59f71ce16f04
ws-cleanup:0.46
xunit:3.1.4

The unstable boolean is not available anymore, see Warnings Plugin

criticality (optional)

When a quality gate has been missed, this property determines whether the result of the associated step or the overall build will be marked as unstable or failure. The following enum values are possible for freestyle jobs:

  • UNSTABLE
    Set the step and build status to unstable if the quality gate has been missed.
  • FAILURE
    Fail the step and build if the quality gate has been missed.

For Pipelines two additional fine-grained options are available, that allow setting the status of the step without touching the overall build status:

  • NOTE
    Set the step to unstable if the quality gate has been missed.
  • ERROR
    Fail the step if the quality gate has been missed.

The documentation still shows that Unstable is a boolean, so it’s confusing to me. Is the documentation only valid for pipelines and not for freestyle jobs?

image

If I try to simply comment out the line related to the UNSTABLE property in the .dsl file, the failure keeps the same.

The error you posted looks more like the publisher_cpp method that is defined at the beginning is not found due to non matching parameters.

I admit that the error message is confusing, your suggestion was also my initial suspicion. But I could confirm that this is not the root cause as commenting out the whole qualityGates structure makes the .dsl processing succeeding.

I think I found the error, in my tests quality gates are invoked with warningsQualityGate and not qualityGate: see test setup for JobDslITest

Please note that unstable has been marked as deprecated and will be removed in the next major release.

Your suggestion to use warningsQualityGate worked. What’s confusing is that when looking at the pipeline step documentation on the web, the qualityGates are not used the same as for freestyle jobs.
I’m wondering if this documentation is correct or not.

What is different? Can you please elaborate?

The doc for recordIssues found here: Warnings Plugin
shows this:
image

… see next post, I’m only allowed to post one picture per message…

Whereas the documentation found on the Job DSL Plugin API viewer is:

It looks identical. Or do you mean the extra object layer?

Yes, that’s somehow the extra object layer that is not well defined on the web. We see there that the qualityGates needs a list or array of nested objects, but there’s no indication that it shall be a WarningsQualityGate object and not a qualityGate. Also on the web, it’s not visible that the unstable boolean is deprecated.