jenkinsci / gitlab-branch-source-plugin

A Jenkins Plugin for GitLab Multibranch Pipeline jobs and Folder Organization
https://plugins.jenkins.io/gitlab-branch-source
MIT License
124 stars 94 forks source link

NullPointerException during Project Scan when "Discover merge requests from forks" is used with "Build MRs of forks that are not mirrors" #433

Open csrichter opened 4 months ago

csrichter commented 4 months ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.452.3 OS: Windows Server 2016 - 10.0 Java: 21.0.3 - Eclipse Adoptium (OpenJDK 64-Bit Server VM) --- active-directory:2.35 analysis-model-api:12.4.0 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 authorize-project:1.7.2 basic-branch-build-strategies:81.v05e333931c7d blueocean-autofavorite:1.2.5 blueocean-commons:1.27.14 blueocean-config:1.27.14 blueocean-core-js:1.27.14 blueocean-dashboard:1.27.14 blueocean-display-url:2.4.3 blueocean-events:1.27.14 blueocean-git-pipeline:1.27.14 blueocean-i18n:1.27.14 blueocean-jwt:1.27.14 blueocean-personalization:1.27.14 blueocean-pipeline-api-impl:1.27.14 blueocean-pipeline-editor:1.27.14 blueocean-pipeline-scm-api:1.27.14 blueocean-rest:1.27.14 blueocean-rest-impl:1.27.14 blueocean-web:1.27.14 bootstrap5-api:5.3.3-1 bouncycastle-api:2.30.1.78.1-248.ve27176eb_46cb_ branch-api:2.1169.va_f810c56e895 build-timeout:1.33 caffeine-api:3.1.8-133.v17b_1ff2e0599 checks-api:2.2.0 cloudbees-folder:6.928.v7c780211d66e command-launcher:107.v773860566e2e commons-lang3-api:3.14.0-76.vda_5591261cfe commons-text-api:1.12.0-119.v73ef73f2345d copyartifact:749.vfb_dca_a_9b_6549 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 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 external-monitor-job:215.v2e88e894db_f8 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 git-forensics:2.1.0 git-server:126.v0d945d8d2b_39 github:1.39.0 github-api:1.318-461.v7a_c09c9fa_d63 github-branch-source:1790.v5a_7859812c8d gitlab-api:5.3.0-91.v1f9a_fda_d654f gitlab-branch-source:704.vc7f1202d7e14 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.36 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 jdk-tool:73.vddf737284550 jenkins-design-language:1.27.14 jersey2-api:2.42-147.va_28a_44603b_d5 jjwt-api:0.11.5-112.ve82dfb_224b_a_d 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 lockable-resources:1255.vf48745da_35d0 mailer:472.vf7c289a_4b_420 mapdb-api:1.0.9-40.v58107308b_7a_7 mathworks-polyspace:1.0.11 matrix-auth:3.2.2 matrix-project:832.va_66e270d2946 metrics:4.2.21-451.vd51df8df52ec mina-sshd-api-common:2.13.1-117.v2f1a_b_66ff91d mina-sshd-api-core:2.13.1-117.v2f1a_b_66ff91d mstest:1.0.5 okhttp-api:4.11.0-172.vda_da_1feeb_c6e pam-auth:1.11 pipeline-build-step:540.vb_e8849e1a_b_d8 pipeline-graph-analysis:216.vfd8b_ece330ca_ pipeline-graph-view:313.v1322ce83d680 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 plain-credentials:183.va_de8f1dd5a_2b_ plot:2.1.12 plugin-util-api:4.1.0 powershell:2.1 prism-api:1.29.0-15 prometheus:773.v3b_62d8178eec pubsub-light:1.18 resource-disposer:0.23 role-strategy:727.vd344b_eec783d scm-api:690.vfc8b_54395023 scmskip:50.vfb_3a_f04242a_a_ scoring-load-balancer:111.v0ddf136a_5b_87 script-security:1341.va_2819b_414686 snakeyaml-api:2.2-111.vc6598e30cc65 sse-gateway:1.27 ssh-agent:367.vf9076cd4ee21 ssh-credentials:337.v395d2403ccd4 sshd:3.330.vc866a_8389b_58 structs:338.v848422169819 subversion:1269.v53185011cd9f timestamper:1.27 token-macro:400.v35420b_922dcb_ trilead-api:2.147.vb_73cc728a_32e variant:60.v7290fc0eb_b_cd view-job-filters:382.vdf2d5e3f02f0 warnings-ng:11.3.0 workflow-aggregator:600.vb_57cdd26fdd7 workflow-api:1322.v857eeeea_9902 workflow-basic-steps:1058.vcb_fc1e3a_21a_9 workflow-cps:3908.vd6b_b_5a_a_54010 workflow-cps-global-lib:612.v55f2f80781ef 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 ```

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

Windows Server 2016

Reproduction steps

  1. configure gitlab group with "Discover merge requests from origin" and "Discover merge requests from forks" with "Build MRs of forks that are not mirrors" enabled
  2. scan a GitLab group without any forks

Expected Results

jobs for "discover from origin" are created and "Discover merge requests from forks" is ignored, because there are no forks

Actual Results

exception in scan log:

ERROR: Failed to create or update a subproject sandbox/gitlab-eval
java.lang.NullPointerException: Cannot invoke "org.gitlab4j.api.models.Project.getId()" because the return value of "org.gitlab4j.api.models.Project.getForkedFromProject()" is null
    at io.jenkins.plugins.gitlabbranchsource.GitLabSCMSource.lambda$retrieve$1(GitLabSCMSource.java:355)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at io.jenkins.plugins.gitlabbranchsource.GitLabSCMSource.retrieve(GitLabSCMSource.java:362)
    at jenkins.scm.api.SCMSource._retrieve(SCMSource.java:372)
    at jenkins.scm.api.SCMSource.fetch(SCMSource.java:326)
    at jenkins.branch.MultiBranchProjectFactory$BySCMSourceCriteria.recognizes(MultiBranchProjectFactory.java:262)
    at jenkins.branch.OrganizationFolder$SCMSourceObserverImpl$1.recognizes(OrganizationFolder.java:1356)
    at jenkins.branch.OrganizationFolder$SCMSourceObserverImpl$1.complete(OrganizationFolder.java:1371)
    at jenkins.scm.api.trait.SCMNavigatorRequest.process(SCMNavigatorRequest.java:252)
    at jenkins.scm.api.trait.SCMNavigatorRequest.process(SCMNavigatorRequest.java:202)
    at io.jenkins.plugins.gitlabbranchsource.GitLabSCMNavigator.visitSources(GitLabSCMNavigator.java:309)
    at jenkins.branch.OrganizationFolder.computeChildren(OrganizationFolder.java:530)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:269)
    at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:167)
    at jenkins.branch.OrganizationFolder$OrganizationScan.run(OrganizationFolder.java:915)
    at hudson.model.ResourceController.execute(ResourceController.java:101)
    at hudson.model.Executor.run(Executor.java:442)

Anything else?

No response

Are you interested in contributing a fix?

No response

Turiok commented 2 months ago

Hi @csrichter ,

Can you close this issue if it's corrected?

csrichter commented 2 months ago

our workaround was to remove the fork relationship in GitLab so our repositories are no longer forks

i have not re-tested since applying this workaround

csrichter commented 2 months ago

i have re-tested now and run into the same NullPointerException

the behaviour configuration for the group is as follows: