如何使用配置文件提供程序插件从 Jenkins 管道内的配置文件中读取 属性
How to read property from config file inside Jenkins pipeline using Config File Provider Plugin
我想用一个简单的属性配置文件来参数化我的 Jenkins 管道
skip_tests=true
我已添加到 Jenkins 配置文件管理中:
在我的管道中,我正在导入此文件并尝试使用 Jenkins 管道配置文件插件从中读取。
node('my-swarm') {
MY_CONFIG = '27206b95-d69b-4494-a430-0a23483a6408'
try {
stage('prepare') {
configFileProvider([configFile(fileId: "$MY_CONFIG", variable: 'skip_tests')]) {
echo $skip_tests
assert $skip_tests == 'true'
}
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
print e
}
}
这会导致错误:
provisioning config files...
copy managed file [my.properties] to file:/home/jenkins/build/workspace/my-workspace@tmp/config7043792000148664559tmp
[Pipeline] {
[Pipeline] }
Deleting 1 temporary files
[Pipeline] // configFileProvider
[Pipeline] }
[Pipeline] // stage
[Pipeline] echo
groovy.lang.MissingPropertyException: No such property: $skip_tests for
class: groovy.lang.Binding
知道我做错了什么吗?
由于文件是 属性 格式,您可以在 shell 步骤中使用它:
sh """
source ${MY_CONFIG}
.
.
.
"""
您需要导出需要在 shell 调用的程序(例如 Maven)上可用的属性
你错误地使用了Groovy GString,你应该将$skip_tests
包裹在"
中或者直接使用skip_tests
。
configFileProvider([configFile(fileId: "$MY_CONFIG", variable: 'skip_tests')]) {
echo skip_tests
assert skip_tests == 'true'
echo "$skip_tests"
assert "$skip_tests" == 'true'
}
注意:skip_tests
的值是从master复制到job工作空间的配置文件的文件路径。这不是配置文件的内容。
在其他答案和 的帮助下,我发现以下代码有效:
configFileProvider([configFile(fileId: "$PBD1_CONFIG", variable: 'configFile')]) {
def props = readProperties file: "$configFile"
def skip_tests = props['skip_tests']
if (skip_tests == 'true') {
print 'skipping tests'
} else {
print 'running tests'
}
}
我不得不使用 Jenkins 的 Pipeline Utility Steps Plugin.
中的 readProperties
我想用一个简单的属性配置文件来参数化我的 Jenkins 管道
skip_tests=true
我已添加到 Jenkins 配置文件管理中:
在我的管道中,我正在导入此文件并尝试使用 Jenkins 管道配置文件插件从中读取。
node('my-swarm') {
MY_CONFIG = '27206b95-d69b-4494-a430-0a23483a6408'
try {
stage('prepare') {
configFileProvider([configFile(fileId: "$MY_CONFIG", variable: 'skip_tests')]) {
echo $skip_tests
assert $skip_tests == 'true'
}
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
print e
}
}
这会导致错误:
provisioning config files...
copy managed file [my.properties] to file:/home/jenkins/build/workspace/my-workspace@tmp/config7043792000148664559tmp
[Pipeline] {
[Pipeline] }
Deleting 1 temporary files
[Pipeline] // configFileProvider
[Pipeline] }
[Pipeline] // stage
[Pipeline] echo
groovy.lang.MissingPropertyException: No such property: $skip_tests for
class: groovy.lang.Binding
知道我做错了什么吗?
由于文件是 属性 格式,您可以在 shell 步骤中使用它:
sh """
source ${MY_CONFIG}
.
.
.
"""
您需要导出需要在 shell 调用的程序(例如 Maven)上可用的属性
你错误地使用了Groovy GString,你应该将$skip_tests
包裹在"
中或者直接使用skip_tests
。
configFileProvider([configFile(fileId: "$MY_CONFIG", variable: 'skip_tests')]) {
echo skip_tests
assert skip_tests == 'true'
echo "$skip_tests"
assert "$skip_tests" == 'true'
}
注意:skip_tests
的值是从master复制到job工作空间的配置文件的文件路径。这不是配置文件的内容。
在其他答案和
configFileProvider([configFile(fileId: "$PBD1_CONFIG", variable: 'configFile')]) {
def props = readProperties file: "$configFile"
def skip_tests = props['skip_tests']
if (skip_tests == 'true') {
print 'skipping tests'
} else {
print 'running tests'
}
}
我不得不使用 Jenkins 的 Pipeline Utility Steps Plugin.
中的 readProperties