summaryrefslogtreecommitdiffstats
path: root/Jenkinsfile
diff options
context:
space:
mode:
Diffstat (limited to 'Jenkinsfile')
-rw-r--r--Jenkinsfile136
1 files changed, 136 insertions, 0 deletions
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..74913d6
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,136 @@
+#!/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
+ }
+ }
+}