forked from LopezMDidac/edd-oct-flask-devops
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJenkinsfile
140 lines (138 loc) · 4.89 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
void setBuildStatus(String message, String state) {
step([
$class: "GitHubCommitStatusSetter",
contextSource: [
$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"
],
errorHandlers: [
[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]
],
statusResultSource: [ $class: "ConditionalStatusResultSource",
results: [[$class: "AnyBuildResult", message: message, state: state]]
]
]);
}
pipeline {
agent any
environment {
DEPLOY_URL = ''
GROUP_NAME = 'group3'
GROUP_PORT = '5003'
PROJECT_NAME = 'flask-testing'
PACKAGE_NAME = 'apis'
LOCAL_BRANCH_NAME = ''
CURRENT_GIT_COMMIT = ''
CONTAINER_NAME = ''
CURRENT_IMAGE_NAME = ''
PREVIOUS_IMAGE_NAME = ''
MAIL_LIST = "[email protected]"
}
stages {
stage('Info') {
steps {
echo 'Starting'
script {
def scmVars = checkout scm
setBuildStatus("Build running...", 'PENDING');
LOCAL_BRANCH_NAME = scmVars.GIT_BRANCH
CURRENT_GIT_COMMIT = scmVars.GIT_COMMIT
DEPLOY_URL = BUILD_URL.split('/')[2].split(':')[0]
echo DEPLOY_URL
echo "Branch Name : " + LOCAL_BRANCH_NAME
echo "Commit SHA : " + CURRENT_GIT_COMMIT
CONTAINER_NAME = "testing-flask-$GROUP_NAME"
TEMPLATE_IMAGE_NAME = "testing-flask-image-$GROUP_NAME"
CURRENT_IMAGE_NAME = "$TEMPLATE_IMAGE_NAME-$CURRENT_GIT_COMMIT"
PREVIOUS_IMAGE_NAME = sh (
script: "docker ps -f name=$CONTAINER_NAME -q | xargs --no-run-if-empty docker inspect --format='{{.Config.Image}}' $CONTAINER_NAME",
returnStdout: true
).trim()
echo "Container Name : " + CONTAINER_NAME
echo "Current Image Name : " + CURRENT_IMAGE_NAME
echo "previous Image Name : $PREVIOUS_IMAGE_NAME"
}
}
}
stage('Linter') {
agent {
docker {
image 'pylint:latest'
}
}
steps {
echo 'Linting...'
sh "pip install -r requirements.txt"
sh "pylint -f parseable --rcfile=.pylintrc $PACKAGE_NAME | tee pylint.out"
recordIssues(
enabledForFailure: true,
ignoreFailedBuilds: false,
tools: [ pyLint(pattern: 'pylint.out') ],
qualityGates: [
[threshold: 16, type: 'TOTAL_LOW', unstable: true],
[threshold: 11, type: 'TOTAL_NORMAL', unstable: true],
[threshold: 1, type: 'TOTAL_HIGH', unstable: true],
[threshold: 1, type: 'TOTAL_ERROR', unstable: true]
]
)
}
}
stage('Test') {
agent {
docker {
image 'pytest-cov:latest'
}
}
steps {
echo 'Testing...'
sh "pip install -r requirements.txt"
sh "py.test --cov -v --junitxml=unittests.xml --cov=$PACKAGE_NAME --cov-config=.coveragerc --cov-report=xml:coverage.xml"
cobertura(
autoUpdateHealth: false,
autoUpdateStability: false,
coberturaReportFile: '**/coverage.xml',
failUnhealthy: false,
failUnstable: false,
maxNumberOfBuilds: 10,
onlyStable: true,
sourceEncoding: 'ASCII',
zoomCoverageChart: false,
lineCoverageTargets: '80, 80, 80',
conditionalCoverageTargets: '80, 80, 80',
classCoverageTargets: '80, 80, 80',
fileCoverageTargets: '80, 80, 80',
)
}
}
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
stage('Health-check') {
steps {
echo "Health-check"
}
}
}
post {
failure {
script {
sh "echo POST-ACTION failure"
}
}
success {
script {
sh "echo POST-ACTION success"
}
}
always {
sh "echo POST-ACTION always"
setBuildStatus("Build results is ${currentBuild.result}", currentBuild.result);
}
}
}