从JenkinsFile中的文件的键值对中提取值

时间:2019-12-03 06:54:06

标签: shell groovy sed grep jenkins-pipeline

GIT存储库中有两个文件(abc.toml和JenkinsFile)... abc.toml看起来像:

[env]
    APPLICATION = 'xxx'
    COMPONENT = 'xxx'
    Z_VERSION='0.0.1'
    AAAS_FLA='xxx'
    CONF_VERSION='0.0.80'
    SVC_VERSION='0.0.93'

现在,在JenkinsFile中,我必须在变量中提取SVC_VERSION的值。

我正在尝试:

node{
 stage('Deploy'){
 def SVC_VERSION =  sh returnStdout: true, script: cat abc.toml | grep SVC_VERSION|sed -e "s/.*=//g" -e "s/['| ]//g"
 }
}

但是我遇到一个错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 16: expecting '}', found '|' @ line 16, column 71.
   rue, script: cat abc.toml | grep SVC
                             ^

我该如何纠正? 预期结果是SVC_VERSION变量应为0.0.93

5 个答案:

答案 0 :(得分:0)

这很好:

def SVC_VERSION = sh returnStdout: true, script: "cat ./abc.toml | grep SVC_VERSION | sed -e \"s/.*=//g\" -e \"s/['| ]//g\" "

答案 1 :(得分:0)

这里是awk版本,该版本是恕我直言的示例:

def SVC_VERSION = sh returnStdout: true, script: "awk -F\' '/SVC_VERSION/ {print $2}' ./abc.toml"

答案 2 :(得分:0)

作为标准过程,我使用.properties文件存储环境变量。 您的文件将显示为- envt.properties:

 APPLICATION =xxx
 COMPONENT =xxx
 Z_VERSION=0.0.1
 AAAS_FLA=xxx
 CONF_VERSION=0.0.80
 SVC_VERSION=0.0.93

我使用以下常规代码来检索任何属性值:

 def prop= new Properties()
   new File("envt.properties").withInputStream { 
      stream -> prop.load(stream) 
   }
   def propConfig = new ConfigSlurper().parse(prop)
def SVC_VERSION=propConfig.SVC_VERSION
def CONF_VERSION=propConfig.CONF_VERSION

希望这会有所帮助。

答案 3 :(得分:0)

建议您不要使用bash命令,而应使用常规代码, 使用readFile方法读取文件,然后循环执行各行,并针对每行将键与值分开。

答案 4 :(得分:0)

最简单的方法可能是使用内置函数,如@yorammi所述:

请参见https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readproperties-read-properties-from-files-in-the-workspace-or-text

例如,您可以这样做:

node{
 stage('Deploy'){
   def props = readProperties file: 'abc.toml'
   def SVC_VERSION = props['SVC_VERSION']

   echo "SVC_VERSION = ${SVC_VERSION}"
 }
}

优点是您可以从节点工作区读取文件。