forked from tenable/pyTenable
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
101 lines (86 loc) · 2.94 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
@Library('tenable.common')
import com.tenable.jenkins.builds.*
import com.tenable.jenkins.common.*
import com.tenable.jenkins.Constants
import com.tenable.jenkins.builds.snyk.*
import com.tenable.jenkins.builds.nexusiq.*
pythonVersion = [ '3.6', '3.7', '3.8', '3.9' ]
bparams = new BuildParams(this, 1083)
bparams.channels = '#jenkins-devel'
bparams.snykContainer = 'python:3.6-buster'
bparams.snykRegistry = ''
bparams.snykType = 'PYTHON'
bparams.nexusiqtype = 'PREQUIREMENT'
GlobalContext.put('appid', bparams.appid)
common = new Common(this)
buildsCommon = new BuildsCommon(this)
void unittests(String version) {
stage("unittest${version}") {
node(Constants.DOCKERNODE) {
buildsCommon.cleanup()
checkout scm
withContainer(image: "python:${version}-buster", registry: '', inside: '-u root --privileged -v /var/run/docker.sock:/var/run/docker.sock') {
try {
sh """
python -m pip install --upgrade pip
pip install -r test-requirements.txt
pip install -r requirements.txt
pytest --vcr-record=none --cov-report html:test-reports/coverage --junitxml=test-reports/junit/results.xml --junit-prefix=${version} --cov=tenable tests
find . -name *.html
find . -name *.xml
"""
}
catch(ex) {
throw ex
}
finally {
if (fileExists ('test-reports/coverage/index.html')) {
publishHTML(
[allowMissing: true,
alwaysLinkToLastBuild: true,
keepAll : true,
reportDir : 'test-reports/coverage/',
reportFiles : 'index.html',
reportName : "Coverage${version}",
reportTitles: "Coverage${version}"])
}
step([$class: 'JUnitResultArchiver', testResults: 'test-reports/junit/*.xml'])
}
}
}
}
}
try {
Map tasks = [ : ]
pythonVersion.each {
version ->
tasks[version] = { unittests(version) }
}
tasks['snyk'] = {
stage('snyk') {
Snyk snyk = new Snyk(this, bparams)
snyk.execute()
}
}
tasks['sonarqube'] = {
stage('sonarqube') {
SonarQube.execute(this, bparams)
}
}
tasks['nexusiq'] = {
stage('nexusiq') {
Nexusiq.execute(this, bparams)
}
}
parallel(tasks)
common.setResultIfNotSet(Constants.JSUCCESS)
}
catch (ex) {
common.logException(ex)
common.setResultAbortedOrFailure()
throw ex
}
finally {
common.setResultIfNotSet(Constants.JFAILURE)
buildsCommon.notifyPostBuild(bparams)
}