branchSources {
         branchSource {
           source {
             github {
               ...
               traits {
                 sshCheckoutTrait {
                   credentialsId(CHECKOUT_SSH_CREDENTIALS_ID)            
                }
              }
             }
           }
         }
       }
      

      Leads to:

      Found multiple extensions which provide method sshCheckoutTrait with arguments [test_seed$_run_closure1$_closure2$_closure3$_closure4$_closure5$_closure6$_closure7@47c1791b]: [[com.cloudbees.jenkins.plugins.bitbucket.SSHCheckoutTrait, org.jenkinsci.plugins.github_branch_source.SSHCheckoutTrait]]

       

          [JENKINS-53912] Unable to use SSHCheckoutTrait

          Timo Sand added a comment -

          I have the same issue, any knowledge of how to circumvent?

          Timo Sand added a comment - I have the same issue, any knowledge of how to circumvent?

          Liam Newman added a comment -

          The code above is in jobDSL, correct?

          Liam Newman added a comment - The code above is in jobDSL, correct?

          Timo Sand added a comment -

          Timo Sand added a comment - bitwiseman Yes

          Timo Sand added a comment - - edited

          bitwiseman The same issue with trying to use

          originPullRequestDiscoveryTrait
          

          }

          Timo Sand added a comment - - edited bitwiseman The same issue with trying to use originPullRequestDiscoveryTrait }

          Timo Sand added a comment -

          I found a workaround, but it's Ugly as hell.

           organizationFolder('...') {
            organizations {
              ...
            }
            orphanedItemStrategy {
              ...
            }
            triggers {
              ...
            }
            configure {
              def traits = it / navigators / 'org.jenkinsci.plugins.github__branch__source.GitHubSCMNavigator' / traits
              traits << "org.jenkinsci.plugins.github__branch__source.SSHCheckoutTrait" {
                  credentialsId('...')
              }
              traits << 'org.jenkinsci.plugins.github_branch_source.OriginPullRequestDiscoveryTrait' {
                strategyId 1
              }
            }
          }
          

          Timo Sand added a comment - I found a workaround, but it's Ugly as hell. organizationFolder( '...' ) { organizations { ... } orphanedItemStrategy { ... } triggers { ... } configure { def traits = it / navigators / 'org.jenkinsci.plugins.github__branch__source.GitHubSCMNavigator' / traits traits << "org.jenkinsci.plugins.github__branch__source.SSHCheckoutTrait" { credentialsId( '...' ) } traits << 'org.jenkinsci.plugins.github_branch_source.OriginPullRequestDiscoveryTrait' { strategyId 1 } } }

          Liam Newman added a comment -

          deiga

          Yeah, JobDSL always has the configure block option. I agree it is ugly but in the short term it give you a work around (you could wrap that in method call and put it in a library to make it look cleaner).

          This sounds like something that would be better to fix/enhance in the JobDSL plugin. Maybe it could detect this from context? In the DSL,

          {sshCheckoutTrait}

          is a descendant of

          {github}

          , the package for which is

          {org.jenkinsci.plugins.github_branch_source}

          . If there a trait in the same package, it would seem reasonable to choose it instead of failing. Then all the branch source plugins would be fixed in one shot.

          Of course, I don't know enough about the JobDSL plugin to know if that would be difficult.

          Liam Newman added a comment - deiga Yeah, JobDSL always has the configure block option. I agree it is ugly but in the short term it give you a work around (you could wrap that in method call and put it in a library to make it look cleaner). This sounds like something that would be better to fix/enhance in the JobDSL plugin. Maybe it could detect this from context? In the DSL, {sshCheckoutTrait} is a descendant of {github} , the package for which is {org.jenkinsci.plugins.github_branch_source} . If there a trait in the same package, it would seem reasonable to choose it instead of failing. Then all the branch source plugins would be fixed in one shot. Of course, I don't know enough about the JobDSL plugin to know if that would be difficult.

            Unassigned Unassigned
            markus_heiden Markus Heiden
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: