shell 使用${params}在JSON文件中写入所有参数jenkins

tyu7yeag  于 2023-08-07  发布在  Shell
关注(0)|答案(2)|浏览(237)

我是一个初学者与shell脚本,我有一些问题,而Jenkins工作参数化。我想使用${params}将jenkins job pipeline build的所有参数写入JSON文件!在我的例子中,我有4个参数(apis:多选,名称:字符串,版本:单选和状态:布尔),有脚本Jenkinsfile

pipeline {
  agent any
    stages {
        stage('Build') {              
            steps {              
                script{              
                   sh "./test.sh ${params}"
                }
            }
        }
    }
}

字符串
test.sh的内容

#!/bin/bash
echo $@ > file.json


jenkins中的输出

+ ./test.sh [apis:dev,qa,prod, name:CC, version:g3, status:true]


结果在file.json中

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data


我的问题是如何格式化输出以在file.json中获得干净的结果?请帮帮我。

2eafrhcq

2eafrhcq1#

将此添加到脚本的顶部:

import groovy.json.JsonOutput

字符串
然后使用这行代码代替sh "./test.sh ${params}"

writeFile file: 'params.json', text: JsonOutput.toJson(params)


它使用了一个Groovy库和一个原生的Jenkins方法来编写文件,这意味着您不需要使用sh方法。

sf6xfgos

sf6xfgos2#

您发布的Jenkins管道脚本几乎可以正确地将参数写入JSON文件。但它有一个小问题-它试图将params对象(一个特殊的Jenkins对象)直接序列化为JSON文件。
此对象包含的数据不仅仅是参数,其元数据不能直接序列化为JSON。因此,要解决这个问题,您需要将每个参数Map到一个新的Map,然后将该Map序列化为JSON。下面是您的脚本的更正版本:

import groovy.json.JsonOutput
pipeline {
  agent any
    stages {
        stage('Build') {              
            steps {              
                script {              
                   def paramsMap = [:]
                   paramsMap['apis'] = params['apis']
                   paramsMap['name'] = params['name']
                   paramsMap['version'] = params['version']
                   paramsMap['status'] = params['status']

                   writeFile file: 'params.json', text: JsonOutput.toJson(paramsMap)
                }
            }
        }
    }
}

字符串
这个脚本只序列化您感兴趣的参数,而不是序列化整个params对象。请注意,在Jenkins中,params对象包括当前构建中的参数和作业配置中定义的任何默认参数。
这种方法可以很容易地调整,以添加或删除输出JSON文件中的参数。只需在脚本的paramsMap创建部分添加或删除行。

相关问题