jenkinsci / build-timeout-plugin

Jenkins build-timeout plugin
https://plugins.jenkins.io/build-timeout/
31 stars 80 forks source link

GlobalTimeOutConfiguration.timeOutFor Fails for Some Plugins #97

Closed Bombe closed 2 years ago

Bombe commented 2 years ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.348 OS: Linux - 4.4.0-98-generic --- Parameterized-Remote-Trigger:3.1.6.3 ace-editor:1.1 additional-metrics:45.vc0cdf94c7d5b_ ant:475.vf34069fef73c antisamy-markup-formatter:2.7 apache-httpcomponents-client-4-api:4.5.13-138.v4e7d9a_7b_a_e61 authentication-tokens:1.4 blueocean:1.25.6 blueocean-autofavorite:1.2.5 blueocean-bitbucket-pipeline:1.25.6 blueocean-commons:1.25.6 blueocean-config:1.25.6 blueocean-core-js:1.25.6 blueocean-dashboard:1.25.6 blueocean-display-url:2.4.1 blueocean-events:1.25.6 blueocean-git-pipeline:1.25.6 blueocean-github-pipeline:1.25.6 blueocean-i18n:1.25.6 blueocean-jira:1.25.6 blueocean-jwt:1.25.6 blueocean-personalization:1.25.6 blueocean-pipeline-api-impl:1.25.6 blueocean-pipeline-editor:1.25.6 blueocean-pipeline-scm-api:1.25.6 blueocean-rest:1.25.6 blueocean-rest-impl:1.25.6 blueocean-web:1.25.6 bootstrap4-api:4.6.0-5 bootstrap5-api:5.2.0-3 bouncycastle-api:2.26 branch-api:2.1046.v0ca_37783ecc5 build-timeout:1.21 build-token-root:151.va_e52fe3215fc caffeine-api:2.9.3-65.v6a_47d0f4d1fe checks-api:1.7.5 cloudbees-bitbucket-branch-source:785.ve724eb_44e286 cloudbees-folder:6.740.ve4f4ffa_dea_54 command-launcher:84.v4a_97f2027398 commons-lang3-api:3.12.0-36.vd97de6465d5b_ conditional-buildstep:1.4.2 config-file-provider:3.11.1 copyartifact:1.47 credentials:1139.veb_9579fca_33b_ credentials-binding:523.vd859a_4b_122e6 custom-job-icon:0.2 cvs:2.19.1 dashboard-view:2.447.vda_124dd35f11 display-url-api:2.3.6 docker-commons:1.19 docker-workflow:521.v1a_a_dd2073b_2e durable-task:500.v8927d9fd99d8 echarts-api:5.3.3-1 external-monitor-job:192.ve979ca_8b_3ccd favorite:2.4.1 font-awesome-api:6.1.2-1 ghprb:1.42.2 git:4.11.5 git-client:3.11.2 git-parameter:0.9.17 git-server:1.11 github:1.34.5 github-api:1.303-400.v35c2d8258028 github-branch-source:1687.v7618247e672d gradle:1.39.4 greenballs:1.15.1 handlebars:3.0.8 handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 htmlpublisher:1.30 jackson2-api:2.13.3-285.vc03c0256d517 jacoco:3.3.2 jakarta-activation-api:2.0.1-1 jakarta-mail-api:2.0.1-1 javadoc:226.v71211feb_e7e9 javax-activation-api:1.2.0-4 javax-mail-api:1.6.2-7 jaxb:2.3.6-1 jdk-tool:55.v1b_32b_6ca_f9ca jenkins-design-language:1.25.6 jersey2-api:2.36-2 jira:3.8 jjwt-api:0.11.5-77.v646c772fddb_0 jnr-posix-api:3.1.15-1 jquery:1.12.4-1 jquery-detached:1.2.1 jquery3-api:3.6.0-4 jsch:0.1.55.61.va_e9ee26616e7 junit:1119.1121.vc43d0fc45561 ldap:2.12 lockable-resources:2.16 mailer:435.v79ef3972b_5c7 mapdb-api:1.0.9-28.vf251ce40855d matrix-auth:3.1.5 matrix-project:772.v494f19991984 maven-plugin:3.19 mercurial:2.16.2 mina-sshd-api-common:2.8.0-36.v8e25ce90d4b_1 mina-sshd-api-core:2.8.0-36.v8e25ce90d4b_1 momentjs:1.1.1 okhttp-api:4.9.3-108.v0feda04578cf pam-auth:1.10 parameterized-trigger:2.45 pipeline-build-step:2.18 pipeline-graph-analysis:195.v5812d95a_a_2f9 pipeline-groovy-lib:612.v84da_9c54906d pipeline-input-step:449.v77f0e8b_845c4 pipeline-milestone-step:101.vd572fef9d926 pipeline-model-api:2.2114.v2654ca_721309 pipeline-model-definition:2.2114.v2654ca_721309 pipeline-model-extensions:2.2114.v2654ca_721309 pipeline-rest-api:2.24 pipeline-stage-step:293.v200037eefcd5 pipeline-stage-tags-metadata:2.2114.v2654ca_721309 pipeline-stage-view:2.24 pitmutation:1.0-18 plain-credentials:139.ved2b_9cf7587b plugin-util-api:2.17.0 popper-api:1.16.1-3 popper2-api:2.11.6-1 project-build-times:1.2.1 promoted-builds:881.vb_72da_69ffca_1 publish-over:0.22 publish-over-ssh:1.24 pubsub-light:1.16 rebuild:1.34 resource-disposer:0.19 run-condition:1.5 scm-api:621.vda_a_b_055e58f7 script-security:1175.v4b_d517d6db_f0 simple-theme-plugin:103.va_161d09c38c7 sloccount:1.26 snakeyaml-api:1.30.2-76.vc104f7ce9870 sse-gateway:1.25 ssh-agent:295.v9ca_a_1c7cc3a_a_ ssh-credentials:295.vced876c18eb_4 ssh-slaves:1.834.v622da_57f702c sshd:3.242.va_db_9da_b_26a_c3 structs:324.va_f5d6774f3a_d subversion:2.16.0 timestamper:1.18 token-macro:308.v4f2b_ed62b_b_16 translation:1.16 trilead-api:1.67.vc3938a_35172f uithemes:2.1.1 variant:59.vf075fe829ccb windows-slaves:1.8.1 workflow-aggregator:590.v6a_d052e5a_a_b_5 workflow-api:1192.v2d0deb_19d212 workflow-basic-steps:991.v43d80fea_ff66 workflow-cps:2759.v87459c4eea_ca_ workflow-durable-task-step:1199.v02b_9244f8064 workflow-job:1207.ve6191ff089f8 workflow-multibranch:716.vc692a_e52371b_ workflow-scm-step:400.v6b_89a_1317c9a_ workflow-step-api:639.v6eca_cd8c04a_a_ workflow-support:838.va_3a_087b_4055b ws-cleanup:0.42 ```

What Operating System are you using (both controller, and any agents involved in the problem)?

Linux

Reproduction steps

  1. Set up a promotion for a project, using the Promoted Builds plugin.
  2. Promote a build.

Expected Results

The promotion is executed.

Actual Results

The promotion is not executed. The console contains an exception with a stack trace:

FATAL: class hudson.plugins.promoted_builds.PromotionProcess cannot be cast to class hudson.model.Project (hudson.plugins.promoted_builds.PromotionProcess is in unnamed module of loader jenkins.util.URLClassLoader2 @1a5fcf8; hudson.model.Project is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @313b2ea6)
java.lang.ClassCastException: class hudson.plugins.promoted_builds.PromotionProcess cannot be cast to class hudson.model.Project (hudson.plugins.promoted_builds.PromotionProcess is in unnamed module of loader jenkins.util.URLClassLoader2 @1a5fcf8; hudson.model.Project is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @313b2ea6)
    at hudson.plugins.build_timeout.global.GlobalTimeOutConfiguration.timeOutFor(GlobalTimeOutConfiguration.java:88)
    at hudson.plugins.build_timeout.global.GlobalTimeOutRunListener.setUpEnvironment(GlobalTimeOutRunListener.java:43)
    at hudson.model.AbstractBuild$AbstractBuildExecution.createLauncher(AbstractBuild.java:615)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:483)
    at hudson.model.Run.execute(Run.java:1897)
    at hudson.model.Run.run(Run.java:1851)
    at hudson.plugins.promoted_builds.Promotion.run(Promotion.java:317)
    at hudson.model.ResourceController.execute(ResourceController.java:101)
    at hudson.model.Executor.run(Executor.java:442)

Anything else?

Apparently, some projects are not actually projects…

https://github.com/jenkinsci/promoted-builds-plugin/blob/d3e416119f30d0f65c2f2c153d3fde37bc90a598/src/main/java/hudson/plugins/promoted_builds/PromotionProcess.java

PromotionProcess inherits from AbstractProject which is not a Project. However, GlobalTimeOutConfiguration expects every project to actually implement Project.

Downgrading the Build Timeout plugin to 1.21 makes the promotion work again.

krisstern commented 2 years ago

Thanks for reporting this @Bombe! I think it was an oversight since the tests weren't able to catch this kind of failure. Let me see what we can do at this stage to patch release 1.22.

krisstern commented 2 years ago

PR #98 has been opened to address the issue. Hopefully I will able to issue a new release within the next few hours.

krisstern commented 1 year ago

HI @Bombe I am adding code to the plugin so that there will not be any global timeout for any project that inherits from the AbstractProject class, so the feature will not work for any such projects anymore. Hopefully this will not be an issue for your case.