jenkinsci / github-autostatus-plugin

Jenkins plugin to provide automatic status for multibranch jobs
https://plugins.jenkins.io/github-autostatus/
MIT License
52 stars 34 forks source link

Autostatus report to GitHub does not work in mixed pipelines #161

Open biolauri opened 1 year ago

biolauri commented 1 year ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.361.4 OS: Linux - 5.10.127+ --- Office-365-Connector:4.18.0 Parameterized-Remote-Trigger:3.1.6.3 ace-editor:1.1 active-directory:2.29 analysis-model-api:10.21.0 ansicolor:1.0.2 ant:481.v7b_09e538fcca antisamy-markup-formatter:155.v795fb_8702324 apache-httpcomponents-client-4-api:4.5.13-138.v4e7d9a_7b_a_e61 artifactory:3.17.4 authentication-tokens:1.4 badge:1.9.1 basic-branch-build-strategies:71.vc1421f89888e blackduck-detect:7.0.0 blueocean:1.26.0 blueocean-autofavorite:1.2.5 blueocean-bitbucket-pipeline:1.26.0 blueocean-commons:1.26.0 blueocean-config:1.26.0 blueocean-core-js:1.26.0 blueocean-dashboard:1.26.0 blueocean-display-url:2.4.1 blueocean-events:1.26.0 blueocean-git-pipeline:1.26.0 blueocean-github-pipeline:1.26.0 blueocean-i18n:1.26.0 blueocean-jwt:1.26.0 blueocean-personalization:1.26.0 blueocean-pipeline-api-impl:1.26.0 blueocean-pipeline-editor:1.26.0 blueocean-pipeline-scm-api:1.26.0 blueocean-rest:1.26.0 blueocean-rest-impl:1.26.0 blueocean-web:1.26.0 bootstrap4-api:4.6.0-5 bootstrap5-api:5.2.1-3 bouncycastle-api:2.26 branch-api:2.1051.v9985666b_f6cc build-user-vars-plugin:1.9 caffeine-api:2.9.3-65.v6a_47d0f4d1fe checkmarx:2022.4.3 checks-api:1.8.1 cloudbees-bitbucket-branch-source:791.vb_eea_a_476405b cloudbees-folder:6.758.vfd75d09eea_a_1 cobertura:1.17 code-coverage-api:3.4.1 command-launcher:90.v669d7ccb_7c31 commons-httpclient3-api:3.1-3 commons-lang3-api:3.12.0-36.vd97de6465d5b_ commons-text-api:1.10.0-27.vb_fa_3896786a_7 config-file-provider:3.11.1 configuration-as-code:1569.vb_72405b_80249 copyartifact:1.48 credentials:1189.vf61b_a_5e2f62e credentials-binding:523.vd859a_4b_122e6 dashboard-view:2.466.vdfefd95a_b_f8d data-tables-api:1.12.1-4 dependency-check-jenkins-plugin:5.2.1 disk-usage:0.28 display-url-api:2.3.7 docker-build-step:2.9 docker-commons:1.21 docker-java-api:3.2.13-37.vf3411c9828b9 docker-plugin:1.2.10 docker-workflow:563.vd5d2e5c4007f durable-task:503.v57154d18d478 echarts-api:5.4.0-1 email-ext:2.92 embeddable-build-status:312.vf2de01b_051d0 extended-read-permission:3.2 external-monitor-job:203.v683c09d993b_9 favorite:2.4.1 font-awesome-api:6.2.1-1 forensics-api:1.17.0 git:4.14.3 git-client:3.13.1 git-server:99.va_0826a_b_cdfa_d github:1.36.0 github-api:1.303-400.v35c2d8258028 github-autostatus:3.6.2 github-branch-source:1696.v3a_7603564d04 github-checks:1.0.19 github-oauth:0.39 google-oauth-plugin:1.0.7 gradle:2.2 groovy-postbuild:2.5 h2-api:1.4.199 handlebars:3.0.8 handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 htmlpublisher:1.31 http_request:1.16 influxdb:3.4 instance-identity:142.v04572ca_5b_265 ionicons-api:31.v4757b_6987003 ivy:2.4 jackson2-api:2.14.1-313.v504cdd45c18b jacoco:3.3.2 jakarta-activation-api:2.0.1-2 jakarta-mail-api:2.0.1-2 javadoc:226.v71211feb_e7e9 javax-activation-api:1.2.0-5 javax-mail-api:1.6.2-8 jaxb:2.3.7-1 jdk-tool:63.v62d2fd4b_4793 jenkins-design-language:1.26.0 jersey2-api:2.37-1 jira:3.8 jjwt-api:0.11.5-77.v646c772fddb_0 jnr-posix-api:3.1.16-1 job-dsl:1.81 jquery-detached:1.2.1 jquery3-api:3.6.1-2 jsch:0.1.55.61.va_e9ee26616e7 junit:1166.va_436e268e972 kubernetes:3743.v1fa_4c724c3b_7 kubernetes-client-api:5.12.2-193.v26a_6078f65a_9 kubernetes-credentials:0.9.0 ldap:2.12 lockable-resources:1102.vde5663d777cf mailer:438.v02c7f0a_12fa_4 mask-passwords:3.3 matrix-auth:3.1.6 matrix-project:785.v06b_7f47b_c631 maven-plugin:3.20 mercurial:1260.vdfb_723cdcc81 metrics:4.2.13-420.vea_2f17932dd6 mina-sshd-api-common:2.9.2-50.va_0e1f42659a_a mina-sshd-api-core:2.9.2-50.va_0e1f42659a_a momentjs:1.1.1 nodejs:1.5.1 oauth-credentials:0.5 okhttp-api:4.9.3-108.v0feda04578cf pam-auth:1.10 performance:3.20 pipeline-build-step:2.18 pipeline-github:2.8-138.d766e30bb08b pipeline-githubnotify-step:49.vf37bf92d2bc8 pipeline-graph-analysis:195.v5812d95a_a_2f9 pipeline-groovy-lib:629.vb_5627b_ee2104 pipeline-input-step:466.v6d0a_5df34f81 pipeline-maven:1239.v08f725b_927d9 pipeline-milestone-step:101.vd572fef9d926 pipeline-model-api:2.2118.v31fd5b_9944b_5 pipeline-model-definition:2.2118.v31fd5b_9944b_5 pipeline-model-extensions:2.2118.v31fd5b_9944b_5 pipeline-npm:0.9.2 pipeline-rest-api:2.28 pipeline-stage-step:296.v5f6908f017a_5 pipeline-stage-tags-metadata:2.2118.v31fd5b_9944b_5 pipeline-stage-view:2.28 pipeline-utility-steps:2.14.0 plain-credentials:139.ved2b_9cf7587b plugin-util-api:2.20.0 popper-api:1.16.1-3 popper2-api:2.11.6-2 prism-api:1.29.0-2 pubsub-light:1.17 rebuild:1.34 resource-disposer:0.20 robot:3.3.0 saferestart:0.7 saml:4.385.v4dea_91565e9d scm-api:631.v9143df5b_e4a_a script-security:1228.vd93135a_2fb_25 selenium:3.141.59 sidebar-link:2.2.0 simple-theme-plugin:136.v23a_15f86c53d slack:631.v40deea_40323b snakeyaml-api:1.33-90.v80dcb_3814d35 sonar:2.15 sse-gateway:1.26 ssh-agent:295.v9ca_a_1c7cc3a_a_ ssh-credentials:305.v8f4381501156 ssh-slaves:2.854.v7fd446b_337c9 sshd:3.275.v9e17c10f2571 structs:324.va_f5d6774f3a_d timestamper:1.21 token-macro:321.vd7cc1f2a_52c8 trilead-api:2.84.v72119de229b_7 variant:59.vf075fe829ccb warnings-ng:9.22.0 webhook-step:173.vfa_b_93560b_977 windows-slaves:1.8.1 workflow-aggregator:590.v6a_d052e5a_a_b_5 workflow-api:1200.v8005c684b_a_c6 workflow-basic-steps:994.vd57e3ca_46d24 workflow-cps:3583.v4f58de0d78d5 workflow-durable-task-step:1217.v38306d8fa_b_5c workflow-job:1254.v3f64639b_11dd workflow-multibranch:716.vc692a_e52371b_ workflow-scm-step:400.v6b_89a_1317c9a_ workflow-step-api:639.v6eca_cd8c04a_a_ workflow-support:839.v35e2736cfd5c ws-cleanup:0.44 xvfb:1.2 ```

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

Only Linux - 5.10.127+.

Reproduction steps

  1. Create a Jenkinsfile with mixed Declarative & Scripted Pipeline, like
    pipeline {
     agent any
     stages {
       stage('Working stage') {
         steps {
           echo 'hello'
           echo 'goodbye'
         }
       }
       stage('Also working stage') {
         steps {
           script {
             stage('Non-working stage') {
               echo 'hello'
               echo 'goodbye'
             }
           }
         }
       }
     }
    }
  2. Activate Github Autostatus and set to report all stages to GitHub
  3. Run pipeline and wait for status reports on GitHub

Expected Results

The status of the following stages get reported to GitHub:

Actual Results

The status of the following stages get reported to GitHub:

The following stage is not reported to GitHub at all (neither pending, nor aborted nor success):

Anything else?

Jenkins itself can handle this very well: The old UI as well as Blue Ocean displays all stages very well and accurately and everything runs fine. Also, every stage and all steps are running fine.

The given pipeline file in reproduction steps is very basic and only a minimal reproduction. A use case for this is to have a Declarative Pipeline in a shared library which accepts some additional steps in a Closure. These additional steps must be Scripted Pipeline as it's not possible to share parts of a Declarative Pipeline (except from Steps). So my use case is that the part within the script step is actually a call of the given Closure.