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
121 stars 88 forks source link

NullPointerException while scanning personal projects #264

Closed jmini closed 7 months ago

jmini commented 1 year ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.375.1 OS: Linux - 5.13.19-2-MANJARO --- ace-editor:1.1 ant:481.v7b_09e538fcca antisamy-markup-formatter:155.v795fb_8702324 apache-httpcomponents-client-4-api:4.5.13-138.v4e7d9a_7b_a_e61 bootstrap5-api:5.2.1-3 bouncycastle-api:2.26 branch-api:2.1051.v9985666b_f6cc build-timeout:1.28 caffeine-api:2.9.3-65.v6a_47d0f4d1fe checks-api:1.8.1 cloudbees-folder:6.800.v71307ca_b_986b command-launcher:90.v669d7ccb_7c31 commons-lang3-api:3.12.0-36.vd97de6465d5b_ commons-text-api:1.10.0-27.vb_fa_3896786a_7 credentials:1214.v1de940103927 credentials-binding:523.vd859a_4b_122e6 display-url-api:2.3.7 durable-task:503.v57154d18d478 echarts-api:5.4.0-1 email-ext:2.93 font-awesome-api:6.2.1-1 git:5.0.0 git-client:4.0.0 github:1.36.1 github-api:1.303-400.v35c2d8258028 github-branch-source:1696.v3a_7603564d04 gitlab-api:5.0.1-78.v47a_45b_9f78b_7 gitlab-branch-source:644.va_a_66886e07b_5 gradle:2.2 handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 instance-identity:142.v04572ca_5b_265 ionicons-api:31.v4757b_6987003 jackson2-api:2.14.1-313.v504cdd45c18b jakarta-activation-api:2.0.1-2 jakarta-mail-api:2.0.1-2 javax-activation-api:1.2.0-5 javax-mail-api:1.6.2-8 jaxb:2.3.7-1 jdk-tool:63.v62d2fd4b_4793 jersey2-api:2.38-1 jjwt-api:0.11.5-77.v646c772fddb_0 jquery3-api:3.6.1-2 jsch:0.1.55.61.va_e9ee26616e7 junit:1166.va_436e268e972 ldap:2.12 mailer:438.v02c7f0a_12fa_4 matrix-auth:3.1.6 matrix-project:785.v06b_7f47b_c631 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 okhttp-api:4.9.3-108.v0feda04578cf pam-auth:1.10 pipeline-build-step:2.18 pipeline-github-lib:38.v445716ea_edda_ pipeline-graph-analysis:195.v5812d95a_a_2f9 pipeline-groovy-lib:629.vb_5627b_ee2104 pipeline-input-step:466.v6d0a_5df34f81 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-rest-api:2.28 pipeline-stage-step:296.v5f6908f017a_5 pipeline-stage-tags-metadata:2.2118.v31fd5b_9944b_5 pipeline-stage-view:2.28 plain-credentials:143.v1b_df8b_d3b_e48 plugin-util-api:2.20.0 popper2-api:2.11.6-2 resource-disposer:0.20 scm-api:631.v9143df5b_e4a_a script-security:1228.vd93135a_2fb_25 snakeyaml-api:1.33-90.v80dcb_3814d35 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 workflow-aggregator:590.v6a_d052e5a_a_b_5 workflow-api:1200.v8005c684b_a_c6 workflow-basic-steps:994.vd57e3ca_46d24 workflow-cps:3601.v9b_36a_d99e1cc 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 ```

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

Linux OS

Reproduction steps

Create a Personal Access Token with scope api (I am using gitlab.com but I think this is not relevant) Create a new "Organization Folder" Configure this project to scan your personal repositories (and not a group)

User URL https://gitlab.com/jmini

(since then I have

Expected Results

The repositories are found

Actual Results

NullPointerException while running "Scan GitLab Group Now"

[Fri Jan 06 13:51:03 CET 2023] Starting organization scan...
[Fri Jan 06 13:51:03 CET 2023] Updating actions...
User URL: [Jérémie Bresson](https://gitlab.com/jmini)
[Fri Jan 06 13:51:03 CET 2023] Consulting GitLab Group

Checking projects...
ERROR: [Fri Jan 06 13:51:04 CET 2023] Could not fetch sources from navigator io.jenkins.plugins.gitlabbranchsource.GitLabSCMNavigator@1d9cb17f
[Fri Jan 06 13:51:04 CET 2023] Finished organization scan. Scan took 0.76 sec
FATAL: Failed to recompute children of Jérémie Bresson
java.lang.NullPointerException
    at io.jenkins.plugins.gitlabbranchsource.GitLabSCMNavigator.visitSources(GitLabSCMNavigator.java:271)
    at jenkins.branch.OrganizationFolder.computeChildren(OrganizationFolder.java:536)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:278)
    at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:166)
    at jenkins.branch.OrganizationFolder$OrganizationScan.run(OrganizationFolder.java:918)
    at hudson.model.ResourceController.execute(ResourceController.java:107)
    at hudson.model.Executor.run(Executor.java:449)
Finished: FAILURE

The NPE is because of this line: https://github.com/jenkinsci/gitlab-branch-source-plugin/blob/aa66886e07b57d7b350c262114a68f0608712f25/src/main/java/io/jenkins/plugins/gitlabbranchsource/GitLabSCMNavigator.java#L271

p.getArchived() returns a Boolean and is obviously set to null

Anything else?

I am not sure how this can happen, because when I executed the same query against Gitlab using this jbang script:

script to call gitLabApi.getProjectApi().getUserProjects(..) ```java ///usr/bin/env jbang "$0" "$@" ; exit $? //JAVA 17 //DEPS org.gitlab4j:gitlab4j-api:5.0.1 import java.util.List; import org.gitlab4j.api.GitLabApi; import org.gitlab4j.api.models.Project; import org.gitlab4j.api.models.ProjectFilter; public class GitLabTest { private static final String URL = "https://gitlab.com"; private static final String TOKEN = "glpat-********************"; public static void main(String... args) throws Exception { GitLabApi gitLabApi = new GitLabApi(URL, TOKEN, null, null); List projects = gitLabApi.getProjectApi().getUserProjects("jmini", new ProjectFilter().withOwned(true)); System.out.println(projects); for (Project project : projects) { if (project.getArchived() == null) { System.out.println("Project with error:" + project); } } } } ```

All my projects have a value for project.getArchived(). So I am not sure how this NPE is possible.


My work-around is to use a group: https://gitlab.com/jmini-test-group

Instead of trying to import personal repositories.

jmini commented 1 year ago

I double check the request made from the Jenkins plugin to GitLab at this line: https://github.com/jenkinsci/gitlab-branch-source-plugin/blob/aa66886e07b57d7b350c262114a68f0608712f25/src/main/java/io/jenkins/plugins/gitlabbranchsource/GitLabSCMNavigator.java#L237-L238

In the returned JSON the archived attribute is correctly set: Screenshot of the HTTP request

So I can't explain why the value is null when you display the value of the java object: I have added this line right after the call to the Gitlab api:

System.out.println("XXXXXX:"+ projects);

And got this in the console: Screenshot of the java console