当前位置: 首页 > 知识库问答 >
问题:

Jenkins - 无法从 Jenkinsfile 运行管道

董阳平
2023-03-14

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

我刚刚设置了奴隶B,我可以看到我的奴隶A和B都在Jenkins-

以下是看到的问题:

1.)在构建阶段成功后,我得到以下错误:

" java.lang.NoSuchMethodError:在步骤[archive,bat,build,catchError,checkout,deleteDir,Dir,dockerFingerprintFrom,dockerFingerprintRun,dockerNode,echo,emailext,emailextrecipients,envVarsForTool,Error,fileExists,findBuildScans,getContext,git,input,isUnix,junit,library,libraryResource,load,lock,mail,milestone,Node,parallel,powershell,properties,publishHTML antTarget、any、anyOf、apiToken、archiveArtifacts、artifactManager、attach、authorizationMatrix、batchFile、booleanParam、branch、brokenBuildSuspects、brokenTestsSuspects、buildButton、buildDiscarder、buildTimestamp、build timestamp Java . util . concurrent . threadpool executor$worker . run(threadpool executor . Java at Java . lang . thread . run(thread . Java:748)Finished:FAILURE "

2.)没有看到我的分支的“准备测试”和“测试”阶段,但我可以看到与构建相关的阶段。

附上我的Jenkins文件代码:

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'
            }
        }
    }  
}


在Jenkinsfile中,我的从属服务器B的名称是“laptop-hp”

Jenkinsfile有问题吗?还是我错过了从机B上的一些设置?

关于kdy

共有1个答案

石臻
2023-03-14

在一个声明性管道中,您不能有多个管道{}块。正确的语法是在构建阶段之后立即附加您的测试阶段。然后为docker{}中的每个阶段定义参数标签以在相应的从站上运行。此外,在管道的顶层添加一次选项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'
            }
        }
    }
} 
 类似资料:
  • 问题内容: 我能够运行以下shell脚本,但无法从Jenkins管道代码运行。 尝试1。 输出: 尝试2: 尝试过sh“”“ 输出 : 美元符号后的非法字符串体字符;解决方案:要么转义文字美元符号,要么将值表达式括起来 有人能帮我吗? 问题答案: 这应该工作。 您还需要在调用下面的新subshel​​l时转义$

  • 问题内容: 我目前正在尝试从管道中将groovy脚本作为节点之一运行,但是遇到了以下错误: 另外,我尝试以Groovy的方式安装插件,但由于某种原因,它将无法安装。每当我刷新工具页面时,安装程​​序就会消失。我安装groovy错误吗?请帮忙! 编辑:相关数据 而且ideainspect.groovy文件是shebang的可执行文件,这可能是问题所在。 问题答案: 您的jenkins用户在使用它时会

  • 问题内容: 我已经尝试过将docker和jenkins一起使用,两者都安装在我的机器上(w10),并且我使用jankins运行docker镜像。但是,当我按照jenkins文档中的示例(来自doc的示例)时,它不起作用。不涉及时,不同的管道脚本可以工作,我还尝试从jenkins config接口添加。 管道脚本 错误堆栈 我在SO上发现了类似的问题\(相同但没有明确的解决方案) 问题答案: 您的工

  • 我使用Jenkins在docker容器中使用以下命令 码头工人拉詹金斯/詹金斯 docker run-p8080:8080--name=jenkins master jenkins/jenkins 获取此错误 calc.py/var/jenkins_home/workspace/pythoncalculator@tmp/耐用-b7e99e01/脚本。sh:1:/var/jenkins\u home

  • 我查看了以下文档:https://docs.sonarqube.org/display/scan/analysy+with+sonarqube+scanner+for+jenkins 然而,我不能让它工作。首先,文档似乎需要更新,因为示例中的语法是错误的。在最新版本的声明性管道中,在-tag中是必需的。此外,-关键字只有在-标记中才会解析。 null

  • 问题内容: 我正在尝试为iOS应用程序设置CI环境。到目前为止,我已经从命令行获得了xcodebuild来正确构建测试版本,但是当Jenkins尝试执行它时,我在控制台中读取了以下内容: 有什么想法吗?我对詹金斯(Jenkins)相当陌生,但我已尽我所能用Google Fu回答了这个问题,但没有成功。我最初确实是通过手动安装Jenkins(从技术上来说是自制的)遇到了这个问题,但是最近使用了OSX