ISZ*_*ISZ 5 groovy shared-libraries jenkins
我正在寻找有关Jenkins共享库设计的一些指导,涉及使用类,对其进行初始化,然后能够在我的任何vars文件中使用该实例。
结构体
src
- foo
- class
- Configuration.groovy
vars
- cicd.groovy
- doMore.groovy
Run Code Online (Sandbox Code Playgroud)
类
以下是一个我想初始化一次,但随后可以在任何地方使用的类,而不必将其传递给每个vars函数或每次都重新初始化。
package foo.class
public class Configuration {
public String Foo
public String Bar
}
Run Code Online (Sandbox Code Playgroud)
Vars
在我的cicd.groovy vars文件中,我有类似以下内容:
#!groovy
import foo.class.Configuration
def call () {
return initCicd()
}
def initCicd() {
configuration = new Configuration()
configuration.Foo = 'FOO'
return configuration
}
Run Code Online (Sandbox Code Playgroud)
但是,在其他的vars文件(如doMore.groovy)中,我想使用相同的配置实例。
#!groovy
import foo.class.Configuration
def call () {
println configuration.Foo
}
Run Code Online (Sandbox Code Playgroud)
在Jenkins共享库中是否有可以使用的Singleton模式,还是一种在vars文件或步骤中引用实例的方式?如有可能,请分享一个例子。
谢谢!
您可以简单地将 Groovy 的@Singleton注释用于您的Configuration类,并Configuration.instance在您想要访问配置设置的任何地方使用。考虑以下示例:
.
??? src
? ??? foo
? ??? Configuration.groovy
??? vars
??? cicd.groovy
??? doMore.groovy
Run Code Online (Sandbox Code Playgroud)
src/foo/Configuration.groovy
package foo
@Singleton
class Configuration {
public String foo = 'foo_123'
public String bar = 'bar_456'
}
Run Code Online (Sandbox Code Playgroud)
vars/cicd.groovy
#!groovy
import foo.Configuration
def call() {
return initCicd()
}
def initCicd() {
println Configuration.instance.foo
return Configuration.instance
}
Run Code Online (Sandbox Code Playgroud)
变量/doMore.groovy
#!groovy
import foo.Configuration
def call() {
println Configuration.instance.bar
}
Run Code Online (Sandbox Code Playgroud)
在管道脚本中,我简单地调用:
cicd()
doMore()
Run Code Online (Sandbox Code Playgroud)
我在控制台日志中得到类似的信息:
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
Run Code Online (Sandbox Code Playgroud)
使用单例的一个缺点是它们可以在任何地方进行修改,并且此更改会填充到所有调用者。
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |