我试图从位于共享库Jenkins类调用的vars下的groovy脚本中获取信息,但是收到错误。一些信息:
需要 - 全局配置文件。类似于 Manage Jenkins - >配置系统 - >环境变量
目标 - 能够在共享库中获取全局值,而无需从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
答案 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()
}
以你的榜样为准
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'中的类:
@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()
}
}