X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=jenkins%2Fci-pipelines%2Fci_stage_3.groovy;h=d9c687cf70c9245088830ba7d78c070ff45f87c2;hb=20611225b7c1283bc5ce1572b5515e898c6df2b5;hp=954c692d39398373d6b46573d89837cf7856f49d;hpb=44d3d012155f42e2e0a2301cc7cfb1b6f68ca452;p=osm%2Fdevops.git diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy index 954c692d..d9c687cf 100644 --- a/jenkins/ci-pipelines/ci_stage_3.groovy +++ b/jenkins/ci-pipelines/ci_stage_3.groovy @@ -35,19 +35,20 @@ properties([ booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_FAIL'), booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS'), booleanParam(defaultValue: true, description: '', name: 'SAVE_ARTIFACTS_ON_SMOKE_SUCCESS'), - booleanParam(defaultValue: true, description: '', name: 'DO_STAGE_4'), booleanParam(defaultValue: true, description: '', name: 'DO_BUILD'), booleanParam(defaultValue: true, description: '', name: 'DO_INSTALL'), - booleanParam(defaultValue: true, description: '', name: 'DO_SMOKE'), booleanParam(defaultValue: true, description: '', name: 'DO_DOCKERPUSH'), booleanParam(defaultValue: false, description: '', name: 'SAVE_ARTIFACTS_OVERRIDE'), string(defaultValue: '/home/jenkins/hive/openstack-etsi.rc', description: '', name: 'HIVE_VIM_1'), - booleanParam(defaultValue: false, description: '', name: 'DO_ROBOT'), - string(defaultValue: 'sanity', description: 'sanity/regression are the options', name: 'TEST_NAME'), + booleanParam(defaultValue: true, description: '', name: 'DO_ROBOT'), + string(defaultValue: 'sanity', description: 'sanity/regression/daily are the common options', name: 'ROBOT_TAG_NAME'), string(defaultValue: '/home/jenkins/hive/robot-systest.cfg', description: '', name: 'ROBOT_VIM'), + string(defaultValue: '/home/jenkins/hive/port-mapping-etsi-vim.yaml', description: 'Port mapping file for SDN assist in ETSI VIM', name: 'ROBOT_PORT_MAPPING_VIM'), string(defaultValue: '/home/jenkins/hive/kubeconfig.yaml', description: '', name: 'KUBECONFIG'), string(defaultValue: '/home/jenkins/hive/clouds.yaml', description: '', name: 'CLOUDS'), string(defaultValue: 'Default', description: '', name: 'INSTALLER'), + string(defaultValue: '100.0', description: '% passed Robot tests to mark the build as passed', name: 'ROBOT_PASS_THRESHOLD'), + string(defaultValue: '80.0', description: '% passed Robot tests to mark the build as unstable (if lower, it will be failed)', name: 'ROBOT_UNSTABLE_THRESHOLD'), ]) ]) @@ -55,7 +56,7 @@ properties([ //////////////////////////////////////////////////////////////////////////////////////// // Helper Functions //////////////////////////////////////////////////////////////////////////////////////// -def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus_port=null,envfile=null,kubeconfig=null,clouds=null,hostfile=null,jujuPassword=null) { +def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus_port=null,envfile=null,portmappingfile=null,jujudata=null,kubeconfig=null,clouds=null,hostfile=null,jujuPassword=null,pass_th='0.0',unstable_th='0.0') { tempdir = sh(returnStdout: true, script: "mktemp -d").trim() if ( !envfile ) { @@ -77,7 +78,7 @@ def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus } try { - sh "docker run --env OSM_HOSTNAME=${osmHostname} --env PROMETHEUS_HOSTNAME=${prometheusHostname} ${PROMETHEUS_PORT_VAR} ${JUJU_PASSWORD_VAR} --env-file ${envfile} -v ${clouds}:/etc/openstack/clouds.yaml -v ${kubeconfig}:/root/.kube/config -v ${tempdir}:/robot-systest/reports ${hostfilemount} opensourcemano/tests:${tagName} -c -t ${testName}" + sh "docker run --env OSM_HOSTNAME=${osmHostname} --env PROMETHEUS_HOSTNAME=${prometheusHostname} ${PROMETHEUS_PORT_VAR} ${JUJU_PASSWORD_VAR} --env-file ${envfile} -v ${clouds}:/etc/openstack/clouds.yaml -v ${jujudata}:/root/.local/share/juju -v ${kubeconfig}:/root/.kube/config -v ${tempdir}:/robot-systest/reports -v ${portmappingfile}:/root/port-mapping.yaml ${hostfilemount} opensourcemano/tests:${tagName} -c -t ${testName}" } finally { sh "cp ${tempdir}/* ." outputDirectory = sh(returnStdout: true, script: "pwd").trim() @@ -89,8 +90,8 @@ def run_robot_systest(tagName,testName,osmHostname,prometheusHostname,prometheus disableArchiveOutput : false, reportFileName : "report.html", logFileName : "log.html", - passThreshold : 0, - unstableThreshold: 0, + passThreshold : pass_th, + unstableThreshold: unstable_th, otherFiles : "*.png", ]) } @@ -177,6 +178,7 @@ node("${params.NODE}") { server_id = null http_server_name = null devopstempdir = null + jujutempdir = null useCharmedInstaller = params.INSTALLER.equalsIgnoreCase("charmed") try { @@ -223,7 +225,7 @@ node("${params.NODE}") { } parallelSteps = [:] - def list = ["RO", "openvim", "osmclient", "IM", "devops", "MON", "N2VC", "NBI", "common", "LCM", "POL", "LW-UI", "NG-UI", "PLA", "tests"] + def list = ["RO", "osmclient", "IM", "devops", "MON", "N2VC", "NBI", "common", "LCM", "POL", "NG-UI", "PLA", "tests"] if (upstreamComponent.length()>0) { println("Skipping upstream fetch of "+upstreamComponent) list.remove(upstreamComponent) @@ -253,11 +255,15 @@ node("${params.NODE}") { /////////////////////////////////////////////////////////////////////////////////////// // Create Devops APT repository /////////////////////////////////////////////////////////////////////////////////////// - sh "mv devops/pool/ pool" - sh "dpkg-sig --sign builder -k ${GPG_KEY_NAME} pool/devops/*" - sh "mkdir -p dists/${params.REPO_DISTRO}/devops/binary-amd64/" - sh "apt-ftparchive packages pool/devops > dists/${params.REPO_DISTRO}/devops/binary-amd64/Packages" - sh "gzip -9fk dists/${params.REPO_DISTRO}/devops/binary-amd64/Packages" + sh "mkdir -p pool" + for (component in [ "devops", "IM", "osmclient" ]) { + sh "ls -al ${component}/pool/" + sh "cp -r ${component}/pool/* pool/" + sh "dpkg-sig --sign builder -k ${GPG_KEY_NAME} pool/${component}/*" + sh "mkdir -p dists/${params.REPO_DISTRO}/${component}/binary-amd64/" + sh "apt-ftparchive packages pool/${component} > dists/${params.REPO_DISTRO}/${component}/binary-amd64/Packages" + sh "gzip -9fk dists/${params.REPO_DISTRO}/${component}/binary-amd64/Packages" + } // create and sign the release file sh "apt-ftparchive release dists/${params.REPO_DISTRO} > dists/${params.REPO_DISTRO}/Release" @@ -427,7 +433,7 @@ node("${params.NODE}") { remote.pty = true sshCommand remote: remote, command: """ - wget https://osm-download.etsi.org/ftp/osm-9.0-nine/install_osm.sh + wget https://osm-download.etsi.org/ftp/osm-10.0-ten/install_osm.sh chmod +x ./install_osm.sh sed -i '1 i\\export PATH=/snap/bin:\${PATH}' ~/.bashrc """ @@ -453,9 +459,9 @@ node("${params.NODE}") { --tag ${container_name} """ } - prometheusHostname = "prometheus."+IP_ADDRESS+".xip.io" + prometheusHostname = "prometheus."+IP_ADDRESS+".nip.io" prometheusPort = 80 - osmHostname = "nbi."+IP_ADDRESS+".xip.io:443" + osmHostname = "nbi."+IP_ADDRESS+".nip.io:443" } else { // Run -k8s installer here specifying internal docker registry and docker proxy withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'gitlab-registry', @@ -467,7 +473,8 @@ node("${params.NODE}") { ${release} -r unstable \ -d ${USERNAME}:${PASSWORD}@${INTERNAL_DOCKER_REGISTRY} \ -p ${INTERNAL_DOCKER_PROXY} \ - -t ${container_name} + -t ${container_name} \ + --nocachelxdimages """ } prometheusHostname = IP_ADDRESS @@ -475,62 +482,70 @@ node("${params.NODE}") { osmHostname = IP_ADDRESS } } // stage("Install") - } // if ( params.DO_INSTALL ) - /////////////////////////////////////////////////////////////////////////////////////// // Health check of installed OSM in remote vm /////////////////////////////////////////////////////////////////////////////////////// - if ( params.DO_SMOKE ) { stage("OSM Health") { stackName = "osm" sshCommand remote: remote, command: """ /usr/share/osm-devops/installers/osm_health.sh -k -s ${stackName} """ - } - } + } // stage("OSM Health") +/////////////////////////////////////////////////////////////////////////////////////// +// Get juju data from installed OSM in remote vm +/////////////////////////////////////////////////////////////////////////////////////// + jujutempdir = sh(returnStdout: true, script: "mktemp -d").trim() + jujudatafolder = jujutempdir + '/juju' + homefolder = sshCommand remote: remote, command: 'echo ${HOME}' + sshGet remote: remote, from: homefolder + '/.local/share/juju', into: jujutempdir, override: true + } // if ( params.DO_INSTALL ) + /////////////////////////////////////////////////////////////////////////////////////// // Execute Robot tests /////////////////////////////////////////////////////////////////////////////////////// stage_archive = false - if ( params.DO_STAGE_4 ) { + if ( params.DO_ROBOT ) { try { stage("System Integration Test") { - if ( params.DO_ROBOT ) { - if( useCharmedInstaller ) { - tempdir = sh(returnStdout: true, script: "mktemp -d").trim() - sh(script: "touch ${tempdir}/hosts") - hostfile="${tempdir}/hosts" - sh """cat << EOF > ${hostfile} + if ( useCharmedInstaller ) { + tempdir = sh(returnStdout: true, script: "mktemp -d").trim() + sh(script: "touch ${tempdir}/hosts") + hostfile="${tempdir}/hosts" + sh """cat << EOF > ${hostfile} 127.0.0.1 localhost -${remote.host} prometheus.${remote.host}.xip.io nbi.${remote.host}.xip.io +${remote.host} prometheus.${remote.host}.nip.io nbi.${remote.host}.nip.io EOF""" - } else { - hostfile=null - } - - jujuPassword=sshCommand remote: remote, command: """ - echo `juju gui 2>&1 | grep password | cut -d: -f2` - """ - - run_robot_systest( - container_name, - params.TEST_NAME, - osmHostname, - prometheusHostname, - prometheusPort, - params.ROBOT_VIM, - params.KUBECONFIG, - params.CLOUDS, - hostfile, - jujuPassword) + } else { + hostfile=null } + + jujuPassword=sshCommand remote: remote, command: """ + echo `juju gui 2>&1 | grep password | cut -d: -f2` + """ + + run_robot_systest( + container_name, + params.ROBOT_TAG_NAME, + osmHostname, + prometheusHostname, + prometheusPort, + params.ROBOT_VIM, + params.ROBOT_PORT_MAPPING_VIM, + jujudatafolder, + params.KUBECONFIG, + params.CLOUDS, + hostfile, + jujuPassword, + params.ROBOT_PASS_THRESHOLD, + params.ROBOT_UNSTABLE_THRESHOLD + ) } // stage("System Integration Test") } finally { stage("Archive Container Logs") { // Archive logs to containers_logs.txt archive_logs(remote) - if ( ! currentBuild.result.equals('UNSTABLE') && ! currentBuild.result.equals('FAILURE')) { + if ( ! currentBuild.result.equals('FAILURE') ) { stage_archive = keep_artifacts } else { println ("Systest test failed, throwing error") @@ -540,7 +555,7 @@ EOF""" } } } - } // if ( params.DO_STAGE_4 ) + } // if ( params.DO_ROBOT ) if ( params.SAVE_ARTIFACTS_OVERRIDE || stage_archive ) { stage("Archive") { @@ -632,5 +647,9 @@ EOF""" if ( devopstempdir != null ) { sh "rm -rf ${devopstempdir}" } + + if ( jujutempdir != null ) { + sh "rm -rf ${jujutempdir}" + } } }