【问题标题】:How to read property from config file inside Jenkins pipeline using Config File Provider Plugin如何使用配置文件提供程序插件从 Jenkins 管道内的配置文件中读取属性
【发布时间】:2019-04-30 19:20:47
【问题描述】:

我想用一个简单的属性配置文件来参数化我的 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

有什么想法我在这里做错了吗?

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-plugins configuration-files


    【解决方案1】:

    在其他答案和How to read properties file from Jenkins 2.0 pipeline script 的帮助下,我发现以下代码可以工作:

    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。

    【讨论】:

      【解决方案2】:

      由于文件是属性格式,您可以在 shell 步骤中使用它:

      sh """
        source ${MY_CONFIG}
        .
        .
        .
      """
      

      您需要导出需要在 shell 调用的程序(例如 Maven)上可用的属性

      【讨论】:

      • 感谢里奇!如果我找不到通过 configFileProvider 访问属性的更简单方法,我会尝试这样做。
      • 丰富,我没有设法导出属性并从管道外壳中读取它们。也许您可以以一种更清楚的方式完善您的答案。除此之外,我同时找到了使用 Pipeline Utility Steps Plugin 的解决方案。我已经在另一个答案中记录了它。
      【解决方案3】:

      你错误地使用了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工作区的config文件的文件路径。不是配置文件的内容。

      【讨论】:

      • 感谢@yong - 这帮助我找到了解决方案。
      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多