See https://github.com/jenkinsci/workflow-cps-global-lib-plugin
Hope that helps! On Thu, May 26, 2016 at 12:37 AM Sverre Moe <[email protected]> wrote: > Yes, I came across it, but there is so little information about how to use > this and how it works. > The only thing I could find was this example here > https://github.com/jenkinsci/pipeline-examples/tree/master/global-library-examples/global-function > which I did not understand much of. > > // The call(body) method in any file in workflowLibs.git/vars is exposed > as a method with the same name as the file. > In any file in "workflowLibs.git/vars": Where is this location? > > Jenkinsfile > standardBuild { > environment = 'golang:1.5.0' > mainScript = ''' > go version > go build -v hello-world.go > ''' > postScript = ''' > ls -l > ./hello-world > ''' > } > > standardBuild.groovy > def call(body) { > def config = [:] > body.resolveStrategy = Closure.DELEGATE_FIRST > body.delegate = config > body() > stage 'checkout' > node { > checkout scm > stage 'main' > docker.image(config.environment).inside { > sh config.mainScript > } > stage 'post' > sh config.postScript > } > } > > What is body? > What does this do? > body.resolveStrategy = Closure.DELEGATE_FIRST > > From what I could understand it would seem standardBuild in Jenkinsfile > runs the code within call(body) and variables defined in this function in > the Jenkinsfile is accessible through body.delegate = config somewhat, but > why that way around and not config = body.delegate > > Why is there no def in front of variables in standardBuild? > def mainScript > > Where do I place the file standardBuild.groovy? > > > onsdag 25. mai 2016 22.54.29 UTC+2 skrev Baptiste Mathus følgende: > >> Did you possibly have a look at: >> https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Remote+Loader+Plugin >> or >> https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Shared+Groovy+Libraries+Plugin >> ? >> > 2016-05-24 16:00 GMT+02:00 Sverre Moe <[email protected]>: >> > What is the best design approach to keeping the Jenkinsfile small (little >>> build logic as possible)? >>> >>> Having close to a hundred projects and several branches on each, then >>> duplicating the pipeline logic within each Jenkinsfile would be a >>> maintenance nightmare. >>> >>> 1) >>> I could put the Pipeline script within Jenkins Scriptler >>> def packageInformation = load >>> '../../../scriptler/scripts/package-information.groovy' >>> packageInformation.init() >>> However I'm only able to access this on the master node >>> >>> 2) >>> I could have all the pipeline scripts within a jenkins-ci-scripts >>> project in Git. >>> stage 'Init' >>> git url: 'ssh://[email protected]/tools/jenkins-ci-scripts.git' >>> stash includes: '**/*.groovy', name: 'scripts' >>> >>> stage 'Checkout' >>> checkout scm >>> unstash scripts >>> def packageInformation = load >>> 'src/main/groovy/com/company/pipeline/package-information.groovy' >>> packageInformation.init() >>> I could then load the pipeline scripts from this stash. However I do not >>> like having to duplicate even this much in all my different Jenkinsfile. >>> >>> 3) >>> We have a inhouse build tool installed on all build machines. This >>> contains various build scripts, shell, python, ruby. >>> >>> >>> Example Jenkinsfile with little logic as possible >>> def branch = env.BUILD_BRANCH >>> def pipeline = load '/path/to/our/installed/build-pipeline.groovy' >>> parallel pipeline.nodes(branch) >>> >>> >>> My current Jenkins instance I comprised of Multi-configuration >>> jobs/projects (a jenkins job/project for each release branch). Having aprox >>> 8 release branches for each of the 60 projects. I am moving over to >>> Pipeline because of a complex workflow and because Multi-configuration does >>> not support a Prebuild-step that I need. >>> >> -- >>> You received this message because you are subscribed to the Google >>> Groups "Jenkins Users" group. >>> >> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >> >> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/jenkinsci-users/126d204a-f002-4838-a67e-96d02913f7df%40googlegroups.com >>> <https://groups.google.com/d/msgid/jenkinsci-users/126d204a-f002-4838-a67e-96d02913f7df%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "Jenkins Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jenkinsci-users/82ee1124-fd31-4107-9a33-77c9ff041271%40googlegroups.com > <https://groups.google.com/d/msgid/jenkinsci-users/82ee1124-fd31-4107-9a33-77c9ff041271%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Jenkins Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAN4CQ4ypqPgRiU8g2hDhj4oHKGy_HJuR%3DsC_O9JTBO74ni5Dcw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
