Facilitate tracking of unit-tests on CloudWatch CI/CD dashboard
Currently, there's no dashboard that tracks `nosetests` or similar runs. As of now, everytime the CI pipeline is triggered and wherever the artifacts are generated (nosetest_unittest.xml, nosetest_train,xml, etc). However, that's that.
Unit test tracking can be achieved in 2 stages:
Unittest-specfiic timing information is stored in job-name-xml files using the `archiveArtifact` utility (provided by Jenkins Job DSL plugin https://jenkinsci.github.io/job-dsl-plugin/)
Uploading artifacts to S3 is provided by Pipeline:AWS Steps plugin (https://github.com/jenkinsci/pipeline-aws-plugin)
Steps followed:
Jenkins → Manage Jenkins → Configure System → Global Properties (helps setup global environment variables visible in every job)
Instead of uploading unittest data to S3 for every single PR, design choice was made to upload it only for PR-merge (when PR gets merged into the master i.e. commit made to master).
Why? Tracking for every commit of PRs would be unfeasible, and unstable. On the other hand, PR merges are generally stable and would be "relevant" to tracking health of the master build.
Q. Why upload to S3 instead of directly putting in CloudWatch?
A. Jenkins Master/Slave are already burdened by the load of running CI pipelines for branches & PRs. Moreover, data storage of unit-tests on S3 allows permanence. Offloading data to S3 resolves both storage and load problems.
Q. What happens to S3 upload if jobs fails?
A. As it stands, if the job fails, S3 upload fails. We catch the exception. We don't want the CI job to fail if data doesn't get uploaded to S3. Master build will be re triggered for next PR merge.