Validation 如何验证多行字符串是否为有效的YAML?

Validation 如何验证多行字符串是否为有效的YAML?,validation,yaml,jenkins-pipeline,multilinestring,Validation,Yaml,Jenkins Pipeline,Multilinestring,我有一个脚本化的Jenkins管道,其中使用了名为CUSTOM_YAML的多行字符串参数 在构建作业时,我将该参数的输入作为yaml文本,并将其转换为.yaml文件: writeFile file: 'demo.yaml', text: params.DEMO_YAML 现在,我想验证这个yaml文件(demo.yaml)的格式是否正确 注意:有多种工具可以手动完成这项工作(例如,我们可以粘贴文本,然后单击validate and)。但是我如何在Jenkins管道中实现这一点呢?您可以使用

我有一个脚本化的Jenkins管道,其中使用了名为CUSTOM_YAML的多行字符串参数

在构建作业时,我将该参数的输入作为yaml文本,并将其转换为.yaml文件:

writeFile file: 'demo.yaml', text: params.DEMO_YAML

现在,我想验证这个yaml文件(demo.yaml)的格式是否正确


注意:有多种工具可以手动完成这项工作(例如,我们可以粘贴文本,然后单击validate and)。但是我如何在Jenkins管道中实现这一点呢?

您可以使用内置步骤进行基本语法验证。要检查数据有效性,可以使用
assert
ions

如果您需要做的只是在任何错误上使构建失败,那么您已经完成了。当
readYaml
assert
失败时,将自动记录错误。如果需要专门处理错误或希望改进断言错误消息,请将代码包装在
try/catch
(注意:断言必须捕获为
AssertionError

节点{
def CUSTOM_YAML=''\
傅:“酒吧”
巴兹:
-“baz1”
-“baz2”
'''
试一试{
//解析YAML。执行基本语法检查。
def config=readYaml text:CUSTOM_YAML
//验证YAML数据。
assert config.foo=='bar'
断言config.baz.size()>=2
}
捕获(例外e){
//句柄语法错误
}
捕获(断言错误){
//处理数据验证错误(断言)
}
}

这是一个脚本化管道的示例。如果您有一个声明性管道,您可以将代码放入
步骤{script{/*the code*/}}
块。

对其调用readYaml步骤如何?如果用try-catch将其包围,则可以检查是否可以对其进行解析:datas=readYaml(文件:“demo.yaml”)。在input multiline参数中,我给出了一些未在yaml中格式化的文本,但仍然高于readYaml函数返回的输出文本。如果yaml的格式不正确,它应该引发异常。不是吗?如果我必须验证,比如说,通过Jenkins作业中的参数加载的任何规范文件,并根据repo中已有的模式验证文件对其进行验证,那么我该如何编写此代码?我希望在运行作业之前,首先验证我放入参数中的任何规范文件,如果它违反了验证,它应该在我的记录器中抛出错误。