5

I have a seed job using the plugin Jenkins Job DSL. I also have a shared library.

I have tried using the @Library annotation to load the script and the library method. It cannot find the annotation and using library yields the following error:

No signature of method: simple_pipeline.library() is applicable for argument types: (java.lang.String) values: [platform-engineering-library@master]

How do I load a Jenkins Shared Library in a Jenkins Job DSL seed?

1
  • Which solution work for you ?
    – Nilesh
    Commented Jan 6, 2022 at 2:58

4 Answers 4

4

It's possible to use jobDSL from Pipeline. (Im using multibranch pipeline as it allows to configure pipelineTriggers) You can configure your seed job to be a pipeline like this:

def gitCredentialsId      = 'github-jenkins'
def jobsRepoName          = 'https://github.com/my-jobs-repo.git'
def sharedLibraryRepoName = 'https://github.com/shared-library-repo.git'

properties([    
   pipelineTriggers([githubPush()])
])

pipeline {
    agent any
    stages{
        stage('Seed Job') {
            agent any
            steps {

                checkout([
                    $class: 'GitSCM', 
                    branches: [[name: '*/main']], 
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'shared-library']], 
                    submoduleCfg: [],
                    userRemoteConfigs: [[credentialsId:  gitCredentialsId, url: sharedLibraryRepoName ]]
                    ])

                git url: jobsRepoName, changelog: false, credentialsId: gitCredentialsId, poll: false, branch: 'main'
                jobDsl targets: 'jobs/**/*_job.groovy', additionalClasspath: 'shared-library/src'
            }
        }
    }
}

This way we can configure our seed job to checkout shared libraries repo into workspace subdirectory shared-library and specify additionalClasspath for jobDSL groovy scripts

So in your groovy scripts you can simply use import without @Library annotation

2
1

Setup pipeline name and default version (e.g. master) in "Global Pipeline Libraries" settings. Then use them in your Jenkinsfile as following

#!/usr/bin/env groovy
@Library('YourGlobalPipelineName@YourDefaultVersion') _

pipeline {

}
1
  • I'm not making a Jenkins pipeline. This is a job dsl seed script.
    – David West
    Commented Jun 19, 2020 at 14:55
0

There are two option

  1. Using jenkins global shared lib setting in gui see documation https://www.jenkins.io/doc/book/pipeline/shared-libraries/

  2. Importing shared library inside jenkins file similart like this follow this blog https://tomd.xyz/jenkins-shared-library/

    library identifier: 'mylibraryname@master',
         //'master' refers to a valid git-ref
         //'mylibraryname' can be any name you like
         retriever: modernSCM([
           $class: 'GitSCMSource',
           credentialsId: 'your-credentials-id',
           remote: 'https://git.yourcompany.com/yourrepo/private-library.git'
     ])
    
     pipeline {
         agent any
         stages {
             stage('Demo') {
                 steps {
                     echo 'Hello world'
                     yourCustomStep 'your_arg'
                 }
             }
         }
    

P.S. When using "@Library _" the this means importing all libraries

0

I've stumbled in this issue as well. I'm configuring all jobs via DSL but find the need to define constants in a shared-library that are shared with jobDSL and pipelines.

According to https://github.com/sheehan/job-dsl-gradle-example it seems that you could have your jobs specified in a location that is shared with the library, and hence access those files directly.

This is the solution I intend to try out. In the projects I'm working this makes sense. I have a git repo for each jenkins server and each jenkins server can read configurations from a single repo. Anything that is specific to that jenkins server is stored in the repo. Anything that is shared among different jenkins servers, we can simply configure different different jenkins servers to use other jenkins's git repo libraries.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.