| // -*- mode: groovy -*- | |
| // Jenkins pipeline | |
| // See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ | |
| // mxnet libraries | |
| mx_lib = 'lib/libmxnet.so, lib/libmxnet.a, dmlc-core/libdmlc.a, nnvm/lib/libnnvm.a' | |
| // command to start a docker container | |
| docker_run = 'tests/ci_build/ci_build.sh' | |
| // timeout in minutes | |
| max_time = 1440 | |
| // assign any caught errors here | |
| err = null | |
| // initialize source codes | |
| def init_git() { | |
| deleteDir() | |
| retry(5) { | |
| try { | |
| // Make sure wait long enough for api.github.com request quota. Important: Don't increase the amount of | |
| // retries as this will increase the amount of requests and worsen the throttling | |
| timeout(time: 15, unit: 'MINUTES') { | |
| checkout scm | |
| sh 'git submodule update --init' | |
| sh 'git clean -d -f' | |
| } | |
| } catch (exc) { | |
| deleteDir() | |
| error "Failed to fetch source codes with ${exc}" | |
| sleep 2 | |
| } | |
| } | |
| } | |
| def init_git_win() { | |
| deleteDir() | |
| retry(5) { | |
| try { | |
| // Make sure wait long enough for api.github.com request quota. Important: Don't increase the amount of | |
| // retries as this will increase the amount of requests and worsen the throttling | |
| timeout(time: 15, unit: 'MINUTES') { | |
| checkout scm | |
| bat 'git submodule update --init' | |
| bat 'git clean -d -f' | |
| } | |
| } catch (exc) { | |
| deleteDir() | |
| error "Failed to fetch source codes with ${exc}" | |
| sleep 2 | |
| } | |
| } | |
| } | |
| // Run make. First try to do an incremental make from a previous workspace in hope to | |
| // accelerate the compilation. If something wrong, clean the workspace and then | |
| // build from scratch. | |
| def make(docker_type, make_flag) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| try { | |
| sh "${docker_run} ${docker_type} --dockerbinary docker make ${make_flag}" | |
| } catch (exc) { | |
| echo 'Incremental compilation failed with ${exc}. Fall back to build from scratch' | |
| sh "${docker_run} ${docker_type} --dockerbinary docker sudo make clean" | |
| sh "${docker_run} ${docker_type} --dockerbinary docker sudo make -C amalgamation/ clean" | |
| sh "${docker_run} ${docker_type} --dockerbinary docker make ${make_flag}" | |
| } | |
| } | |
| } | |
| // pack libraries for later use | |
| def pack_lib(name, libs=mx_lib) { | |
| sh """ | |
| echo "Packing ${libs} into ${name}" | |
| echo ${libs} | sed -e 's/,/ /g' | xargs md5sum | |
| """ | |
| stash includes: libs, name: name | |
| } | |
| // unpack libraries saved before | |
| def unpack_lib(name, libs=mx_lib) { | |
| unstash name | |
| sh """ | |
| echo "Unpacked ${libs} from ${name}" | |
| echo ${libs} | sed -e 's/,/ /g' | xargs md5sum | |
| """ | |
| } | |
| // Python unittest for CPU | |
| // Python 2 | |
| def python2_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} --dockerbinary docker find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} --dockerbinary docker PYTHONPATH=./python/ nosetests-2.7 --with-timer --verbose tests/python/unittest" | |
| sh "${docker_run} ${docker_type} --dockerbinary docker PYTHONPATH=./python/ nosetests-2.7 --with-timer --verbose tests/python/train" | |
| } | |
| } | |
| // Python 3 | |
| def python3_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} --dockerbinary docker find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} --dockerbinary docker PYTHONPATH=./python/ nosetests-3.4 --with-timer --verbose tests/python/unittest" | |
| } | |
| } | |
| // GPU test has two parts. 1) run unittest on GPU, 2) compare the results on | |
| // both CPU and GPU | |
| // Python 2 | |
| def python2_gpu_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} PYTHONPATH=./python/ nosetests-2.7 --with-timer --verbose tests/python/gpu" | |
| } | |
| } | |
| // Python 3 | |
| def python3_gpu_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} PYTHONPATH=./python/ nosetests-3.4 --with-timer --verbose tests/python/gpu" | |
| } | |
| } | |
| // Python 2 | |
| def python2_mklml_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} PYTHONPATH=./python/ nosetests-2.7 --with-timer --verbose tests/python/cpu" | |
| } | |
| } | |
| // Python 3 | |
| def python3_mklml_ut(docker_type) { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} ${docker_type} find . -name '*.pyc' -type f -delete" | |
| sh "${docker_run} ${docker_type} PYTHONPATH=./python/ nosetests-3.4 --with-timer --verbose tests/python/cpu" | |
| } | |
| } | |
| try { | |
| stage("Sanity Check") { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/sanity') { | |
| init_git() | |
| sh "python tools/license_header.py check" | |
| make('lint', 'cpplint rcpplint jnilint') | |
| make('lint', 'pylint') | |
| } | |
| } | |
| } | |
| } | |
| stage('Build') { | |
| parallel 'CPU: Openblas': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-cpu') { | |
| init_git() | |
| def flag = """ \ | |
| DEV=1 \ | |
| USE_PROFILER=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| USE_BLAS=openblas \ | |
| -j\$(nproc) | |
| """ | |
| make("cpu", flag) | |
| pack_lib('cpu') | |
| } | |
| } | |
| }, | |
| 'CPU: Clang 3.9': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-cpu-clang') { | |
| init_git() | |
| def flag = """ \ | |
| USE_PROFILER=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| USE_BLAS=openblas \ | |
| USE_OPENMP=0 \ | |
| CXX=clang++-3.9 \ | |
| CC=clang-3.9 \ | |
| -j\$(nproc) | |
| """ | |
| make("cpu_clang", flag) | |
| pack_lib('cpu_clang') | |
| } | |
| } | |
| }, | |
| 'CPU: Clang 5': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-cpu-clang') { | |
| init_git() | |
| def flag = """ \ | |
| USE_PROFILER=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| USE_BLAS=openblas \ | |
| USE_OPENMP=1 \ | |
| CXX=clang++-5.0 \ | |
| CC=clang-5.0 \ | |
| -j\$(nproc) | |
| """ | |
| make("cpu_clang", flag) | |
| pack_lib('cpu_clang') | |
| } | |
| } | |
| }, | |
| 'CPU: MKLML': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-mklml-cpu') { | |
| init_git() | |
| def flag = """ \ | |
| DEV=1 \ | |
| USE_PROFILER=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| USE_BLAS=openblas \ | |
| USE_MKL2017=1 \ | |
| USE_MKL2017_EXPERIMENTAL=1 \ | |
| -j\$(nproc) | |
| """ | |
| make("cpu_mklml", flag) | |
| pack_lib('mklml_cpu') | |
| } | |
| } | |
| }, | |
| 'GPU: MKLML': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-mklml-gpu') { | |
| init_git() | |
| def flag = """ \ | |
| DEV=1 \ | |
| USE_PROFILER=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| USE_BLAS=openblas \ | |
| USE_MKL2017=1 \ | |
| USE_MKL2017_EXPERIMENTAL=1 \ | |
| USE_CUDA=1 \ | |
| USE_CUDA_PATH=/usr/local/cuda \ | |
| USE_CUDNN=1 \ | |
| -j\$(nproc) | |
| """ | |
| make("build_cuda", flag) | |
| pack_lib('mklml_gpu') | |
| } | |
| } | |
| }, | |
| 'GPU: CUDA8.0+cuDNN5': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/build-gpu') { | |
| init_git() | |
| def flag = """ \ | |
| DEV=1 \ | |
| USE_PROFILER=1 \ | |
| USE_BLAS=openblas \ | |
| USE_CUDA=1 \ | |
| USE_CUDA_PATH=/usr/local/cuda \ | |
| USE_CUDNN=1 \ | |
| USE_CPP_PACKAGE=1 \ | |
| -j\$(nproc) | |
| """ | |
| make('build_cuda', flag) | |
| pack_lib('gpu') | |
| stash includes: 'build/cpp-package/example/test_score', name: 'cpp_test_score' | |
| } | |
| } | |
| }, | |
| 'Amalgamation MIN': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/amalgamationmin') { | |
| init_git() | |
| make('cpu', '-C amalgamation/ clean') | |
| make('cpu', '-C amalgamation/ USE_BLAS=openblas MIN=1') | |
| } | |
| } | |
| }, | |
| 'Amalgamation': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/amalgamation') { | |
| init_git() | |
| make('cpu', '-C amalgamation/ clean') | |
| make('cpu', '-C amalgamation/ USE_BLAS=openblas') | |
| } | |
| } | |
| }, | |
| 'Build CPU windows':{ | |
| node('mxnetwindows-cpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/build-cpu') { | |
| withEnv(['OpenBLAS_HOME=C:\\mxnet\\openblas', 'OpenCV_DIR=C:\\mxnet\\opencv_vc14', 'CUDA_PATH=C:\\CUDA\\v8.0']) { | |
| init_git_win() | |
| bat """mkdir build_vc14_cpu | |
| call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat" | |
| cd build_vc14_cpu | |
| cmake -G \"Visual Studio 14 2015 Win64\" -DUSE_CUDA=0 -DUSE_CUDNN=0 -DUSE_NVRTC=0 -DUSE_OPENCV=1 -DUSE_OPENMP=1 -DUSE_PROFILER=1 -DUSE_BLAS=open -DUSE_LAPACK=1 -DUSE_DIST_KVSTORE=0 ${env.WORKSPACE}""" | |
| bat 'C:\\mxnet\\build_vc14_cpu.bat' | |
| bat '''rmdir /s/q pkg_vc14_cpu | |
| mkdir pkg_vc14_cpu\\lib | |
| mkdir pkg_vc14_cpu\\python | |
| mkdir pkg_vc14_cpu\\include | |
| mkdir pkg_vc14_cpu\\build | |
| copy build_vc14_cpu\\Release\\libmxnet.lib pkg_vc14_cpu\\lib | |
| copy build_vc14_cpu\\Release\\libmxnet.dll pkg_vc14_cpu\\build | |
| xcopy python pkg_vc14_cpu\\python /E /I /Y | |
| xcopy include pkg_vc14_cpu\\include /E /I /Y | |
| xcopy dmlc-core\\include pkg_vc14_cpu\\include /E /I /Y | |
| xcopy mshadow\\mshadow pkg_vc14_cpu\\include\\mshadow /E /I /Y | |
| xcopy nnvm\\include pkg_vc14_cpu\\nnvm\\include /E /I /Y | |
| del /Q *.7z | |
| 7z.exe a vc14_cpu.7z pkg_vc14_cpu\\ | |
| ''' | |
| stash includes: 'vc14_cpu.7z', name: 'vc14_cpu' | |
| } | |
| } | |
| } | |
| } | |
| }, | |
| //Todo: Set specific CUDA_ARCh for windows builds in cmake | |
| 'Build GPU windows':{ | |
| node('mxnetwindows-cpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/build-gpu') { | |
| withEnv(['OpenBLAS_HOME=C:\\mxnet\\openblas', 'OpenCV_DIR=C:\\mxnet\\opencv_vc14', 'CUDA_PATH=C:\\CUDA\\v8.0']) { | |
| init_git_win() | |
| bat """mkdir build_vc14_gpu | |
| call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat" | |
| cd build_vc14_gpu | |
| cmake -G \"NMake Makefiles JOM\" -DUSE_CUDA=1 -DUSE_CUDNN=1 -DUSE_NVRTC=1 -DUSE_OPENCV=1 -DUSE_OPENMP=1 -DUSE_PROFILER=1 -DUSE_BLAS=open -DUSE_LAPACK=1 -DUSE_DIST_KVSTORE=0 -DCUDA_ARCH_NAME=All -DCMAKE_CXX_FLAGS_RELEASE="/FS /MD /O2 /Ob2 /DNDEBUG" -DCMAKE_BUILD_TYPE=Release ${env.WORKSPACE}""" | |
| bat 'C:\\mxnet\\build_vc14_gpu.bat' | |
| bat '''rmdir /s/q pkg_vc14_gpu | |
| mkdir pkg_vc14_gpu\\lib | |
| mkdir pkg_vc14_gpu\\python | |
| mkdir pkg_vc14_gpu\\include | |
| mkdir pkg_vc14_gpu\\build | |
| copy build_vc14_gpu\\libmxnet.lib pkg_vc14_gpu\\lib | |
| copy build_vc14_gpu\\libmxnet.dll pkg_vc14_gpu\\build | |
| xcopy python pkg_vc14_gpu\\python /E /I /Y | |
| xcopy include pkg_vc14_gpu\\include /E /I /Y | |
| xcopy dmlc-core\\include pkg_vc14_gpu\\include /E /I /Y | |
| xcopy mshadow\\mshadow pkg_vc14_gpu\\include\\mshadow /E /I /Y | |
| xcopy nnvm\\include pkg_vc14_gpu\\nnvm\\include /E /I /Y | |
| del /Q *.7z | |
| 7z.exe a vc14_gpu.7z pkg_vc14_gpu\\ | |
| ''' | |
| stash includes: 'vc14_gpu.7z', name: 'vc14_gpu' | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } // End of stage('Build') | |
| stage('Unit Test') { | |
| parallel 'Python2: CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-python2-cpu') { | |
| init_git() | |
| unpack_lib('cpu') | |
| python2_ut('cpu') | |
| } | |
| } | |
| }, | |
| 'Python3: CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-python3-cpu') { | |
| init_git() | |
| unpack_lib('cpu') | |
| python3_ut('cpu') | |
| } | |
| } | |
| }, | |
| 'Python2: GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-python2-gpu') { | |
| init_git() | |
| unpack_lib('gpu', mx_lib) | |
| python2_gpu_ut('gpu') | |
| } | |
| } | |
| }, | |
| 'Python3: GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-python3-gpu') { | |
| init_git() | |
| unpack_lib('gpu', mx_lib) | |
| python3_gpu_ut('gpu') | |
| } | |
| } | |
| }, | |
| 'Python2: MKLML-CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-python2-mklml-cpu') { | |
| init_git() | |
| unpack_lib('mklml_cpu') | |
| python2_ut('cpu_mklml') | |
| python2_mklml_ut('cpu_mklml') | |
| } | |
| } | |
| }, | |
| 'Python2: MKLML-GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-python2-mklml-gpu') { | |
| init_git() | |
| unpack_lib('mklml_gpu') | |
| python2_gpu_ut('gpu_mklml') | |
| python2_mklml_ut('gpu_mklml') | |
| } | |
| } | |
| }, | |
| 'Python3: MKLML-CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-python3-mklml-cpu') { | |
| init_git() | |
| unpack_lib('mklml_cpu') | |
| python3_ut('cpu_mklml') | |
| python3_mklml_ut('cpu_mklml') | |
| } | |
| } | |
| }, | |
| 'Python3: MKLML-GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-python3-mklml-gpu') { | |
| init_git() | |
| unpack_lib('mklml_gpu') | |
| python3_gpu_ut('gpu_mklml') | |
| python3_mklml_ut('gpu_mklml') | |
| } | |
| } | |
| }, | |
| 'Scala: CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-scala-cpu') { | |
| init_git() | |
| unpack_lib('cpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} cpu make scalapkg USE_BLAS=openblas" | |
| sh "${docker_run} cpu make scalatest USE_BLAS=openblas" | |
| } | |
| } | |
| } | |
| }, | |
| 'Perl: CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-perl-cpu') { | |
| init_git() | |
| unpack_lib('cpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} cpu ./perl-package/test.sh" | |
| } | |
| } | |
| } | |
| }, | |
| 'Perl: GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-perl-gpu') { | |
| init_git() | |
| unpack_lib('gpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} gpu ./perl-package/test.sh" | |
| } | |
| } | |
| } | |
| }, | |
| 'R: CPU': { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/ut-r-cpu') { | |
| init_git() | |
| unpack_lib('cpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} cpu rm -rf .Renviron" | |
| sh "${docker_run} cpu mkdir -p /workspace/ut-r-cpu/site-library" | |
| sh "${docker_run} cpu make rpkg USE_BLAS=openblas R_LIBS=/workspace/ut-r-cpu/site-library" | |
| sh "${docker_run} cpu R CMD INSTALL --library=/workspace/ut-r-cpu/site-library R-package" | |
| sh "${docker_run} cpu make rpkgtest R_LIBS=/workspace/ut-r-cpu/site-library" | |
| } | |
| } | |
| } | |
| }, | |
| 'R: GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/ut-r-gpu') { | |
| init_git() | |
| unpack_lib('gpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} gpu rm -rf .Renviron" | |
| sh "${docker_run} gpu mkdir -p /workspace/ut-r-gpu/site-library" | |
| sh "${docker_run} gpu make rpkg USE_BLAS=openblas R_LIBS=/workspace/ut-r-gpu/site-library" | |
| sh "${docker_run} gpu R CMD INSTALL --library=/workspace/ut-r-gpu/site-library R-package" | |
| sh "${docker_run} gpu make rpkgtest R_LIBS=/workspace/ut-r-gpu/site-library R_GPU_ENABLE=1" | |
| } | |
| } | |
| } | |
| }, | |
| 'Python 2: CPU Win':{ | |
| node('mxnetwindows-cpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/ut-python-cpu') { | |
| init_git_win() | |
| unstash 'vc14_cpu' | |
| bat '''rmdir /s/q pkg_vc14_cpu | |
| 7z x -y vc14_cpu.7z''' | |
| bat """xcopy C:\\mxnet\\data data /E /I /Y | |
| xcopy C:\\mxnet\\model model /E /I /Y | |
| call activate py2 | |
| set PYTHONPATH=${env.WORKSPACE}\\pkg_vc14_cpu\\python | |
| del /S /Q ${env.WORKSPACE}\\pkg_vc14_cpu\\python\\*.pyc | |
| C:\\mxnet\\test_cpu.bat""" | |
| } | |
| } | |
| } | |
| }, | |
| 'Python 3: CPU Win': { | |
| node('mxnetwindows-cpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/ut-python-cpu') { | |
| init_git_win() | |
| unstash 'vc14_cpu' | |
| bat '''rmdir /s/q pkg_vc14_cpu | |
| 7z x -y vc14_cpu.7z''' | |
| bat """xcopy C:\\mxnet\\data data /E /I /Y | |
| xcopy C:\\mxnet\\model model /E /I /Y | |
| call activate py3 | |
| set PYTHONPATH=${env.WORKSPACE}\\pkg_vc14_cpu\\python | |
| del /S /Q ${env.WORKSPACE}\\pkg_vc14_cpu\\python\\*.pyc | |
| C:\\mxnet\\test_cpu.bat""" | |
| } | |
| } | |
| } | |
| }, | |
| 'Python 2: GPU Win':{ | |
| node('mxnetwindows-gpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/ut-python-gpu') { | |
| init_git_win() | |
| unstash 'vc14_gpu' | |
| bat '''rmdir /s/q pkg_vc14_gpu | |
| 7z x -y vc14_gpu.7z''' | |
| bat """xcopy C:\\mxnet\\data data /E /I /Y | |
| xcopy C:\\mxnet\\model model /E /I /Y | |
| call activate py2 | |
| set PYTHONPATH=${env.WORKSPACE}\\pkg_vc14_gpu\\python | |
| del /S /Q ${env.WORKSPACE}\\pkg_vc14_gpu\\python\\*.pyc | |
| C:\\mxnet\\test_gpu.bat""" | |
| } | |
| } | |
| } | |
| }, | |
| 'Python 3: GPU Win':{ | |
| node('mxnetwindows-gpu') { | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| ws('workspace/ut-python-gpu') { | |
| init_git_win() | |
| unstash 'vc14_gpu' | |
| bat '''rmdir /s/q pkg_vc14_gpu | |
| 7z x -y vc14_gpu.7z''' | |
| bat """xcopy C:\\mxnet\\data data /E /I /Y | |
| xcopy C:\\mxnet\\model model /E /I /Y | |
| call activate py3 | |
| set PYTHONPATH=${env.WORKSPACE}\\pkg_vc14_gpu\\python | |
| del /S /Q ${env.WORKSPACE}\\pkg_vc14_gpu\\python\\*.pyc | |
| C:\\mxnet\\test_gpu.bat""" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| stage('Integration Test') { | |
| parallel 'Python GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/it-python-gpu') { | |
| init_git() | |
| unpack_lib('gpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} gpu --dockerbinary nvidia-docker PYTHONPATH=./python/ python example/image-classification/test_score.py" | |
| } | |
| } | |
| } | |
| }, | |
| 'Caffe GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/it-caffe') { | |
| init_git() | |
| unpack_lib('gpu') | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} caffe_gpu --dockerbinary nvidia-docker PYTHONPATH=/caffe/python:./python python tools/caffe_converter/test_converter.py" | |
| } | |
| } | |
| } | |
| }, | |
| 'cpp-package GPU': { | |
| node('mxnetlinux-gpu') { | |
| ws('workspace/it-cpp-package') { | |
| init_git() | |
| unpack_lib('gpu') | |
| unstash 'cpp_test_score' | |
| timeout(time: max_time, unit: 'MINUTES') { | |
| sh "${docker_run} gpu --dockerbinary nvidia-docker cpp-package/tests/ci_test.sh" | |
| } | |
| } | |
| } | |
| } | |
| } | |
| stage('Deploy') { | |
| node('mxnetlinux-cpu') { | |
| ws('workspace/docs') { | |
| init_git() | |
| sh "make clean" | |
| sh "make docs" | |
| } | |
| } | |
| } | |
| // set build status to success at the end | |
| currentBuild.result = "SUCCESS" | |
| } catch (caughtError) { | |
| node("mxnetlinux-cpu") { | |
| sh "echo caught ${caughtError}" | |
| err = caughtError | |
| currentBuild.result = "FAILURE" | |
| } | |
| } finally { | |
| node("mxnetlinux-cpu") { | |
| // Only send email if master failed | |
| if (currentBuild.result == "FAILURE" && env.BRANCH_NAME == "master") { | |
| emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}' | |
| } | |
| // Remember to rethrow so the build is marked as failing | |
| if (err) { | |
| throw err | |
| } | |
| } | |
| } |