隐式加载共享库
Loading a shared library implicitly
我想将一个全局库集成到我的构建流程中。我写了一个基本功能
srv/core/jenkins/Checks.groovy:
package core.jenkins
class Checks implements Serializable {
def script
Checks(script) {
this.script = script
}
def fileExists(){
script.echo "File exists in the repo."
}
}
并且公开为全局变量
vars/fileExisits.groovy:
def call() {
new core.jenkins.Checks(this).fileExists()
}
在 Jenkins 中配置全局共享库设置时,我有以下设置:
现在在我的 jenkinsfile 中,我正在做这样的事情:
pipeline {
agent { label 'master' }
stages {
stage('Check for md files'){
steps {
sh 'echo hello'
script {
checks.fileExists()
}
}
}
}
}
这总是报错
groovy.lang.MissingPropertyException: No such property: checks for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at
为了让它工作,我必须将这些行添加到我的 Jenkinsfile 的顶部
import core.jenkins.Checks
def checks = new Checks(this)
有没有办法让我从库中调用函数 fileExists
而不必总是添加以上两行?
只需替换:
checks.fileExists()
与:
fileExists()
实现def call()
方法并存储在vars/
文件夹中的所有Groovy脚本都可以通过脚本文件名触发。或者,如果您想保留 checks.fileExists()
语法,则需要创建 vars/checks.groovy
脚本文件并在其中实现 def fileExists()
方法。
我想将一个全局库集成到我的构建流程中。我写了一个基本功能
srv/core/jenkins/Checks.groovy:
package core.jenkins
class Checks implements Serializable {
def script
Checks(script) {
this.script = script
}
def fileExists(){
script.echo "File exists in the repo."
}
}
并且公开为全局变量
vars/fileExisits.groovy:
def call() {
new core.jenkins.Checks(this).fileExists()
}
在 Jenkins 中配置全局共享库设置时,我有以下设置:
现在在我的 jenkinsfile 中,我正在做这样的事情:
pipeline {
agent { label 'master' }
stages {
stage('Check for md files'){
steps {
sh 'echo hello'
script {
checks.fileExists()
}
}
}
}
}
这总是报错
groovy.lang.MissingPropertyException: No such property: checks for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at
为了让它工作,我必须将这些行添加到我的 Jenkinsfile 的顶部
import core.jenkins.Checks
def checks = new Checks(this)
有没有办法让我从库中调用函数 fileExists
而不必总是添加以上两行?
只需替换:
checks.fileExists()
与:
fileExists()
实现def call()
方法并存储在vars/
文件夹中的所有Groovy脚本都可以通过脚本文件名触发。或者,如果您想保留 checks.fileExists()
语法,则需要创建 vars/checks.groovy
脚本文件并在其中实现 def fileExists()
方法。