2 Copyright (c) 2022 Nordix Foundation
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
16 import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
18 node('nordix-nsm-build-ubuntu2204') {
19 build_number = env.BUILD_NUMBER
20 workspace = env.WORKSPACE
21 ws("${workspace}/${build_number}") {
22 def git_project = params.GIT_PROJECT
23 def current_branch = params.CURRENT_BRANCH
24 def default_branch = params.DEFAULT_BRANCH
26 def meridio_version = params.MERIDIO_VERSION
27 def tapa_version = params.TAPA_VERSION
28 def kubernetes_version = params.KUBERNETES_VERSION
29 def nsm_version = params.NSM_VERSION
30 def ip_family = params.IP_FAMILY
31 def number_of_workers = params.NUMBER_OF_WORKERS
32 def environment_name = params.ENVIRONMENT_NAME
33 def focus = params.FOCUS
34 def skip = params.SKIP
36 def number_of_runs = params.NUMBER_OF_RUNS
37 def interval = params.INTERVAL
39 stage('Clone/Checkout') {
40 git branch: default_branch, url: git_project
43 branches: [[name: current_branch]],
46 refspec: '+refs/pull/*/head:refs/remotes/origin/pr/*',
53 stage('Environment') {
54 def command = "make -s -C test/e2e/environment/$environment_name/ KUBERNETES_VERSION=$kubernetes_version NSM_VERSION=$nsm_version IP_FAMILY=$ip_family KUBERNETES_WORKERS=$number_of_workers MERIDIO_VERSION=$meridio_version TAPA_VERSION=$tapa_version"
56 ExecSh(command).call()
57 } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
58 currentBuild.result = 'ABORTED'
59 } catch (Exception e) {
60 unstable 'Environment setup failed'
61 currentBuild.result = 'FAILURE'
66 E2EList(number_of_runs, interval, environment_name, ip_family, focus, skip).call()
69 Report(environment_name, ip_family).call()
77 // Creates the list of e2e to run during this job
78 def E2EList(number_of_runs, interval, environment_name, ip_family, focus, skip) {
81 def list = sh(script: "seq -w 1 $number_of_runs | paste -sd ' ' -", returnStdout: true).trim().split(' ')
84 stages.put("$i", E2E(i, previous, interval, environment_name, ip_family, focus, skip))
92 def E2E(id, previous_id, interval, environment_name, ip_family, focus, skip) {
94 def wait = sh(script: "echo `expr $interval \\* $previous_id`", returnStdout: true).trim()
95 stage("Wait $wait seconds") {
99 def command = "make e2e E2E_ENVIRONMENT=\"$environment_name\" E2E_IP_FAMILY=\"$ip_family\" E2E_FOCUS=\"$focus\" E2E_SKIP=\"$skip\""
100 timeout(time: interval, unit: 'SECONDS') {
102 ExecSh(command).call()
103 } catch (Exception e) {
104 unstable 'Failing e2e'
112 def Report(environment_name, ip_family) {
115 def command = "cd ./test/e2e ; ./environment/$environment_name/$ip_family/test.sh on_failure"
116 ExecSh(command).call()
117 Archive('Report').call()
124 sh "tar -czvf ${id}.tar.gz -C _output ."
125 archiveArtifacts artifacts: "${id}.tar.gz", followSymlinks: false
126 sh 'rm -rf _output ; mkdir -p _output'
127 } catch (Exception e) {
132 // Raise error in Jenkins job
140 // Cleanup directory and kind cluster
142 def command = 'make -s -C docs/demo/scripts/kind/ clean'
143 ExecSh(command).call()
148 def ExecSh(command) {
150 if (env.DRY_RUN != 'true') {