我在Jenkins服务器中使用Groogy DSL插件。我意识到这个步骤在许多地方和工作中都会重复。
steps {
shell('''#!/bin/bash -ex
|aws s3 cp s3://${STACK_S3_BUCKET_NAME}/file myfile --region ${AWS_REGION}
|aws s3 cp s3://${STACK_S3_BUCKET_NAME}/otherfile .
|
|'''.stripMargin())
我是使用Groovy的新手,我想创建一种自定义的Groovy Step或Closure来避免这个过程,我想做类似的事情:
awsS3cp {
from: '${ORIGIN}'
to: '${DESTINATION}'
}
然后实现这样的事情:
def awsS3cp { context ->
shell('''#!/bin/bash -ex
|aws s3 cp s3://$from $to
|'''.stripMargin())
}
我是这样做的,它失败了:
def awsS3cp(String from, String to) {
shell("""#!/bin/bash -ex
|echo 'copy from $from to $to'
|""".stripMargin())
}
def createEnvironmentJob = freeStyleJob( jobName )
createEnvironmentJob.with{
description( jobDescription )
steps {
awsS3cp ("S3-SOURCE-BUCKET","S3-TARGET-BUCKET")
}
}
错误输出:
No signature of method: create_environment.shell() is applicable for argument types: (java.lang.String) values: [#!/bin/bash -ex
echo 'copy from S3-SOURCE-BUCKET to S3-TARGET-BUCKET'
]
Possible solutions: queue(java.lang.String), sleep(long), every(), grep(), job(java.lang.String), queue(javaposse.jobdsl.dsl.Job)
Finished: FAILURE
答案 0 :(得分:0)
一种选择是在外面定义一个函数:
def awsS3cp(String from, String to) {
return sh("""#!/bin/bash -ex
|aws s3 cp s3://$from $to
|""".stripMargin())
}
然后,在管道定义中调用它:
steps {
awsS3cp('source', 'destination')
}