提问人:user2179627 提问时间:11/17/2023 更新时间:11/18/2023 访问量:21
在 Jenkins 模板引擎的共享库中的方法之间传递值
pass values between methods in shared libraries in Jenkins Templating Engine
问:
我正在试用 Jenkins 模板引擎,我的治理层具有以下特性Jenkinsfile
node("Build-Node") {
def artifactVersion
checkout()
build()
sourceArtifact = docker_build()
push(sourceArtifact)
}
我的共享库具有以下结构
shared-library
|
|--docker
| |--steps
| |--docker_build.groovy
| |--push.groovy
|--maven
| |--steps
| |--build.groovy
|--npm
| |--steps
| |--build.groovy
在我的客户端,pipeline_config.groovy 有以下内容 -
libraries {
docker {
url = "REGISTRY_URL"
credentials = "REGISTRY_CREDENTIALS"
@override sourceArtifact= "" //this has to be overriden in Jenkinsfile and new value fetched should be passed to the push() method.
//more docker configuration
}
}
我的方法看起来像这样——docker.build()
def call() {
//do docker build
return sourceArtefact
}
我一直收到一个错误,说在push.groovy中找不到调用方法。 如何在 JTE 的共享库中的两个不同方法之间正确传递值?
提前非常感谢你。
答:
0赞
Steven Terrana
11/18/2023
#1
我不建议在模板的步骤之间创建紧密耦合。
您希望步骤尽可能独立,以确保可以在实现之间自由切换。
如果创建一个采用输入变量的步骤,则将创建一个“协定”,即该步骤的每个实现(可能在模板中使用)都将具有相同的方法签名。
如果始终知道要在生成容器映像后推送容器映像,则应在生成步骤中执行此操作。
话虽如此 - 你的问题与你所说的你收到的错误无关。听起来你的推送方法不接受源项目的输入参数 - 因此管道失败,因为它找不到输入参数为零的调用方法。
评论