gpt4 book ai didi

Jenkins 共享库全局/单例类

转载 作者:行者123 更新时间:2023-12-04 15:17:59 25 4
gpt4 key购买 nike

我正在寻找有关 Jenkins 共享库设计的一些指导,关于使用类、初始化它,然后能够在我的任何 vars 文件中使用该实例。

结构

src
- foo
- class
- Configuration.groovy
vars
- cicd.groovy
- doMore.groovy

类(class)

下面是一个我想初始化一次,然后在任何地方使用的类,而不必将它传递给每个 vars 函数,或者每次都重新初始化。
package foo.class

public class Configuration {

public String Foo

public String Bar

}

变量

在我的 cicd.groovy vars 文件中,我有这样的内容:
#!groovy
import foo.class.Configuration

def call () {

return initCicd()
}

def initCicd() {
configuration = new Configuration()
configuration.Foo = 'FOO'
return configuration
}

但是,在 doMore.groovy 等其他 vars 文件中,我想使用相同的配置实例。
#!groovy
import foo.class.Configuration

def call () {

println configuration.Foo
}

是否有一种适用于 Jenkins 共享库的单例模式,或者一种跨 vars 文件或步骤引用实例的方法?如果可能,请分享一个例子。

谢谢!

最佳答案

您可以简单地为您的 @Singleton 类使用 Groovy 的 Configuration 注释,并在您想要访问配置设置的任何地方使用 Configuration.instance。考虑以下示例:

.
├── src
│   └── foo
│   └── Configuration.groovy
└── vars
├── cicd.groovy
└── doMore.groovy

src/foo/Configuration.groovy
package foo

@Singleton
class Configuration {
public String foo = 'foo_123'
public String bar = 'bar_456'
}

vars/cicd.groovy
#!groovy

import foo.Configuration

def call() {
return initCicd()
}

def initCicd() {
println Configuration.instance.foo
return Configuration.instance
}

变量/doMore.groovy
#!groovy

import foo.Configuration

def call() {
println Configuration.instance.bar
}

在管道脚本中,我简单地调用:
cicd()
doMore()

我在控制台日志中得到类似的信息:
Loading library default_jenkins_libs@master
Attempting to resolve master from remote references...
> git --version # timeout=10
> git ls-remote -h -t file:///var/jenkins_home/libraries # timeout=10
Found match: refs/heads/master revision 4fa988ccde542d77d19febd72f532ef996971a5d
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url file:///var/jenkins_home/libraries # timeout=10
Fetching without tags
Fetching upstream changes from file:///var/jenkins_home/libraries
> git --version # timeout=10
> git fetch --no-tags --progress file:///var/jenkins_home/libraries +refs/heads/*:refs/remotes/origin/*
Checking out Revision 4fa988ccde542d77d19febd72f532ef996971a5d (master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 4fa988ccde542d77d19febd72f532ef996971a5d
Commit message: "update"
> git rev-list --no-walk 39890b4ca39bf32ebde8c7ad143b110bf16cf6b3 # timeout=10
[Pipeline] echo
foo_123
[Pipeline] echo
bar_456
[Pipeline] End of Pipeline
Finished: SUCCESS

使用单例的一个缺点是它们可以在任何地方进行修改,并且此更改会填充到所有调用者。

关于Jenkins 共享库全局/单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com