如何将Groovy输出保存到流水线变量中

85次阅读
没有评论

问题描述

在Jenkins流水线中有以下代码:

stage ("amd_distribution_input_transformation"){
    steps{
        script{
            amd_distribution_input_transformation url: params.DOMAIN_DESCRIPTOR_URL, secret: params.CERDENITAL_ID
        }
    }
}

amd_distribution_input_transformation.groovy文件内容如下:

def call(Map parameters){
    def CREDENITAL_ID = parameters.secret
    def DOMAIN_DESCRIPTOR_URL = parameters.url
    sh '''
        python amd_distribution_input_transformation.py
    '''
}

在amd_distribution_input_transformation.py文件中运行了一些代码,并在最后返回了一个名为’artifacts_list’的对象。
我的问题是,如何将Groovy文件的返回对象分配给流水线变量。顺便说一下,如果有帮助的话,我可以将Python代码的输出写入JSON文件(在这里我卡在如何将该文件最终分配给流水线变量)。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据Jenkins文档,你可以在sh()命令中将returnStdout设置为true。然后,你可以将该输出分配给流水线中的变量:

def artifactsList = sh(label: 'Running amd_distribution_input transformation', returnStdout: true, script: 'python amd_distribution_input_transformation.py')

然后,你可以检查该变量的类型,并根据需要进行操作:

echo(artifactsList.getClass())

方案2

如果你希望将Python代码的输出写入JSON文件,并将该文件分配给流水线变量,你可以尝试以下步骤:
1. 在Python代码中将输出写入JSON文件。你可以使用Python的json模块来实现这一点。
2. 在Groovy代码中使用sh()命令运行Python代码,并将输出写入JSON文件。
3. 使用Groovy的文件操作功能将JSON文件读取到流水线变量中。
以下是一个示例代码:

def artifactsList = sh(label: 'Running amd_distribution_input transformation', returnStdout: true, script: '''
    python amd_distribution_input_transformation.py > output.json
''')

def jsonFile = readFile('output.json')
def pipelineVariable = new groovy.json.JsonSlurper().parseText(jsonFile)

在上面的示例中,我们首先使用sh()命令运行Python代码,并将输出重定向到output.json文件中。然后,我们使用Groovy的文件操作功能将JSON文件读取到流水线变量中。
请注意,这只是一个示例,你需要根据你的实际需求进行适当的修改。

正文完