Jenkins动态并行Stage创建报错:找不到DSL方法‘steps’
Jenkins并行Stage报错解决:No such DSL method 'steps' found
问题场景
我有4个用于触发webhook的curl命令,它们仅单个参数不同。因此我希望提取该curl命令,创建可遍历各唯一参数并调用curl命令的并行Stage。我编写了如下代码:
stage('Push Artifactory Images to ECR') { steps { script { def images = [ ['stageName': 'Push Metadata Service Image', 'image': env.METADATA_SERVICE_IMAGE], ['stageName': 'Push UI Image', 'image': env.UI_IMAGE], ['stageName': 'Push AWS Batch Default Image', 'image': env.BATCH_IMAGE], ['stageName': 'Push Studio Sample Image', 'image': env.NOTEBOOK_IMAGE] ] def parallelStages = [:] images.each { image -> parallelStages[image.stageName] = { stage(image.stageName) { steps { script { sh """ curl ${env.ECR_PUSH_URL} -X POST -H 'Content-Type: application/json' \\ -d '{"parameters":{"aws_account_id": "${env.AWS_ACCOUNT_ID}", "business_service": "${env.BUSINESS_SERVICE}", "moniker": "${env.MONIKER}", "region": "${env.REGION}", "role_arn": "arn:aws:iam::${env.AWS_ACCOUNT_ID}:role/Deployer", "sourceRepository": "${image.image}"}}' """ } } } } } } } }
运行后出现如下错误:
java.lang.NoSuchMethodError: No such DSL method 'steps' found among steps
解决方案
错误根源是在Groovy闭包定义并行Stage时,内部嵌套的stage块不需要再使用steps和内层script——因为闭包本身已经处于脚本上下文,直接执行命令即可。同时需要补充parallel(parallelStages)来触发并行执行,确保代码块正确闭合。
修正后的完整代码:
stage('Push Artifactory Images to ECR') { steps { script { def images = [ ['stageName': 'Push Metadata Service Image', 'image': env.METADATA_SERVICE_IMAGE], ['stageName': 'Push UI Image', 'image': env.UI_IMAGE], ['stageName': 'Push AWS Batch Default Image', 'image': env.BATCH_IMAGE], ['stageName': 'Push Studio Sample Image', 'image': env.NOTEBOOK_IMAGE] ] def parallelStages = [:] images.each { image -> parallelStages[image.stageName] = { stage(image.stageName) { sh """ curl ${env.ECR_PUSH_URL} -X POST -H 'Content-Type: application/json' \\ -d '{"parameters":{"aws_account_id": "${env.AWS_ACCOUNT_ID}", "business_service": "${env.BUSINESS_SERVICE}", "moniker": "${env.MONIKER}", "region": "${env.REGION}", "role_arn": "arn:aws:iam::${env.AWS_ACCOUNT_ID}:role/Deployer", "sourceRepository": "${image.image}"}}' """ } } } // 启动并行执行 parallel(parallelStages) } } }
关键修正点
- 移除嵌套
stage内的steps和内层script块,直接在stage闭包中执行sh命令 - 添加
parallel(parallelStages)语句,触发所有定义好的并行Stage执行 - 确保所有代码块(
script、stage)都正确闭合
内容的提问来源于stack exchange,提问作者Riley Hun
相关产品推荐
相关产品推荐

