首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins:如何使用参数跳过管道并行步骤?

Jenkins:如何使用参数跳过管道并行步骤?
EN

Stack Overflow用户
提问于 2017-05-12 08:48:22
回答 1查看 2.9K关注 0票数 0

我有一条管道,并行运行一系列不同的测试。有时其中一个测试失败,我只想重新启动该测试。在使用管道之前,我使用了矩阵重定向插件来实现这一点。我想用管道实现同样的目标,我相信实现这一目标的一种方法是通过构建参数。

我有以下管道:

代码语言:javascript
复制
pipeline {
    agent any

    parameters {
        booleanParam(name: 'RUBY_LINUX', defaultValue: true, description: 'Ruby unit tests on Linux')
        booleanParam(name: 'RUBY_MACOS', defaultValue: true, description: 'Ruby unit tests on macOS')
    }

    stages {
        stage('test') {
            steps {
                parallel(
                    'Ruby unit tests on Linux': {
                        node('linux') {
                            if (params.RUBY_LINUX) {
                                echo 'Ran test.'
                            } else {
                                echo 'Skipped test.'
                            }
                        }
                    },
                    'Ruby unit tests on macOS': {
                        node('macos') {
                            if (params.RUBY_MACOS) {
                                echo 'Ran test.'
                            } else {
                                echo 'Skipped test.'
                            }
                        }
                    }
                )
            }
        }
    }
}

但这给了我一个错误:

代码语言:javascript
复制
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 24: Expected a step @ line 24, column 13.
               if (params.RUBY_LINUX) {
               ^

WorkflowScript: 41: Expected a step @ line 41, column 13.
               if (params.RUBY_MACOS) {
               ^

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-12 13:16:43

如果要在声明性管道语法中使用Groovy表达式,可以使用脚本步骤,也可以切换到脚本管道。

有关语法比较,请参阅以下链接:https://jenkins.io/doc/book/pipeline/syntax/

下面的代码通过在脚本步骤中包装并行部分来修复您的问题:

代码语言:javascript
复制
...
stages {
    stage('test') {
        steps {
            script {
                parallel(
                    'Ruby unit tests on Linux': {
                        node('linux') {
                            if (params.RUBY_LINUX) {
                                echo 'Ran test.'
                            } else {
                                echo 'Skipped test.'
                            }
                       }
                     },
                    'Ruby unit tests on macOS': {
                        node('macos') {
                            if (params.RUBY_MACOS) {
                                echo 'Ran test.'
                            } else {
                                echo 'Skipped test.'
                            }
                        }
                    }
                )
            }
        }
    }
}
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43933311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档