Jenkins - 将脚本管道导出到共享库中

时间:2018-04-02 14:29:41

标签: jenkins groovy jenkins-pipeline

我们有一些类似的应用程序部署了脚本管道,基本上是所有应用程序的C& P。我想将整个管道移动到Jenkins docs中暗示的Jenkins共享库中。

所以,让我们假设我有以下"管道"在var/standardSpringPipeline.groovy

#!groovy

def call() {

  node {
    echo "${env.BRANCH_NAME}"
  }
}

然后 - 詹金斯文件:

@Library('my-jenkins-lib@master') _

standardSpringPipeline

echo "Bye!"

不幸的是,由于我不理解的原因,这不起作用。 Jenkins的输出类似:

> git fetch --no-tags --progress ssh://git@***.com:7999/log/my-jenkins-lib.git +refs/heads/*:refs/remotes/origin/*
Checking out Revision 28900d4ed5bcece9451655f6f1b9a41a76256629 (master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 28900d4ed5bcece9451655f6f1b9a41a76256629
Commit message: "NOJIRA: ...."
 > git rev-list --no-walk 28900d4ed5bcece9451655f6f1b9a41a76256629 # timeout=10
[Pipeline] echo
Bye!
[Pipeline] End of Pipeline

任何线索为什么这不起作用(参见上面的输出)以及正确的方法是什么?

1 个答案:

答案 0 :(得分:4)

对于无参数方法,不能使用可选括号。来自Groovy documentation(强调我的):

  

如果至少有一个参数并且没有歧义,方法调用可以省略括号:

println 'Hello World'
def maximum = Math.max 5, 10
     

没有参数或方法调用的方法调用需要括号   模糊方法调用:

println() 
println(Math.max(5, 10))

standardSpringPipeline的行为类似于方法,因为它是如何编译的。如果添加echo "$standardSpringPipeline",则可以调用它是一个更加清晰的编译类。

要解决您的问题,只需在呼叫中添加括号:

standardSpringPipeline()