如何从Jenkins共享库运行vars / script.groovy

时间:2018-06-06 05:56:45

标签: jenkins-pipeline jenkins-shared-libraries

我试图从位于共享库Jenkins类调用的vars下的groovy脚本中获取信息,但是收到错误。一些信息:

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

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

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

文件结构

.
├── 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
}

jenkinsfile

@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

2 个答案:

答案 0 :(得分:0)

如果您习惯在.properties或.json文件中定义值,可以使用'resource'文件夹

sharedlibrary /资源/ global.properties

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

使用libraryResource方法

globalPropertyContent = libraryResource 'global.properties'

访问属性值,如:

globalPropertyContent.PROJECT_NAME

答案 1 :(得分:0)

您还需要使用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()
}

编辑:刚刚看到你的Jenkins文件也有拼写错误。需要使用共享库对象而不是'my_second_stage'中的类:

Jenkinsfile

@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()
  }
}