#!/usr/bin/env groovy /** * Jenkinsfile */ pipeline { agent{ label 'exec'} options { buildDiscarder( // Only keep the 10 most recent builds logRotator(numToKeepStr:'10')) } environment { projectName = 'CvpRac' emailTo = 'eosplus-dev@arista.com' emailFrom = 'eosplus-dev+jenkins@arista.com' } stages { stage ('Checkout') { steps { checkout scm } } stage ('Install_Requirements') { steps { sh """ [[ -d venv ]] && rm -rf venv virtualenv --python=python2.7 venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt pip install -r dev-requirements.txt pip install codecov """ // Stub dummy .cloudvision.yaml file writeFile file: "test/fixtures/cvp_nodes.yaml", text: "---\n- node: 10.81.111.9\n username: cvpadmin\n password: cvp123\n" } } stage ('Check_style') { steps { sh """ source venv/bin/activate make clean [[ -d report ]] || mkdir report echo "exclude report" >> MANIFEST.in echo "exclude htmlcov" >> MANIFEST.in make check || true make pep8 | tee report/pep8_report.txt make pyflakes make pylint | tee report/pylint.out || true """ step([$class: 'WarningsPublisher', parserConfigurations: [[ parserName: 'Pep8', pattern: 'report/pep8_report.txt' ], [ parserName: 'pylint', pattern: 'report/pylint.out' ]], unstableTotalAll: '0', usePreviousBuildAsReference: true ]) } } stage ('System Test') { steps { sh """ source venv/bin/activate #make tests || true nosetests --with-xunit --all-modules --traverse-namespace --with-coverage --cover-package=cvprac --cover-inclusive --cover-html test/system/* || true """ } post { always { junit keepLongStdio: true, testResults: 'nosetests.xml' publishHTML target: [ reportDir: 'cover', reportFiles: 'index.html', reportName: 'Coverage Report' ] } } } stage ('Docs') { steps { sh """ source venv/bin/activate PYTHONPATH=. pdoc --html --html-dir docs --overwrite cvprac """ } post { always { publishHTML target: [ reportDir: 'docs/cvprac', reportFiles: 'index.html', reportName: 'Module Documentation' ] } } } stage ('Cleanup') { steps { sh 'rm -rf venv' } } } post { failure { mail body: "${env.JOB_NAME} (${env.BUILD_NUMBER}) ${env.projectName} build error " + "is here: ${env.BUILD_URL}\nStarted by ${env.BUILD_CAUSE}" , from: env.emailFrom, //replyTo: env.emailFrom, subject: "${env.projectName} ${env.JOB_NAME} (${env.BUILD_NUMBER}) build failed", to: env.emailTo } success { mail body: "${env.JOB_NAME} (${env.BUILD_NUMBER}) ${env.projectName} build successful\n" + "Started by ${env.BUILD_CAUSE}", from: env.emailFrom, //replyTo: env.emailFrom, subject: "${env.projectName} ${env.JOB_NAME} (${env.BUILD_NUMBER}) build successful", to: env.emailTo } } }