我是一个初学者与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中获得干净的结果?请帮帮我。
2条答案
按热度按时间2eafrhcq1#
将此添加到脚本的顶部:
字符串
然后使用这行代码代替
sh "./test.sh ${params}"
:型
它使用了一个Groovy库和一个原生的Jenkins方法来编写文件,这意味着您不需要使用
sh
方法。sf6xfgos2#
您发布的Jenkins管道脚本几乎可以正确地将参数写入JSON文件。但它有一个小问题-它试图将params对象(一个特殊的Jenkins对象)直接序列化为JSON文件。
此对象包含的数据不仅仅是参数,其元数据不能直接序列化为JSON。因此,要解决这个问题,您需要将每个参数Map到一个新的Map,然后将该Map序列化为JSON。下面是您的脚本的更正版本:
字符串
这个脚本只序列化您感兴趣的参数,而不是序列化整个params对象。请注意,在Jenkins中,params对象包括当前构建中的参数和作业配置中定义的任何默认参数。
这种方法可以很容易地调整,以添加或删除输出JSON文件中的参数。只需在脚本的paramsMap创建部分添加或删除行。