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

r7knjye2  于 2023-06-30  发布在  Shell
关注(0)|答案(6)|浏览(147)

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

2eafrhcq

2eafrhcq1#

最简单的可能是使用内置的插件,如@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}"
 }
}

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

dtcbnfnu

dtcbnfnu2#

这是一个很好的工作:

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

7z5jn7bk3#

下面是awk版本,这是IMHO示例阅读:

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

nszi6y054#

作为一个标准过程,我使用.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

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

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

希望这能帮上忙。

ogq8wdun

ogq8wdun5#

我建议您不要使用bash命令,而是使用groovy代码,使用readFile方法读取文件,然后循环行,并为每行将键与值分开。

vkc1a9a2

vkc1a9a26#

对于那些正在使用Jenkins共享库的人,这是我如何在**TomlSlurper**和Grape的帮助下做到这一点的,Grape是一个嵌入到Groovy中的JAR依赖管理器。

  • Jenkins文件 *
// Import TOML parser from Maven Central
@Grapes(@Grab(group='org.apache.groovy', module='groovy-toml', version='4.0.12'))
import groovy.toml.TomlSlurper

String getAppVersion() {
  String tomlTxt = readFile './pyproject.toml'
  def toml = new TomlSlurper().parseText(tomlTxt)
  return toml.app.version
}
  • pyproject.toml*
[app]
version = 15.0

相关问题