1

我正在尝试从位于从共享库 Jenkins 类调用的 vars 下的 groovy 脚本获取信息,但出现错误。一些信息:

  • 需要- 全局配置文件。类似于管理 Jenkins -> 配置系统 -> 环境变量

  • 目标- 能够在共享库中获取全局值,而无需从 Jenkinsfile 发送参数。

  • 我的解决方案- 我尝试使用适用于 Jenkinsfile 但不适用于共享库的“vars/script.groovy”。

文件结构

.
├── src
│   └── org
│       └── jenkins
│            └──shared_library.groovy 
│── vars
│      └── globals.groovy
│
│── jenkinsfile.groovy

变量/globals.groovy

def my_global() {
return 'my_global_name'
}

shared_library 类

package src.org.jenkins

class shared_library implements Serializable {
private steps

shared_library(steps) {
    this.steps = steps
}

def some_func(){
  println globals.my_global
}

詹金斯文件

@Library 'shared_library'
import org.jenkins.shared_library

my_shared_library = new shared_library(steps)

node(){
  stage('my_first_stage'){
    println globals.my_global
  }
  stage('my_second_stage'){
    println shared_library.some_func()
  }
}

所以,我可以看到管道中第一个打印的值,但第二个我得到:

没有这样的属性:类的全局变量:src.org.jenkins.shared_library

4

2 回答 2

1

您还需要使用 steps 对象来访问全局变量:

def some_func(){
    println steps.globals.my_global()
}

以你的例子为例

shared_library 类

package src.org.jenkins

class shared_library implements Serializable {
private steps

shared_library(steps) {
    this.steps = steps
}

def some_func(){
  println steps.globals.my_global()
}

编辑:刚刚看到您的 Jenkinsfile 也有错字。需要使用共享库对象而不是 'my_second_stage' 中的类:

詹金斯文件

@Library('shared_library')
import org.jenkins.shared_library

my_shared_library = new shared_library(steps)

node(){
  stage('my_first_stage'){
    println globals.my_global()
  }
  stage('my_second_stage'){
    println my_shared_library.some_func()
  }
}
于 2018-06-07T04:24:39.833 回答
0

如果您对在 .properties 或 .json 文件中定义值感到满意,您可以使用“resource”文件夹

sharedlibrary/resource/global.properties

在您的管道脚本或 var/script.groovy

使用 libraryResource 方法

globalPropertyContent = libraryResource 'global.properties'

访问属性值,例如:

globalPropertyContent.PROJECT_NAME
于 2018-06-06T11:48:41.177 回答