Jenkinsfile'并行'指令

lan*_*oxx 11 jenkins jenkins-pipeline

我正在尝试编写一个Jenkinsfile并行执行一系列步骤的程序.目标是有两个agents(aka.nodes).一个应该做一个Windows构建,另一个应该是Linux构建.但是,我不希望这种情况顺序发生,而是并行发生.我试图找到管道中parallel描述的指令的文档- 并行执行任务.

parallel在Jenkins上发现了一个,但似乎文档被破坏了:https://jenkins.io/doc/pipeline/steps/workflow-cps/

parallel: Execute in parallel

org.kohsuke.stapler.NoStaplerConstructorException: 
    There’s no @DataBoundConstructor on any constructor of class
    org.jenkinsci.plugins.workflow.cps.steps.ParallelStep
Run Code Online (Sandbox Code Playgroud)

我应该如何设置一个可以在两个不同代理(一个linux,一个窗口)上并行执行一系列构建步骤的Jenkins文件?

特别是,我应该使用基于声明或脚本的管道DSL吗?

Spe*_*one 13

您可以使用声明式或基于脚本来执行并行工作.可以在此处找到基于脚本的并行文档:https://jenkins.io/doc/book/pipeline/jenkinsfile/#advanced-scripted-pipeline

他们给出了以下例子......

stage('Build') {
    /* .. snip .. */
}

stage('Test') {
    parallel linux: {
        node('linux') {
            checkout scm
            try {
                unstash 'app'
                sh 'make check'
            }
            finally {
                junit '**/target/*.xml'
            }
        }
    },
    windows: {
        node('windows') {
            /* .. snip .. */
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于声明,我相信你会这样做:

stage('Build') {
    steps {
        parallel (
            "Windows" : {
                echo 'done'
            },
            "Linux" : {
                echo 'done'
            }
        )
     }
}
Run Code Online (Sandbox Code Playgroud)