| def call(body) { |
| // evaluate the body block, and collect configuration into the object |
| def config = [:] |
| body.resolveStrategy = Closure.DELEGATE_FIRST |
| body.delegate = config |
| body() |
| |
| def merge = config.withMerge ?: false |
| def wipe = config.withWipeOut ?: false |
| def targetDir = config.targetDir ?: "./" |
| def port = config.port ?: "29418" |
| |
| // default parameters |
| def scmExtensions = [ |
| [$class: 'CleanCheckout'], |
| [$class: 'RelativeTargetDirectory', relativeTargetDir: "${targetDir}"] |
| ] |
| |
| // https://issues.jenkins-ci.org/browse/JENKINS-6856 |
| if (merge) { |
| scmExtensions.add([$class: 'LocalBranch', localBranch: "${config.branch}"]) |
| } |
| // we need wipe workspace before checkout |
| if (wipe) { |
| scmExtensions.add([$class: 'WipeWorkspace']) |
| } |
| |
| checkout( |
| scm: [ |
| $class: 'GitSCM', |
| branches: [[name: "${config.branch}"]], |
| extensions: scmExtensions, |
| userRemoteConfigs: [[ |
| credentialsId: "${config.credentialsId}", |
| name: 'origin', |
| url: "ssh://${config.credentialsId}@${config.host}:${port}/${config.project}.git" |
| ]] |
| ] |
| ) |
| } |