gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:11:59 25 4
gpt4 key购买 nike

我正在使用以下代码来运行我们的投票器,目前我有一个名为 Run Tests 的目标它使用与 last (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 中分离出来,它们可能应该是。

例如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}
"""
}
}
}

注意

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

关于shell - 如何在每个测试中重复使用预处理 jenkins/groovy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53526996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com