我的工作方式如下
def runTestsInDocker(arg) {
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoPro
go ${arg}
"""
}
}
当我只有1个参数时,此参数可以正常工作 现在,我想添加新参数,以便可以执行以下操作
def runTestsInDocker(arg,arg2,arg3) {
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoPro
go ${arg}
go ${arg1}
go ${arg2}
"""
}
}
但是这里有两个问题
1。如果我只需要传递一个参数会怎样?
在Groovy中是否有更好的方法来处理它?
更新,假设我需要使用1个参数调用该函数
def runTestsInDocker(Map<String,String> params) {
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoPro
go ${params.get('arg')}
"""
}
}
其他功能
def runTestsInDocker(Map<String,String> params) {
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoPro
go ${params.get('arg')}
go ${params.get('arg1')}
"""
}
}
我事先不知道需要使用多少参数,那么如何动态地进行设置呢?
答案 0 :(得分:2)
您可以将Map
发送到方法来调用multiple parameters
def runTestsInDocker( Map<String,String> params) {
并使用地图调用它:
def params = [ arg:'value', arg1:'value1' ];
runTestsInDocker(params);
内部方法通过以下方式动态遍历地图:
params.each{ k, v -> go ${v} }
答案 1 :(得分:1)
看看您的目标示例,这似乎是varargs的完美案例。
def runTestsInDocker(String... args) {
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoPro
go ${args.join('\ngo ')}
"""
}
}
}
如果您真的只想在特定位置传递参数,则此方法签名也允许这样做。
runTestsInDocker(null,'foo',null,'bar')
// OR
def args = []
args[2] = 'foo'
args[5] = 'bar'
runTestsInDocker(args as String[])
如果由于某种原因,您确实想要具有不同名称和语义的参数,那么我将研究以下内容:
runTestsInDocker(String arg = null, String arg1 = null, String arg2 = null)
runTestsInDocker(Map map)
runTestsInDocker(MyPogo args)
。与map相比,这提供了类型检查,并且仅用您需要的值来构造POGO非常容易。