在 Jenkins 模板引擎的共享库中的方法之间传递值

pass values between methods in shared libraries in Jenkins Templating Engine

提问人:user2179627 提问时间:11/17/2023 更新时间:11/18/2023 访问量:21

问:

我正在试用 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 的共享库中的两个不同方法之间正确传递值?

提前非常感谢你。

Jenkins 共享库 jenkins-groovy jenkins-template-engine

评论

0赞 fakolours 11/17/2023
它可能来自这个,但也可能是错别字。文件夹是直接在共享库中,还是这是 src 文件夹的内容?
0赞 user2179627 11/17/2023
它们直接位于共享库下,而不是 src 文件夹中。我按照文档 boozallen.github.io/sdp-docs/jte/2.2.2/upgrade-2.0.html 中的步骤进行操作
0赞 fakolours 11/17/2023
好吧,我的错,我以为您正在使用 Jenkins 共享库插件。不幸的是,我无法帮助你

答:

0赞 Steven Terrana 11/18/2023 #1

我不建议在模板的步骤之间创建紧密耦合。

您希望步骤尽可能独立,以确保可以在实现之间自由切换。

如果创建一个采用输入变量的步骤,则将创建一个“协定”,即该步骤的每个实现(可能在模板中使用)都将具有相同的方法签名。

如果始终知道要在生成容器映像后推送容器映像,则应在生成步骤中执行此操作。

话虽如此 - 你的问题与你所说的你收到的错误无关。听起来你的推送方法不接受源项目的输入参数 - 因此管道失败,因为它找不到输入参数为零的调用方法。