【问题标题】:Jenkins - not able to run pipelines from JenkinsfileJenkins - 无法从 Jenkinsfile 运行管道
【发布时间】:2019-10-15 12:41:10
【问题描述】:

我有一个 Jenkinsfile,其中构建和测试在同一个 Slave 上运行。 我的要求是构建必须在一个从属设备(比如 A)上,并且测试必须在另一个从属设备(比如 B)上运行。

我刚刚设置了从机 B,我可以在 Jenkins->管理节点中看到我的从机 A 和 B。 问题是构建阶段工作成功,但我的准备测试和测试阶段没有在从 B 上执行。

以下是发现的问题:

1.) 构建阶段成功后出现以下错误:

"java.lang.NoSuchMethodError: 在步骤 [archive、bat、build、catchError、checkout、deleteDir、dir、dockerFingerprintFrom、dockerFingerprintRun、dockerNode、echo、emailext、emailextrecipients、envVarsForTool、错误中找不到这样的 DSL 方法“代理” , fileExists, findBuildScans, getContext, git, input, isUnix, junit, library, libraryResource, load, lock, mail,里程碑, node, parallel, powershell, properties, publishHTML, pwd, readFile, readTrusted, resolveScm, retry, script, sh , sleep, stage, stash, step, svn, timeout, timestamps, tm, tool, unarchive,unstash, unstash, validateDeclarativePipeline, waitUntil, warnError, withContext, withCredentials, withDockerContainer, withDockerRegistry, withDockerServer, withEnv, wrap, writeFile, ws] 或符号 [all,allOf,always,ant,antFromApache,antOutcome,antTarget,any,anyOf,apiToken,架构,archiveArtifacts,artifactManager,attach,authorizationMatrix,batchFile,booleanParam,branch,brokenBuildSuspects,brokenTestsSuspects, buildButton, buildDiscarder, buildTimestamp, buildTimestamp java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java 在 java.lang.Thread.run(Thread.java:748) 完成:失败 "

2.) 看不到我的分支的阶段“prepare_test”和“测试”,而我可以看到与构建相关的阶段。

附上我的jenkinsfile代码:

pipeline {
    agent none
    options {
        skipDefaultCheckout true
    }
    stages {
        stage('build') {
            agent {
                docker {
                    image 'XYZ'
                    args '-v /etc/localtime:/etc/localtime:ro'
                }
            }
            options { skipDefaultCheckout(true) }
            steps {
                echo '########################################## Building #########################################'
                // trigger the build
                sh 'scm-src/build.sh all-projects'
            }
        }   

   }
} 


pipeline {
    agent {
        label 'laptop-hp'
    }
    stages {
        stage('prepare_test') {
              agent {
                 docker {
                    image 'ABC'
                    args '-v /home/jenkins/.ssh/:/home/jenkins/.ssh:ro -v /etc/localtime:/etc/localtime:ro'
                }
               }
            options { skipDefaultCheckout(true) }
            steps {
                echo '####################################### Prepare Test Environment ############################'
                sh 'scm-src/test.sh prepare'
            }
         }


        stage('test') {
            agent {
              docker {
                     image 'ABC'
                     args '-v /home/jenkins/.ssh/:/home/jenkins/.ssh:ro -v /etc/localtime:/etc/localtime:ro'
                 }
               }

            options { skipDefaultCheckout(true) }
            steps {
               echo '########################################## Testing ##########################################'
                sh 'scm-src/test.sh run'
            }
        }
    }  
}


我的奴隶 B 的名字是 'laptop-hp',如 Jenkinsfile 中所示

Jenkinsfile 有问题还是我错过了我的奴隶 B 上的一些设置?

问候 kdy

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    Declarative Pipeline 中不能有多个 pipeline {} 块。正确的语法是在构建阶段之后立即附加您的测试阶段。然后为docker {}中的每个阶段定义参数label,以在相应的slave上运行。此外,在管道的顶层添加一次选项skipDefaultCheckout true 就足够了。

    您的管道现在应该如下所示:

    pipeline {
        agent none
        options {
            skipDefaultCheckout true
        }
        stages {
            stage('build') {
                agent {
                    docker {
                        image 'XYZ'
                        label 'slave-A'
                        args '-v /etc/localtime:/etc/localtime:ro'
                    }
                }
                steps {
                    echo '########################################## Building #########################################'
                    // trigger the build
                    sh 'scm-src/build.sh all-projects'
                }
            }   
            stage('prepare_test') {
                agent {
                    docker {
                        image 'ABC'
                        label 'laptop-hp'
                        args '-v /home/jenkins/.ssh/:/home/jenkins/.ssh:ro -v /etc/localtime:/etc/localtime:ro'
                    }
                }
                steps {
                    echo '####################################### Prepare Test Environment ############################'
                    sh 'scm-src/test.sh prepare'
                }
            }
            stage('test') {
                agent {
                    docker {
                        image 'ABC'
                        label 'laptop-hp'
                        args '-v /home/jenkins/.ssh/:/home/jenkins/.ssh:ro -v /etc/localtime:/etc/localtime:ro'
                    }
                }
                steps {
                    echo '########################################## Testing ##########################################'
                    sh 'scm-src/test.sh run'
                }
            }
        }
    } 
    

    【讨论】:

      最近更新 更多