X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=jenkins%2Fci-pipelines%2Fci_stage_3.groovy;h=005232b360f70624312a6fce223c740f2bbd5fbf;hb=34bf143217719276746d986de53f940176d7de09;hp=082f7283a5a3b70724b04a4780ab7039d24fe488;hpb=49461294d0896c910a93aa18e20ba10f6bef38b3;p=osm%2Fdevops.git diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy index 082f7283..005232b3 100644 --- a/jenkins/ci-pipelines/ci_stage_3.groovy +++ b/jenkins/ci-pipelines/ci_stage_3.groovy @@ -30,11 +30,34 @@ properties([ string(defaultValue: '', description: '', name: 'UPSTREAM_JOB_NUMBER'), string(defaultValue: 'dpkg1', description: '', name: 'GPG_KEY_NAME'), string(defaultValue: 'artifactory-osm', description: '', name: 'ARTIFACTORY_SERVER'), + string(defaultValue: 'osm-stage_4', description: '', name: 'DOWNSTREAM_STAGE_NAME'), booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_FAIL'), - booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS') + booleanParam(defaultValue: false, description: '', name: 'SAVE_CONTAINER_ON_PASS'), + booleanParam(defaultValue: false, 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: false, description: '', name: 'SAVE_ARTIFACTS_OVERRIDE'), ]) ]) +def uninstall_osm(stackName) { + sh """ + export OSM_USE_LOCAL_DEVOPS=true + export PATH=$PATH:/snap/bin + installers/full_install_osm.sh -y -w /tmp/osm -t ${stackName} -s ${stackName} --test --nolxd --nodocker --nojuju --nohostports --nohostclient --uninstall + """ +} + +def run_systest(stackName,tagName,testName) { + sh """ + tempdir=$(mktemp -d) + docker run -ti --network net${stackName} -v $tempdir:/usr/share/osm-devops/systest/reports osm/osmclient:${tagName} make -C /usr/share/osm-devops/systest ${testName} + cp $tempdir/*.xml . + """ + junit '*.xml' +} + node("${params.NODE}") { sh 'env' @@ -48,15 +71,12 @@ node("${params.NODE}") { ci_helper = load "jenkins/ci-pipelines/ci_helper.groovy" def upstream_main_job = params.UPSTREAM_SUFFIX - def save_artifacts = false // upstream jobs always use merged artifacts upstream_main_job += '-merge' container_name_prefix = "osm-${tag_or_branch}" container_name = "${container_name_prefix}" if ( JOB_NAME.contains('merge') ) { - save_artifacts = true - println("merge job, saving artifacts") container_name += "-merge" } container_name += "-${BUILD_NUMBER}" @@ -69,7 +89,7 @@ node("${params.NODE}") { // grab all stable upstream builds based on the dir("${RELEASE}") { - def list = ["SO", "UI", "RO", "openvim", "osmclient", "IM"] + def list = ["RO", "openvim", "osmclient", "IM", "devops", "MON", "N2VC", "NBI", "common", "LCM", "POL"] for (component in list) { step ([$class: 'CopyArtifact', projectName: "${component}${upstream_main_job}/${GERRIT_BRANCH}"]) @@ -127,6 +147,12 @@ node("${params.NODE}") { // copy the public key into the release folder // this pulls the key from the home dir of the current user (jenkins) sh "cp ~/${REPO_KEY_NAME} ." + + // merge the change logs + sh """ + rm -f changelog/changelog-osm.html + [ ! -d changelog ] || for mdgchange in \$(ls changelog); do cat changelog/\$mdgchange >> changelog/changelog-osm.html; done + """ } // start an apache server to serve up the images http_server_name = "${container_name}-apache" @@ -137,57 +163,87 @@ node("${params.NODE}") { } error = null + if ( params.DO_BUILD ) { + stage("Build") { + sh "make -C docker clean" + sh "make -j4 -C docker CMD_DOCKER_ARGS= TAG=${container_name} RELEASE=${params.RELEASE} REPOSITORY_BASE=${repo_base_url} REPOSITORY_KEY=${params.REPO_KEY_NAME} REPOSITORY=${params.REPO_DISTRO}" + } + } try { - stage("Install") { + if ( params.DO_INSTALL ) { + stage("Install") { - //will by default always delete containers on complete - //sh "jenkins/system/delete_old_containers.sh ${container_name_prefix}" + //will by default always delete containers on complete + //sh "jenkins/system/delete_old_containers.sh ${container_name_prefix}" - commit_id = '' - repo_distro = '' - repo_key_name = '' - release = '' + commit_id = '' + repo_distro = '' + repo_key_name = '' + release = '' - if ( params.COMMIT_ID ) - { - commit_id = "-b ${params.COMMIT_ID}" - } + if ( params.COMMIT_ID ) + { + commit_id = "-b ${params.COMMIT_ID}" + } - if ( params.REPO_DISTRO ) - { - repo_distro = "-r ${params.REPO_DISTRO}" - } + if ( params.REPO_DISTRO ) + { + repo_distro = "-r ${params.REPO_DISTRO}" + } - if ( params.REPO_KEY_NAME ) - { - repo_key_name = "-k ${params.REPO_KEY_NAME}" + if ( params.REPO_KEY_NAME ) + { + repo_key_name = "-k ${params.REPO_KEY_NAME}" + } + + if ( params.RELEASE ) + { + release = "-R ${params.RELEASE}" + } + + sh """ + export PATH=$PATH:/snap/bin + installers/full_install_osm.sh -y -s ${container_name} --test --nolxd --nodocker --nojuju --nohostports --nohostclient \ + --nodockerbuild -t ${container_name} \ + -w /tmp/osm \ + ${commit_id} \ + ${repo_distro} \ + ${repo_base_url} \ + ${repo_key_name} \ + ${release} \ + ${params.BUILD_FROM_SOURCE} + """ } + } - if ( params.RELEASE ) - { - release = "-R ${params.RELEASE}" + if ( params.DO_SMOKE ) { + stage("OSM Health") { + sh "installers/osm_health.sh -s ${container_name}" + } + stage("Smoke") { + run_systest(container_name,container_name,"smoke") } - - sh """ - export OSM_USE_LOCAL_DEVOPS=true - jenkins/host/start_build system --build-container ${container_name} \ - ${commit_id} \ - ${repo_distro} \ - ${repo_base_url} \ - ${repo_key_name} \ - ${release} \ - ${params.BUILD_FROM_SOURCE} - """ } - stage("Test") { - ci_helper.systest_run(container_name, 'smoke') - junit '*.xml' + stage_4_archive = false + if ( params.DO_STAGE_4 ) { + stage("stage_4") { + def downstream_params = [ + string(name: 'CONTAINER_NAME', value: container_name), + string(name: 'NODE', value: NODE_NAME.split()[0]), + ] + stage_4_result = build job: "${params.DOWNSTREAM_STAGE_NAME}/${GERRIT_BRANCH}", parameters: downstream_params, propagate: false + currentBuild.result = stage_4_result.result + + if ( stage_4_result.getResult().equals('SUCCESS') ) { + stage_4_archive = true; + } + } } - // save the artifacts of this build if this is a merge job - if ( save_artifacts ) { + // override to save the artifacts + if ( params.SAVE_ARTIFACTS_OVERRIDE || stage_4_archive ) { stage("Archive") { sh "echo ${container_name} > build_version.txt" archiveArtifacts artifacts: "build_version.txt", fingerprint: true @@ -200,21 +256,25 @@ node("${params.NODE}") { } } catch(caughtError) { + println("Caught error!") error = caughtError currentBuild.result = 'FAILURE' } finally { sh "docker stop ${http_server_name}" + sh "docker rm ${http_server_name}" - if (error) { - if ( !params.SAVE_CONTAINER_ON_FAIL ) { - sh "lxc delete ${container_name} --force" + if ( params.DO_INSTALL ) { + if (error) { + if ( !params.SAVE_CONTAINER_ON_FAIL ) { + uninstall_osm container_name + } + throw error } - throw error - } - else { - if ( !params.SAVE_CONTAINER_ON_PASS ) { - sh "lxc delete ${container_name} --force" + else { + if ( !params.SAVE_CONTAINER_ON_PASS ) { + uninstall_osm container_name + } } } }