Jenkinsfile-tmp-ran 32 KB
Newer Older
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
#!/bin/groovy
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (the "License"); you may not use this file
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

// Template Jenkins Declarative Pipeline script to run Test w/ RF HW

// Location of the python executor node shall be in the same subnet as the others servers
def pythonExecutor = params.pythonExecutor

// Location of the test XML file to be run
def testXMLFile = params.pythonTestXmlFile
30
31
def mainPythonAllXmlFiles = ""
def buildStageStatus = true
32
33
34
35

// Name of the test stage
def testStageName = params.pipelineTestStageName

36
37
38
// Name of the phone resource
def ciSmartPhoneResource = params.smartphonesResource

39
40
41
// Name of the phone resource
def ciEpcResource = params.epcResource

42
43
44
45
46
47
48
49
50
51
52
53
54
// Terminate Status
def termUE = 0
def termENB = 1
def termSPGW = 2
def termMME = 3
def termHSS = 4
def termStatusArray = new Boolean[termHSS + 1]
termStatusArray[termUE] = false
termStatusArray[termENB] = false
termStatusArray[termSPGW] = false
termStatusArray[termMME] = false
termStatusArray[termHSS] = false

Raphael Defosseux's avatar
Raphael Defosseux committed
55
56
// Global Parameters. Normally they should be populated when the master job
// triggers the slave job with parameters
57
58
59
def eNB_Repository
def eNB_Branch
def eNB_CommitID
Raphael Defosseux's avatar
Raphael Defosseux committed
60
def eNB_AllowMergeRequestProcess = false
61
def eNB_TargetBranch
62
63
64

pipeline {
    agent {
65
        label pythonExecutor
66
67
68
    }
    options {
        disableConcurrentBuilds()
69
        ansiColor('xterm')
70
        lock(extra: [[resource: ciEpcResource]], resource: ciSmartPhoneResource)
71
72
73
74
75
76
    }
    // the following parameter options are commented out so it shows the ones
    // that you SHALL have to run the job.
    // You can use them as template
    /*
    parameters {
77
78
79
80
81
        //node-test parameters
        string(name: 'pythonExecutor', defaultValue: 'nodea', description: 'Node where the pipeline - python scripts will be executed')
        string(name: 'pythonTestXmlFile', defaultValue: 'enb_usrpB210_band7_50PRB.xml', description: 'Location of the Test XML to be run')
        string(name: 'pipelineTestStageName', defaultValue: 'Test COTS-UE - OAI eNB - LTEBOX EPC', description: 'Naming of the Test Stage')
        booleanParam(name: 'pipelineZipsConsoleLog', defaultValue: 'True', description: 'If true, the pipeline script retrieves the job console log, zips it and archives it as artifact')
82
        string(name: 'smartphonesResource', defaultValue: 'CI-Bench-1-Phones', description: 'Lockeable Resource to prevent multiple jobs to run simultaneously with the same resource')
83

84
85
86
        //eNB parameters
        string(name: 'eNB_IPAddress', defaultValue: '192.168.XX.XX', description: 'IP Address of eNB')
        credentials(name: 'eNB_Credentials', defaultValue: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', credentialType: "Username with password", required: true, description: 'Credentials for eNB')
87
        string(name: 'eNB_SourceCodePath', defaultValue: '/tmp/CI-enb', description: 'Full path of eNB source code')
88
89
90

        //EPC parameters
        string(name: 'EPC_IPAddress', defaultValue: '192.168.XX.XX', description: 'IP Address of EPC')
91
        string(name: 'EPC_Type', defaultValue: 'ltebox', description: 'EPC type: OAI or ltebox')
92
        credentials(name: 'EPC_Credentials', defaultValue: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', credentialType: "Username with password", required: true, description: 'Credentials for EPC')
93
        string(name: 'EPC_SourceCodePath', defaultValue: '/tmp/CI-enb', description: 'Full path of EPC source code')
94
95
96
97
98
99
100
101
102
103
104

        //ADB server parameters
        string(name: 'ADB_IPAddress', defaultValue: '192.168.XX.XX', description: 'IP Address of ADB server')
        credentials(name: 'ADB_Credentials', defaultValue: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', credentialType: "Username with password", required: true, description: 'Credentials for ADB')
    }
    */

    stages {
        stage ("Verify Parameters") {
            steps {
                script {
105
                    echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
106
                    def allParametersPresent = true
107
108
109
110
111
112
113
114
115

                    // It is already to late to check it
                    if (params.pythonExecutor != null) {
                        echo "eNB CI executor node  :   ${pythonExecutor}"
                    }
                    // If not present picking a default Stage Name
                    if (params.pipelineTestStageName == null) {
                        // picking default
                        testStageName = 'Template Test Stage'
116
117
                    }

118
119
120
                    if (params.smartphonesResource == null) {
                        allParametersPresent = false
                    }
121
122
123
124
125
126
127
128
129
                    if (params.eNB_IPAddress == null) {
                        allParametersPresent = false
                    }
                    if (params.eNB_SourceCodePath == null) {
                        allParametersPresent = false
                    }
                    if (params.eNB_Credentials == null) {
                        allParametersPresent = false
                    }
Raphael Defosseux's avatar
Raphael Defosseux committed
130
                    // the following 4 parameters should be pushed by the master trigger
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
                    // if not present, take the job GIT variables (used for developing)
                    if (params.eNB_Repository == null) {
                        eNB_Repository = env.GIT_URL
                    } else {
                        eNB_Repository = params.eNB_Repository
                    }
                    echo "eNB_Repository        :   ${eNB_Repository}"
                    if (params.eNB_Branch == null) {
                        eNB_Branch = env.GIT_BRANCH
                    } else {
                        eNB_Branch = params.eNB_Branch
                    }
                    echo "eNB_Branch            :   ${eNB_Branch}"
                    if (params.eNB_CommitID == null) {
                        eNB_CommitID = env.GIT_COMMIT
                    } else {
                        eNB_CommitID = params.eNB_CommitID
                    }
                    echo "eNB_CommitID          :   ${eNB_CommitID}"
Raphael Defosseux's avatar
Raphael Defosseux committed
150
                    if (params.eNB_mergeRequest != null) {
Raphael Defosseux's avatar
Raphael Defosseux committed
151
152
                        eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
                        if (eNB_AllowMergeRequestProcess) {
153
154
155
156
157
158
159
                            if (params.eNB_TargetBranch != null) {
                                eNB_TargetBranch = params.eNB_TargetBranch
                            } else {
                                eNB_TargetBranch = 'develop'
                            }
                            echo "eNB_TargetBranch      :   ${eNB_TargetBranch}"
                        }
Raphael Defosseux's avatar
Raphael Defosseux committed
160
                    }
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

                    if (params.EPC_IPAddress == null) {
                        allParametersPresent = false
                    }
                    if (params.EPC_Type == null) {
                        allParametersPresent = false
                    }
                    if (params.EPC_SourceCodePath == null) {
                        allParametersPresent = false
                    }
                    if (params.EPC_Credentials == null) {
                        allParametersPresent = false
                    }

                    if (params.ADB_IPAddress == null) {
                        allParametersPresent = false
                    }
                    if (params.ADB_Credentials == null) {
                        allParametersPresent = false
                    }

                    if (allParametersPresent) {
                        echo "All parameters are present"
Raphael Defosseux's avatar
Raphael Defosseux committed
184
                        if (eNB_AllowMergeRequestProcess) {
185
186
187
188
189
190
                            sh "git fetch"
                            sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
                        } else {
                            sh "git fetch"
                            sh "git checkout -f ${eNB_CommitID}"
                        }
191
192
193
194
195
196
197
                    } else {
                        echo "Some parameters are missing"
                        sh "./ci-scripts/fail.sh"
                    }
                }
            }
        }
198
        stage ("Build and Test") {
199
200
201
            steps {
                script {
                    dir ('ci-scripts') {
202
                        echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
203
204
205
206
207
208
209
210
211
                        // If not present picking a default XML file
                        if (params.pythonTestXmlFile == null) {
                            // picking default
                            testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
                            echo "Test XML file(default):   ${testXMLFile}"
                            mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
                        } else {
                            String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
                            for (xmlFile in myXmlTestSuite) {
Raphael Defosseux's avatar
Raphael Defosseux committed
212
                                if (fileExists(xmlFile)) {
213
214
215
216
217
                                    mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
                                    echo "Test XML file         :   ${xmlFile}"
                                }
                            }
                        }
218
219
220
221
222
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
                        ]) {
223
                            sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} ${mainPythonAllXmlFiles}"
224
225
                            String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
                            for (xmlFile in myXmlTestSuite) {
226
                            if (fileExists(xmlFile)) {
227
                                try {
228
                                    sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${xmlFile}"
229
230
231
232
                                } catch (Exception e) {
                                    currentBuild.result = 'FAILURE'
                                    buildStageStatus = false
                                }
233
                            }
234
                            }
235
                            sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
236
237
238
239
240
                        }
                    }
                }
            }
        }
241
242
243
        stage ("Terminate") {
            parallel {
                stage('Terminate UE') {
244
245
246
247
                    // Bypassing this stage if there are no abd server defined
                    when {
                      expression { params.ADB_IPAddress != "none" }
                    }
248
249
250
251
252
253
254
255
256
257
258
259
                    steps {
                        echo '\u2705 \u001B[32mTerminate UE\u001B[0m'
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
                        ]) {
                            sh "python3 ci-scripts/main.py --mode=TerminateUE --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password}"
                        }
                    }
                    post {
                        success {
                            script {
                                termStatusArray[termUE] = true
260
261
262
263
                            }
                        }
                    }
                }
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
                stage('Terminate eNB') {
                    steps {
                        echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
                        ]) {
                            sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
                        }
                    }
                    post {
                        success {
                            script {
                                termStatusArray[termENB] = true
                            }
                        }
                    }
                }
                stage('Terminate SPGW') {
282
283
284
285
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
                    steps {
                        echo '\u2705 \u001B[32mTerminate SPGW\u001B[0m'
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
                        }
                    }
                    post {
                        success {
                            script {
                                termStatusArray[termSPGW] = true
                            }
                        }
                    }
                }
                stage('Terminate MME') {
303
304
305
306
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
                    steps {
                        echo '\u2705 \u001B[32mTerminate MME\u001B[0m'
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
                        }
                    }
                    post {
                        success {
                            script {
                                termStatusArray[termMME] = true
                            }
                        }
                    }
                }
                stage('Terminate HSS') {
324
325
326
327
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
328
329
330
331
332
333
334
335
336
337
338
339
                    steps {
                        echo '\u2705 \u001B[32mTerminate HSS\u001B[0m'
                        withCredentials([
                            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
                        }
                    }
                    post {
                        success {
                            script {
                                termStatusArray[termHSS] = true
340
341
342
343
344
345
346
347
                            }
                        }
                    }
                }
            }
        }
        stage('Log Collection') {
            parallel {
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
                stage('Log Collection (eNB - Build)') {
                    steps {
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (eNB - Build)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectBuild --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath}"

                            echo '\u2705 \u001B[32mLog Transfer (eNB - Build)\u001B[0m'
                            sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/build.log.zip ./build.log.${env.BUILD_ID}.zip || true"
                        }
                        script {
                            if(fileExists("build.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "build.log.${env.BUILD_ID}.zip"
                            }
                        }
                    }
                }
                stage('Log Collection (eNB - Run)') {
                    steps {
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
372
                            sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
373
374
375
376
377
378
379
380

                            echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m'
                            sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true"
                        }
                        script {
                            if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
                            }
Raphael Defosseux's avatar
Raphael Defosseux committed
381
382
                            if(fileExists("ci-scripts/test_results.html")) {
                                sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
383
                                sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
Raphael Defosseux's avatar
Raphael Defosseux committed
384
385
                                archiveArtifacts "test_results-${JOB_NAME}.html"
                            }
386
387
388
389
                        }
                    }
                }
                stage('Log Collection (SPGW)') {
390
391
392
393
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
                    steps {
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"

                            echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
                            sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
                        }
                        script {
                            if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
                            }
                        }
                    }
                }
                stage('Log Collection (MME)') {
412
413
414
415
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
416
                    steps {
417
418
419
420
421
422
423
424
425
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"

                            echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
                            sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
                        }
426
                        script {
427
428
                            if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
429
430
431
432
                            }
                        }
                    }
                }
433
                stage('Log Collection (HSS)') {
434
435
436
437
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
438
                    steps {
439
440
441
442
443
444
445
446
447
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"

                            echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
                            sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
                        }
448
                        script {
449
450
451
452
453
454
455
                            if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
                            }
                        }
                    }
                }
                stage('Log Collection (Ping)') {
456
457
458
459
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
460
461
462
463
464
465
466
467
468
469
470
471
472
                    steps {
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"

                            echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
                            sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
                        }
                        script {
                            if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
473
474
475
476
                            }
                        }
                    }
                }
Raphael Defosseux's avatar
Raphael Defosseux committed
477
                stage('Log Collection (Iperf)') {
478
479
480
481
                    // Bypassing this stage if EPC server is not defined
                    when {
                      expression { params.EPC_IPAddress != "none" }
                    }
Raphael Defosseux's avatar
Raphael Defosseux committed
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
                    steps {
                        withCredentials([
                             [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                        ]) {
                            echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
                            sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"

                            echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
                            sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
                        }
                        script {
                            if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
                                archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
                            }
                        }
                    }
                }
499
500
501
502
503
504
505
            }
        }
    }

    post {
        always {
            script {
506
507
508
509
510
511
512
513
514
                if (params.pipelineZipsConsoleLog != null) {
                    if (params.pipelineZipsConsoleLog) {
                        echo "Archiving Jenkins console log"
                        sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
                        sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
                        if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
                            archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
                        }
                    }
515
516
517
                }
            }
        }
518
        // Making sure that we really shutdown every thing before leaving
519
520
        failure {
            script {
Raphael Defosseux's avatar
Raphael Defosseux committed
521
                if ((!termStatusArray[termUE]) && (params.ADB_IPAddress != "none")) {
522
523
524
525
526
527
528
529
530
531
532
533
534
                    withCredentials([
                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
                    ]) {
                        sh "python3 ci-scripts/main.py --mode=TerminateUE --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password}"
                    }
                }
                if (!termStatusArray[termENB]) {
                    withCredentials([
                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password']
                    ]) {
                        sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
                    }
                }
535
                if ((!termStatusArray[termSPGW]) && (params.EPC_IPAddress != "none")) {
536
537
538
539
540
541
                    withCredentials([
                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                    ]) {
                        sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
                    }
                }
542
                if ((!termStatusArray[termMME]) && (params.EPC_IPAddress != "none")) {
543
544
545
546
547
548
                    withCredentials([
                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                    ]) {
                        sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
                    }
                }
549
                if ((!termStatusArray[termHSS]) && (params.EPC_IPAddress != "none")) {
550
551
552
553
                    withCredentials([
                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
                    ]) {
                        sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
554
555
556
557
                    }
                }
            }
        }
558
559
    }
}