簡體   English   中英

如何在每次測試中重復使用預處理jenkins / groovy

[英]How to re-use pre process jenkins/groovy in each test

我使用以下代碼運行我們的選民,目前我有一個名為Run Tests目標,它使用與最后一個(lint)完全相同的步驟,目前我復制它,我認為這不是一個好的解決方案,是否有很好的方法來避免這種重復,只做一次必要的過程?

我需要所有步驟,直到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 ./...                           
                                """
                            }
                        }
                    }
                },
                ‘Lint’: {
               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 LINT
                               go lint
                              """

                }
                }
        )
    }

        }
    }

您可以使用函數並傳遞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分離出來, 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}                        
            """
        }
    }
}

注意

如果您在遠程代理上並行運行,則必須記住在主服務器上執行的設置可能無法在遠程從服務器上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM