Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 1 | /** |
| 2 | * |
| 3 | * Launch pytest frameworks in Jenkins |
| 4 | * |
| 5 | * Expected parameters: |
| 6 | * SALT_MASTER_URL URL of Salt master |
| 7 | * SALT_MASTER_CREDENTIALS Credentials to the Salt API |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 8 | * IMAGE Docker image link to use for running container with test framework. |
| 9 | * EXTRA_PARAMS Yaml context which contains additional setting for job |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 10 | * |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 11 | */ |
| 12 | |
Oleksii Zhurba | d903495 | 2018-09-03 21:06:06 -0500 | [diff] [blame] | 13 | common = new com.mirantis.mk.Common() |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 14 | validate = new com.mirantis.mcp.Validate() |
Hanna Arhipova | 3b4b065 | 2018-12-03 14:06:58 +0200 | [diff] [blame] | 15 | salt_testing = new com.mirantis.mk.SaltModelTesting() |
Hanna Arhipova | b451e79 | 2018-12-18 15:27:35 +0200 | [diff] [blame] | 16 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 17 | def EXTRA_PARAMS = readYaml(text: env.getProperty('EXTRA_PARAMS')) ?: [:] |
| 18 | def env_vars = EXTRA_PARAMS.get("envs") ?: [] |
Ievgeniia Zadorozhna | f32758b | 2019-11-13 18:32:59 +0300 | [diff] [blame] | 19 | def override_config = env.getProperty('EXTRA_PARAMS') ?: "" |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 20 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 21 | def IMAGE = (env.getProperty('IMAGE')) ?: 'docker-prod-local.docker.mirantis.net/mirantis/cvp/cvp-sanity-checks:stable' |
| 22 | def SLAVE_NODE = (env.getProperty('SLAVE_NODE')) ?: 'docker' |
Hanna Arhipova | 3b4b065 | 2018-12-03 14:06:58 +0200 | [diff] [blame] | 23 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 24 | /* |
| 25 | YAML example |
| 26 | ===== |
| 27 | # commands is a map of commands which looks like step_name: shell_command |
| 28 | commands: |
| 29 | 001_prepare: rm /var/lib/g.txt |
| 30 | 002_prepare: git clone http://repo_with_tests.git |
| 31 | 003_test: cd repo_with_tests && pytest /var/lib/ --collect-only |
| 32 | 004_collect: cp cvp-spt /var/lib/validation_artifacts/ |
| 33 | # envs is a list of new environment variables |
| 34 | envs: |
| 35 | - SALT_USERNAME=admin |
| 36 | - SALT_PASSWORD=password |
| 37 | - drivetrain_version=testing |
| 38 | */ |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 39 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 40 | node (SLAVE_NODE) { |
| 41 | def artifacts_dir = 'validation_artifacts' |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 42 | def test_suite_name = "${env.JOB_NAME}" |
| 43 | def xml_file = "${test_suite_name}_report.xml" |
| 44 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 45 | def configRun = [:] |
| 46 | try { |
| 47 | withEnv(env_vars) { |
| 48 | stage('Initialization') { |
| 49 | def container_workdir = '/var/lib' |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 50 | def workdir = "${container_workdir}/${test_suite_name}" |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 51 | def tests_set = (env.getProperty('tests_set')) ?: '' |
Dmitriy Kruglov | b60e170 | 2019-08-19 12:53:41 +0200 | [diff] [blame] | 52 | def script = "pytest --junitxml ${container_workdir}/${artifacts_dir}/${xml_file} -vv ${tests_set}" |
Hanna Arhipova | 3b4b065 | 2018-12-03 14:06:58 +0200 | [diff] [blame] | 53 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 54 | sh "mkdir -p ${artifacts_dir}" |
Hanna Arhipova | 3b4b065 | 2018-12-03 14:06:58 +0200 | [diff] [blame] | 55 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 56 | // Enrichment for docker commands |
| 57 | def commands = EXTRA_PARAMS.get("commands") ?: ['010_start_tests': "cd ${workdir} && with_venv.sh ${script}"] |
| 58 | def commands_list = commands.collectEntries{ [ (it.key) : { sh("${it.value}") } ] } |
Hanna Arhipova | 3b4b065 | 2018-12-03 14:06:58 +0200 | [diff] [blame] | 59 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 60 | // Enrichment for env variables |
| 61 | def creds = common.getCredentials(SALT_MASTER_CREDENTIALS) |
| 62 | def env_vars_list = [ |
| 63 | "SALT_USERNAME=${creds.username}", |
| 64 | "SALT_PASSWORD=${creds.password}", |
Hanna Arhipova | 6cda486 | 2019-06-04 12:39:30 +0300 | [diff] [blame] | 65 | "SALT_URL=${SALT_MASTER_URL}", |
Ievgeniia Zadorozhna | f32758b | 2019-11-13 18:32:59 +0300 | [diff] [blame] | 66 | "REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt", |
| 67 | "OVERRIDE_CONFIG=${override_config}" |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 68 | ] + env_vars |
Oleksii Zhurba | d903495 | 2018-09-03 21:06:06 -0500 | [diff] [blame] | 69 | |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 70 | // Generating final config |
Oleksii Zhurba | 1116744 | 2019-07-22 11:15:02 -0500 | [diff] [blame] | 71 | def force_pull = (env.getProperty('force_pull')) ?: false |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 72 | configRun = [ |
| 73 | 'image': IMAGE, |
Oleksii Zhurba | 1116744 | 2019-07-22 11:15:02 -0500 | [diff] [blame] | 74 | 'dockerPull': force_pull.toBoolean(), |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 75 | 'baseRepoPreConfig': false, |
| 76 | 'dockerMaxCpus': 2, |
| 77 | 'dockerExtraOpts' : [ |
| 78 | "--network=host", |
| 79 | "-v /root/qa_results/:/root/qa_results/", |
Hanna Arhipova | 6cda486 | 2019-06-04 12:39:30 +0300 | [diff] [blame] | 80 | "-v /etc/ssl/certs/:/etc/ssl/certs/:ro", |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 81 | "-v ${env.WORKSPACE}/${artifacts_dir}/:${container_workdir}/${artifacts_dir}/", |
| 82 | ], |
| 83 | 'envOpts' : env_vars_list, |
| 84 | 'runCommands' : commands_list |
| 85 | ] |
| 86 | } |
| 87 | |
| 88 | stage('Run Tests') { |
| 89 | salt_testing.setupDockerAndTest(configRun) |
| 90 | } |
| 91 | |
| 92 | stage ('Publish results') { |
| 93 | archiveArtifacts artifacts: "${artifacts_dir}/*" |
| 94 | junit "${artifacts_dir}/*.xml" |
| 95 | if (env.JOB_NAME.contains("cvp-spt")) { |
| 96 | plot csvFileName: 'plot-glance.csv', |
| 97 | group: 'SPT', |
| 98 | style: 'line', |
| 99 | title: 'SPT Glance results', |
| 100 | xmlSeries: [[ |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 101 | file: "${artifacts_dir}/${xml_file}", |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 102 | nodeType: 'NODESET', |
| 103 | url: '', |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 104 | xpath: '/testsuite/testcase[@classname="tests.test_glance"]/properties/property']] |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 105 | plot csvFileName: 'plot-hw2hw.csv', |
| 106 | group: 'SPT', |
| 107 | style: 'line', |
| 108 | title: 'SPT HW2HW results', |
| 109 | xmlSeries: [[ |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 110 | file: "${artifacts_dir}/${xml_file}", |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 111 | nodeType: 'NODESET', |
| 112 | url: '', |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 113 | xpath: '/testsuite/testcase[@classname="tests.test_hw2hw"]/properties/property']] |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 114 | plot csvFileName: 'plot-vm2vm.csv', |
| 115 | group: 'SPT', |
| 116 | style: 'line', |
| 117 | title: 'SPT VM2VM results', |
| 118 | xmlSeries: [[ |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 119 | file: "${artifacts_dir}/${xml_file}", |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 120 | nodeType: 'NODESET', |
| 121 | url: '', |
Oleksii Zhurba | 9273075 | 2019-05-30 18:03:41 -0500 | [diff] [blame] | 122 | xpath: '/testsuite/testcase[@classname="tests.test_vm2vm"]/properties/property']] |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 123 | } |
Oleksii Zhurba | d903495 | 2018-09-03 21:06:06 -0500 | [diff] [blame] | 124 | } |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 125 | } |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 126 | } |
| 127 | catch (Throwable e) { |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 128 | currentBuild.result = "FAILURE" |
| 129 | throw e |
Oleksii Zhurba | caa46e1 | 2019-04-16 17:38:09 -0500 | [diff] [blame] | 130 | } |
| 131 | finally { |
| 132 | sh "rm -rf ${artifacts_dir}" |
Oleksii Zhurba | 71e9788 | 2018-02-16 20:09:43 -0600 | [diff] [blame] | 133 | } |
| 134 | } |