Kebabbi
Kebabbi

Reputation: 174

Jenkins Pipelines: Why is CPS Global Lib not loading?

I'm following the tutorial on the pipeline library plugin. I made a repository containing the following files:

D:.
│   Test.groovy
│   
├───src
└───vars
        helloWorld.groovy

helloWorld.groovy contains:

def call(name){
    echo "Hello world, ${name}"
}

Test.groovy contains:

helloWorld("Joe")

I installed all the pipeline plugins, in particular workflow-cps-global-lib-plugin. Then I created a new pipeline job in which I load this repository and set the Script Path to Test.groovy. When I run this job I get the following error:

java.lang.NoSuchMethodError: No such DSL method 'helloWorld' found among [archive, bat, build, catchError, checkout, deleteDir, dir, echo, emailext, error, fileExists, git, input, isUnix, jiraComment, jiraIssueSelector, jiraSearch, load, mail, node, parallel, properties, pwd, readFile, readTrusted, retry, sh, sleep, stage, stash, step, svn, timeout, tool, unarchive, unstash, waitUntil, withEnv, wrap, writeFile, ws]

Why is the helloWorld step not defined? Here is my list of installed plugins: http://pastebin.com/xiMMub8J

Upvotes: 2

Views: 3176

Answers (2)

Kurt Madel
Kurt Madel

Reputation: 66

The Pipeline Global Library expects a Git push event to update the Jenkins embedded workflow-libs git repo.

A push triggers the UserDefinedGlobalVariableList.rebuild() method see: https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/src/main/java/org/jenkinsci/plugins/workflow/cps/global/UserDefinedGlobalVariableList.java

Here is a groovy script that pulls a GitHub repo into the Jenkins workflow-libs repos and then reloads it without a restart via:

//Get Pipeline Global Library Jenkins Extension that rebuilds global library on Git Push List extensions = ExtensionList.lookup(UserDefinedGlobalVariableList.class); extensions.get(0).rebuild() //may want to add a check here to make sure extensions isn't null

Upvotes: 5

mauro ferratello
mauro ferratello

Reputation: 11

Using the 2.8 version of Pipeline:Groovy plugin I found that if I update the groovy scripts under /vars/myscript.groovy doesn't work, but if I restart jenkins everything works fine. If I simply reload configuration from file, nothing happens.

So I think the scripts are instantiated as global functions only when jenkins start. (but maybe I'm wrong :) )

Upvotes: 1

Related Questions