Python 使用pytest的单元测试在Jenkins上不起作用:错误:脚本返回退出代码2

Python 使用pytest的单元测试在Jenkins上不起作用:错误:脚本返回退出代码2,python,jenkins,pytest,devops,jenkins-groovy,Python,Jenkins,Pytest,Devops,Jenkins Groovy,我运行了pytest命令: python-m pytest tests/encoding/unit/*--verbose--junitxml'results.xml' 我得到了以下错误: 错误:脚本返回退出代码2 请在下面找到我的文件: //#!/bin/bash //#!groovy def withConda(Closure body) { //CONDA INSTALLATION-------------------

我运行了pytest命令:

python-m pytest tests/encoding/unit/*--verbose--junitxml'results.xml'

我得到了以下错误:

错误:脚本返回退出代码2

请在下面找到我的文件:

        //#!/bin/bash
        //#!groovy

        def withConda(Closure body) {
            //CONDA INSTALLATION-------------------------------------
            env.CONDA_ZIP               = 'miniconda3.sh'
            env.CERTS_ZIP               = 'certs.zip'
            env.CONDA_PATH              = "${WORKSPACE}/bin/anaconda3"
            env.CONDA_BIN_DIR           = "${env.CONDA_PATH}/bin"

            //GENERIC DIRECTORIES------------------------------------
            env.DOWNLOADS               = "${WORKSPACE}/downloads"
            env.WORKSPACE_BIN           = "${WORKSPACE}/bin"

            if ( fileExists("${env.CONDA_PATH}/tls-ca-bundle.pem") ) {
                echo "=====================>> CONDA ALREADY INSTALLED! <<====================="
            } else {
                echo "=====================>> INSTALLING CONDA! <<====================="
                stage('Installing Miniconda3') {
                    dir("${env.DOWNLOADS}") {
                        sh "curl -k -o ${env.CONDA_ZIP} https://nexus.com/nexus/content/repositories/third-party-applications/continuum/miniconda3/4.4.10/Miniconda3-latest-Linux-x86_64.sh  --insecure"
                        sh "chmod +x ${env.CONDA_ZIP}"
                        sh "curl -k -o ${env.CERTS_ZIP} 'https://nexus.com/nexus/service/local/repositories/ib-cto-releases/content/com/cacerts/java-cacerts/3.1.0/java-cacerts-3.1.0.zip' --insecure"

                        dir("${env.CONDA_PATH}") {
                            sh "unzip  -d . -u ${env.DOWNLOADS}/${env.CERTS_ZIP}"
                            //sh 'ls -lart'
                            sh "bash ${env.DOWNLOADS}/${env.CONDA_ZIP} -b -f -p ."

                        }
                    }
                }
            }

            stage('Setting Up Conda Configuration') {
                dir ("${env.CONDA_PATH}") {
                    sh "mv ${env.JENKINS_PIPELINES_PATH}/.condarc ./.condarc"
                    sh "sed -i 's+TLS_PEM_BUNDLE_PATH+${env.CONDA_PATH}/tls-ca-bundle.pem+'  .condarc"
                }
                withEnv(["PATH+CONDA_BIN_DIR=${env.CONDA_BIN_DIR}"])  {
                    sh 'python -m conda update conda -y'
                    //sh 'conda update conda -y'
                    //sh 'conda update --all -y'
                    sh 'conda env list'
                    //sh 'conda remove --name dev --all -y'

                    withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: "d398a781-1860-4c2b-96b6-dbd5442f9a82", usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
                        body()
                    }
                }
            }
        }


        def withSpark(Closure body) {
            //JAVA INSTALLATION-------------------------------------
            //env.JAVA_ZIP = 'java.sh'
            stage('Setting Up Spark Configuration')
                dir("${env.DOWNLOADS}") {
                    echo "=====================>> INSTALLING JAVA! <<====================="
                    // cannot find java on Nexus
                    sh "curl -k -o ${env.JAVA_ZIP} https://nexus.com/nexus/content/repositories/third-party-applications/?? --insecure"
                    //echo "=====================>> INSTALLING SPARK! <<====================="
                    //sh "curl -k -o ${env.JAVA_ZIP} https://nexus.com/nexus/content/repositories/third-party-applications/?? --insecure"
                }

        }

        def pullRepos() {
            //BITBUCKET SETUP----------------------------------------
            env.BBS_REPO_URL            = 'https://stash.com:8443/scm/qafrdrnd/dataprocessing.git'
            env.BBS_REPO_PATH           = "${WORKSPACE}/bitbucket/jenkins"
            env.JENKINS_PIPELINES_PATH  = "${env.BBS_REPO_PATH}"

            // Download the repos regardless to pull in any new changes...

            stage("Checkout BBS RM Repo: ${env.BBS_REPO_URL}") {
                //Setup some useful environment variables to used through the pipeline...
                dir ("${env.BBS_REPO_PATH}") {
                    checkout([$class: 'GitSCM',
                              branches: [[name: '']],
                              doGenerateSubmoduleConfigurations: false,
                              extensions: [],
                              submoduleCfg: [],
                              //userRemoteConfigs: [[credentialsId: "${params.AD_CREDENTIALS}", url: "${env.BBS_REPO_URL}"]]])
                              userRemoteConfigs: [[credentialsId: "d398a781-1860-4c2b-96b6-dbd5442f9a82", url: "${env.BBS_REPO_URL}"]]])

                }
            }
        }


        //machine that executes an entire workflow
        node('Linux') {
            //GENERIC DIRECTORIES------------------------------------
            env.DOWNLOADS               = "${WORKSPACE}/downloads"
            env.WORKSPACE_BIN           = "${WORKSPACE}/bin"

            //Initialise the pipeline environment, bringing in any required scripts and configuration files...
            //deleteDir()
            pullRepos()

            withConda {
                stage("Running unit-test with pytest") {

                    dir("${env.BBS_REPO_PATH}") {
                        sh 'conda install pytest -y'
                        sh 'conda install ipython -y'
                        sh 'conda install numpy -y'
                        sh 'conda install pandas -y'
                        sh 'conda install pyspark -y'
                        sh '''
                            python -m pytest tests/encoding/unit/* --verbose --junit-xml 'results.xml'
                        '''
                    }
                }
            }
        }

/#/bin/bash
//#!棒极了
def带CONDA(封闭体){
//康达装置-------------------------------------
env.CONDA_ZIP='miniconda3.sh'
env.CERTS_ZIP='CERTS.ZIP'
env.CONDA_PATH=“${WORKSPACE}/bin/anaconda3”
env.CONDA_BIN_DIR=“${env.CONDA_PATH}/BIN”
//通用目录------------------------------------
env.DOWNLOADS=“${WORKSPACE}/DOWNLOADS”
env.WORKSPACE_BIN=“${WORKSPACE}/BIN”
if(fileExists(“${env.CONDA_PATH}/tls ca bundle.pem”)){

echo“=============>>CONDA已经安装!安装CONDA!安装JAVA!安装SPARK!如果内存正常,pytest不会使用通配符*字符。我认为您调用--junit xl的方式也是错误的。如果要运行tests/encoding/unit文件夹中的所有内容,您应该运行:

python -m pytest tests/encoding/unit --verbose --junit-xml=results.xml

有关更多信息,请参阅。

你好,Florian,您的Jenkins文件非常扩展,有人很难全部阅读。我认为,调试代码并确定产生问题的代码行是一个好主意;并用这一行更新问题。很多时候,问题是我们不知道专业代码在哪里/什么地方BLEMM:-)@ggeop确实如此。但我已经在顶部提到,这是从我运行pytest的那一行开始的。我认为,我只需要添加
|true
以使构建成功,然后使用
sed
解析result.xml,然后捕获失败次数并设置一个容忍阈值(如:0表示不允许试验失败)