从管道中的 Groovy 个变量创建 JSON 文件 - jenkins 作业

Create JSON file from Groovy variables in Pipeline - jenkins job

我是 jenkins 的新手,我有一个带参数的管道作业。

我想创建一个 JSON 文件并在其中写入我的参数。 (然后让我的 jar 文件读取那个 JSON 文件并根据它读取 运行) 我如何在 groovy 中执行此操作?

这是我的詹金斯文件:

pipeline {
    agent {
        label "create_pass_criteria"
    }
    

    parameters {
        string(name: 'IP', description: 'Please enter your ip')
        password(name: 'PASSWORD',description: 'Please enter your mx password')
        string(name: 'NAME', description: 'Please enter the name ')
    }

    tools {
        maven 'maven-3.3.9'

    }
    options
            {
                buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20'))
                gitLabConnection('gitlab')
            }


    stages {
        stage('Git Clone') {
            steps {
                updateGitlabCommitStatus name: 'Build', state: 'running'
                checkout([
                        $class                           : 'GitSCM',
                        branches                         : [[name: '*/master']],
                        doGenerateSubmoduleConfigurations: false,
                        extensions                       : [],
                        submoduleCfg                     : [],
                        userRemoteConfigs                : [[credentialsId: GIT_CRED, url: GIT_PATH]]
                ])
            }
        }
        stage('Build') {
            steps {
                sh 'mvn install'
            }
        }

        stage('run') {
            steps {
                sh 'java -jar /var/lib/jenkins/workspace/create_pass_criteria/target/create_pass_criteria-8.0.125-SNAPSHOT.jar'
            }
        }

    }

    post {
        success {
            updateGitlabCommitStatus name: 'Build', state: 'success'
            emailext(
                    to: EMAIL_ADDR,
                    subject: "Success Pipeline: ${currentBuild.fullDisplayName}",
                    body: "Pipeline URL: ${env.BUILD_URL}",
                    mimeType: 'text/html'
            )
        }

        failure {
            updateGitlabCommitStatus name: 'Build', state: 'failed'
            emailext(
                    to: EMAIL_ADDR,
                    subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
                    body: "Pipeline URL: ${env.BUILD_URL}",
                    mimeType: 'text/html'
            )
        }
    }
} // pipeline

我不知道它是否正确,但这就是我需要添加到我的 Jenkins 文件中的内容吗?:

    node{
        //to create json declare a sequence of maps/arrays in groovy
        //here is the data according to your sample
        def data = [
            attachments:[
                [
                    mxIp : params.MX_IP,
                    mxPassword : params.MX_PASSWORD,
                    policyName : params.POLICY_NAME,
                ]
            ]
        ]
        writeJSON(file: 'parameters.json', json: data)
}

如果是,必须在哪一部分?

您可以像这样将此代码放在 script 块中:

stage('run') {
    steps {
        script {
            def data = [
                attachments:[
                    [
                        mxIp : params.MX_IP,
                        mxPassword : params.MX_PASSWORD,
                        policyName : params.POLICY_NAME,
                    ]
                ]
            ]
            writeJSON(file: 'parameters.json', json: data)
        }
        
        sh 'java -jar /var/lib/jenkins/workspace/create_pass_criteria/target/create_pass_criteria-8.0.125-SNAPSHOT.jar'
    }
}

在复杂的管道中,我尝试通过遵守 single level of abstraction principle 创建干净的代码。在这种情况下,我会将 scriptsh 步骤提取到一个单独的函数中,然后可以从 pipeline 部分作为一个步骤调用它:

stage('run') {
    steps {
        createPassCriteria()
    }
}

pipeline 部分的 } 结束后定义函数:

void createPassCriteria() {
    def data = [
        attachments:[
            [
                mxIp : params.MX_IP,
                mxPassword : params.MX_PASSWORD,
                policyName : params.POLICY_NAME,
            ]
        ]
    ]
    writeJSON(file: 'parameters.json', json: data)

    sh 'java -jar /var/lib/jenkins/workspace/create_pass_criteria/target/create_pass_criteria-8.0.125-SNAPSHOT.jar'
}