亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在每個測試中重復使用預處理 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 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號