当前位置: 首页 > 知识库问答 >
问题:

Jenkins共享管道库:我可以在vars文件中声明静态变量吗?

燕青青
2023-03-14

Jenkins共享管道库是否支持vars/*中的静态变量。groovy文件?

file: vars/foo.groovy
---
def functionFoo() {return "foo"}



file: vars/bar.groovy
---
def result = functionFoo()
def functionBar() {println result}


file:Jenkinsfile
---
@Library('MyLib') _
bar.functionBar()

这会引发错误:

groovy.lang.缺少属性异常:没有这样的属性:类的结果:groovy.lang.绑定在groovy.lang.Binding.get变量(Binding.java:63)在org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.Sandbox Interceptor.onGetProperty(Sandbox Interceptor.java:224)在org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)在org.kohsuke.groovy.sandbox.impl.hecker.checkedGetProperty(Checker.java:238)在com.cloudbees.groovy.cps.sandbox.Sandbox我nvoker.get(Sandboxnvoker.java:24)在com.cloudbees.groovy.cps.impl.房地产lock.raw获取(房地产lock.java:20)......

file: vars/foo.groovy
---
def functionFoo() {return "foo"}



file: vars/bar.groovy
---
def functionBar() {
    def result = functionFoo()
    println result
}


file:Jenkinsfile
---
@Library('MyLib') _
bar.functionBar()

我假设变量要么是以不同的方式初始化的,要么就是不能像函数一样与ingvars/目录一起使用。这个特性是Groovy语言的一部分吗?还是詹金斯全球管道库的局限性?

共有1个答案

戈宏义
2023-03-14

要在groovy变量中定义变量,而不是函数,请使用groovy。使改变字段:

@groovy.transform.Field result = functionFoo()
def functionBar() {println this.result}
 类似资料:
  • 正如您所知道的,在Jenkins的共享库中,可以在Jenkinsfile中调用vars文件夹中文件的内容。 例如,在共享库的vars文件夹中,我们可以有一个名为在Jenkins文件中,我们可以通过以下方式调用它: 如本节所述。使用groovy文件并使用Jenkins文件中的方法调用它们,我没有任何问题。 但是我想定制一个管道,并使其尽可能通用。所以我想调用包含在文件夹中但在同一管道中的groovy

  • 基本上,我希望我的Jenkins文件看起来像这样: 然后我的共享库(/vars/description ptivePipeline.groovy)会像这样: 我想集中管道配置,这样我就不必担心Jenkinsfile蔓延。声明式管道可以做到这一点吗?

  • 问题内容: 我正在尝试获得一个如下所示的声明性管道: 问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。 有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例: 但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些

  • 问题内容: 我正在尝试为CI流程编写Jenkins共享库。我想引用在文件夹中定义的全局函数内的文件夹中的类,因为它可以使我将大多数逻辑放在类中,而不是在全局函数中。我正在遵循Jenkins官方文档中记录的存储库结构: Jenkins Shared Library结构 这是我所拥有的简化示例: /src/com/example/SrcClass.groovy /vars/classFromVars.

  • 我将我的Jenkins Pipeline存储为Jenkins共享库中的Groovy脚本。我想为不同的工作使用不同的版本。我的共享库脚本称为如下: 我已将sharedLib repo中的不同版本标记为。万一我想用v1。0,我用注释引用了它,如下所示。 在我的工作中,我通过调用groovy脚本访问了共享库,并使用了上面的注释,如图所示: 我运行这项工作时出错了。以下是我看到的错误。 当我使用。我哪里出

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎