Python 使用pytest的单元测试在Jenkins上不起作用:错误:脚本返回退出代码2
我运行了pytest命令: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-------------------
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表示不允许试验失败)