为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标琳琳 2023-05-15 10:07:35
我使用以下代码来运行我们的投票器,目前我有一个目标,它使用与最后一个 (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 ./...                                                           """                            }                        }                    }                },
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以使用函数并传递 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}                        

            """

        }

    }

}

笔记


如果您在远程代理上并行运行,您必须记住,在主服务器上执行的设置可能无法在远程从服务器上执行。


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信