DevOps Asked by David West on August 22, 2021
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?
There are two option
Using jenkins global shared lib setting in gui see documation https://www.jenkins.io/doc/book/pipeline/shared-libraries/
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
Answered by Galpha on August 22, 2021
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
Answered by Silk0vsky on August 22, 2021
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 {
}
Answered by chaks on August 22, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP