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

问题描述 投票:0回答:1

我正在尝试 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 shared-libraries jenkins-groovy jenkins-template-engine
1个回答
0
投票

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

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

如果您创建一个接受输入变量的步骤,那么您正在创建一个“契约”,模板中可能使用的该步骤的每个实现都将具有相同的方法签名。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.