猿问

如何在每个测试中重复使用预处理 jenkins/groovy

我使用以下代码来运行我们的投票器,目前我有一个目标,它使用与最后一个 (lint)Run Tests 完全相同的步骤,目前我复制它,我认为这不是一个好的解决方案,有没有好的方法为避免这种重复并根据必要的过程只完成一次?


cd我需要完成项目之前的所有步骤


唯一的区别是我运行的一个目标


go test ...

第二个


go lint 

之前的所有步骤都是平等的


#!/usr/bin/env groovy


    try {

        parallel(

                'Run Tests': {

                    node {


                        //————————Here we start

                        checkout scm

                        def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’

                        setupPipelineEnvironment script: this, 

                        measureDuration(script: this, measurementName: 'build') {

                            executeDocker(dockerImage: dockerImage,  dockerWorkspace: '/go/src') {

                                sh """

                                mkdir -p /go/src/github.com/ftr/myGoProj

                                cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj

                                cd  /go/src/github.com/ftr/MyGoProj

                        //————————Here we finish and TEST

                                go test -v ./...                           

                                """

                            }

                        }

                    }

                },


慕标琳琳
浏览 146回答 1
1回答

千万里不及你

您可以使用函数并传递 Go 参数:try {    parallel(        'Run Tests': {            node {                checkout scm                runTestsInDocker('test -v ./...')            }        },        'Lint': {            node {                checkout scm                runTestsInDocker('lint')            }        }    )}def runTestsInDocker(goArgs) {    def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'    setupPipelineEnvironment script: this,     measureDuration(script: this, measurementName: 'build') {        executeDocker(dockerImage: dockerImage,  dockerWorkspace: '/go/src') {            sh """            mkdir -p /go/src/github.com/ftr/myGoProj            cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj            cd  /go/src/github.com/ftr/MyGoProj            go ${goArgs}                                    """        }    }}更新如果某些动作可以从中分离出来,那么runTestsInDocker它们可能应该是。例如setupPipelineEnvironment步骤。我不知道确切的逻辑,但也许它可以在运行测试之前运行一次。node {    stage('setup') {        setupPipelineEnvironment script: this    }    stage ('Tests') {        parallel(            'Run Tests': {                node {                    checkout scm                    runTestsInDocker('test -v ./...')                }            },            'Lint': {                node {                    checkout scm                    runTestsInDocker('lint')                }            }        )    }}def runTestsInDocker(goArgs) {    def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'    measureDuration(script: this, measurementName: 'build') {        executeDocker(dockerImage: dockerImage,  dockerWorkspace: '/go/src') {            sh """            mkdir -p /go/src/github.com/ftr/myGoProj            cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj            cd  /go/src/github.com/ftr/MyGoProj            go ${goArgs}                                    """        }    }}笔记如果您在远程代理上并行运行,您必须记住,在主服务器上执行的设置可能无法在远程从服务器上执行。
随时随地看视频慕课网APP

相关分类

Go
我要回答