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

问题描述

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

enter image description here

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

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

现在,我要验证此Yaml文件(demo.yaml)的格式是否正确。

注意:就像有多种工具可以手动完成此操作一样(例如https://codebeautify.org/yaml-validator),我们可以在其中粘贴文本,然后单击validate和。但是如何在Jenkins管道中实现这一目标?

解决方法

您可以使用内置readYaml步骤来进行基本语法验证。为了检查数据的有效性,您可以使用assert个离子。

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

node {
    def CUSTOM_YAML = '''\
        foo: "bar"
        baz:
        - "baz1"
        - "baz2"
    '''
     
    try {
        // Parse the YAML. Does basic syntax checking.
        def config = readYaml text: CUSTOM_YAML
     
        // Validate YAML data.
        assert config.foo == 'bar'     
        assert config.baz.size() >= 2
    }
    catch( Exception e ){
        // Handle syntax error        
    }
    catch( AssertionError e ){
        // Handle data validation error (assert's)        
    }
}

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...