如何在Jenkins声明性管道中的导入的groovy脚本中使用@Library?
我有以下内容:
- 作为全球描述共享库创建这里。没什么特别的,
vars
文件夹中的一个脚本名为deleteFile.groovy
,可以尝试-工作。图书馆被称为myOneLib
- 名为
firstPipe.groovy
@Library('myOneLib') _ def execute(String zCmakeListsPath){
stage('some kind of stage 2') {
echo "Hello from stage 1 with " + zCmakeListsPath
echo "var attempt ${env.mySrcDir}"
}
stage('second stage'){
echo "and one from stage 2"
echo "param was " + zCmakeListsPath
echo "var attempt ${env.myBuildDir}"
//call function from global lib
deleteFile 'for 3rd party global library now'
}
}
return this
caller.groovy
调用的管道脚本正在调用firstPipe.groovy
pipeline { agent any
environment {
myBuildDir = "thisShoulbBeBuild"
mySrcDir = "andHereIsSrc"
}
stages {
stage('first') {
steps {
script{
echo 'beggining with ' + myBuildDir
def rootDir = pwd()
echo 'rootDir is ' + rootDir
def example = load "${rootDir}/fullPipe/firstPipe.groovy"
example.execute("rasAlGhul")
}
}
}
}
}
现在,当我像这样运行构建时,出现以下错误:
错误:找不到库的任何定义[myOneLib]
但是当我简单地将行移动@Library('myOneLib') _
到caller.groovy
所有工作的顶部时。
所以我的问题是如何@Library
在导入/包含的脚本中使用?还是有其他方法可以指定全局库?
很少有其他注释:caller.groovy
并且firstPipe.groovy
都在同一个git
repo中,如果我取消使用全局库,一切都会很好。我正在使用声明性管道,并且希望继续这样做。
回答:
对于此用例,使用该library
步骤在运行时动态加载它会更有意义。
在你的firstPipe.groovy
,你可以这样做:
final myOneLib = library('myOneLib') def execute(String zCmakeListsPath){
stage('some kind of stage 2') {
echo "Hello from stage 1 with " + zCmakeListsPath
echo "var attempt ${env.mySrcDir}"
}
stage('second stage'){
echo "and one from stage 2"
echo "param was " + zCmakeListsPath
echo "var attempt ${env.myBuildDir}"
//call function from global lib
myOneLib.deleteFile 'for 3rd party global library now'
}
}
return this
请参阅“ 使用共享库扩展” 文档中的“
动态加载库” 部分 __。
以上是 如何在Jenkins声明性管道中的导入的groovy脚本中使用@Library? 的全部内容, 来源链接: utcz.com/qa/425751.html