Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-70984

Unable to clone repository when pr author has no push or admin permission


    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor

      After https://github.com/jenkinsci/github-branch-source-plugin/pull/527 was merged and https://issues.jenkins.io/browse/JENKINS-62220 was closed, I tried to change credential config and delete organization name config in credential setting, hoping the plugins can automatically set it during build.


      At first it worked well, for repo that user has admin or push permission, everything worked, repo can be cloned, github checks can be published.


      But if the pr author does not have admin or push permission.


      Started by user 111
      17:03:48 Connecting to https://github.intra.xxx.com/api/v3 using ghe github app sa-jenkins
      Connecting to https://github.intra.xxx.com/api/v3 to check permissions of obtain list of xxx for playground/hello-world
      Loading trusted files from base branch master at 6bafc2571f9e40ad62143bea3ea63f7b36c351c2 rather than 457c9f3248479a59364b08a5a8e4558859dd63ec
      java.lang.IllegalArgumentException: Found multiple installations for GitHub app ID 9 but none match credential owner "". Set the right owner in the credential advanced options
      	at org.jenkinsci.plugins.github_branch_source.GitHubAppCredentials.lambda$generateAppInstallationToken$1(GitHubAppCredentials.java:249)
      	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
      	at org.jenkinsci.plugins.github_branch_source.GitHubAppCredentials.generateAppInstallationToken(GitHubAppCredentials.java:246)
      	at org.jenkinsci.plugins.github_branch_source.GitHubAppCredentials.getToken(GitHubAppCredentials.java:298)
      	at org.jenkinsci.plugins.github_branch_source.GitHubAppCredentials.getPassword(GitHubAppCredentials.java:327)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.createPasswordFile(CliGitAPIImpl.java:2453)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:2067)
      	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:623)
      	at jenkins.plugins.git.GitSCMFileSystem$BuilderImpl.build(GitSCMFileSystem.java:451)
      	at jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:316)
      	at org.jenkinsci.plugins.workflow.multibranch.SCMBinder.create(SCMBinder.java:104)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:312)
      	at hudson.model.ResourceController.execute(ResourceController.java:107)
      	at hudson.model.Executor.run(Executor.java:449) 

      I tried to ananlyse the backtrace but I cannot find anything valuable.


      The build steps are as follows:
      1. Create a build using the Multibranch plugin.
      2. Determine the required builder based on the selected SCMSource and revision.
      3. Call the build function of the selected builder.

      There are two current issues:
      1. Why was the build method within the GitHubSCMFileSystem in the Github-branch-source plugin not selected when choosing a builder, considering that this method can correctly select credentials?
      2. Why does the branch build work correctly, or when the PR author has permission, the build works correctly? Is everything working correctly, or is there another reason?

      The solution to the first issue could be to modify the git-plugin by changing the supports method and removing support for AbstractGitSCMSource objects (as shown in lines 274-275 of GitSCMFileSystem.java), theoretically allowing for correct selection of GitHubSCMFileSystem.

      Regarding the second issue, I am unable to understand it. Upon reviewing the code, the paths taken for builds with or without permission for a PR are the same, and the SCM is also identical, with the only difference being the head revision.


            Unassigned Unassigned
            leo_quote Leo Quote
            0 Vote for this issue
            2 Start watching this issue