#!/usr/bin/env groovy

pipeline {
    agent any
    stages {
        stage('create build VM`s') {
            steps {
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso"
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso"
                sh "cp /var/lib/libvirt/images/base/rpmbuild-cidata.iso /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/rpmbuilddiskbase.qcow2 /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/centos7.qcow2 /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2"
                sh "qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/base/centos6.qcow2 /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2"
                sh "virt-install --connect qemu:///system --virt-type kvm --name rpmbuild-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant ubuntu14.04 --disk path=/var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
                sh "virt-install --connect qemu:///system --virt-type kvm --name ramdiskbuild-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant rhel7 --disk path=/var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
                sh "virt-install --connect qemu:///system --virt-type kvm --name ramdiskbuild6-${env.BUILD_NUMBER} --ram 2048 --vcpus=2 --os-type linux --os-variant rhel6 --disk path=/var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2,format=qcow2 --disk /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso,device=cdrom --import --network network=default --noautoconsole"
            }
        }
        stage('build rpm at VM') {
            environment {
                VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py rpmbuild-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
            }
            steps {
                sh "sleep 5" // wait till VM up ssh service
                sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/; git clone git@bitbucket.org:onappcore/rdbuild.git"'

                catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                    sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/rdbuild;  git checkout $BRANCH_NAME"'
                }
                sh 'ssh -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS "cd /root/build/rdbuild; BRANCH=$BRANCH_NAME BASE_BRANCH=master VERSION=6.2 ./autobuild.sh"'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:/root/build/rdbuild/lastbuild /home/builds/'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:`head -1 /home/builds/lastbuild` /home/builds/storage.rpm'
                sh 'scp -o StrictHostKeyChecking=no root@$VM_IP_ADDRESS:`sed "3q;d" /home/builds/lastbuild` /home/builds/'
            }
        }
        stage('build ramdisk`s') {
            parallel {
                stage('build ramdisk`s centos7 at VM') {
                    environment {
                        RAMDISK_VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py ramdiskbuild-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
                    }
                    steps {
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "yum update -y"'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "mkdir /root/build/; cd /root/build/; git clone git@bitbucket.org:onappcore/ramdisk-hv.git"'
                        catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                            sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv;  git checkout $BRANCH_NAME"'
                        }
                        sh 'scp -o StrictHostKeyChecking=no /home/builds/storage.rpm root@$RAMDISK_VM_IP_ADDRESS:/root/storage.rpm'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv/builder/; ONAPPSTOREFILE=/root/storage.rpm BK_TOOLS_VERSION=6.1.0-4 HV_TOOLS_BRANCH=6.1.0-6 MESSAGING_BRANCH=6.0.0-4 CENTOS5_XEN=no CENTOS6_XEN=no CENTOS6_KVM=no CENTOS7_KVM=yes CENTOS7_DEFAULT=no CENTOS7_XEN=yes  ./release.sh"'
                    }
                }
                stage('build ramdisk`s centos6 at VM') {
                    environment {
                        RAMDISK_VM_IP_ADDRESS = sh (script: "/home/scripts/getvmip.py ramdiskbuild6-${env.BUILD_NUMBER} 60", returnStdout: true).trim()
                    }
                    steps {
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "yum update -y"'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "mkdir /root/build/; cd /root/build/; git clone git@bitbucket.org:onappcore/ramdisk-hv.git"'
                        catchError(buildResult: 'SUCCESS', stageResult: 'SUCCESS') {
                            sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv;  git checkout $BRANCH_NAME"'
                        }
                        sh 'scp -o StrictHostKeyChecking=no /home/builds/storage.rpm root@$RAMDISK_VM_IP_ADDRESS:/root/storage.rpm'
                        sh 'ssh -o StrictHostKeyChecking=no root@$RAMDISK_VM_IP_ADDRESS "cd /root/build/ramdisk-hv/builder/; ONAPPSTOREFILE=/root/storage.rpm BK_TOOLS_VERSION=6.1.0-4 HV_TOOLS_BRANCH=6.1.0-6 MESSAGING_BRANCH=6.0.0-4 CENTOS5_XEN=no CENTOS6_XEN=yes CENTOS6_KVM=yes CENTOS7_KVM=no CENTOS7_DEFAULT=no CENTOS7_XEN=no  ./release.sh"'
                    }
                }
            }
        }
    }
    post {
        cleanup {
            sh "echo clean up build VMs"
            sh "virsh destroy rpmbuild-${env.BUILD_NUMBER}"
            sh "virsh undefine rpmbuild-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/rpmbuild-${env.BUILD_NUMBER}-cidata.iso"
            sh "virsh destroy ramdiskbuild-${env.BUILD_NUMBER}"
            sh "virsh undefine ramdiskbuild-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild-${env.BUILD_NUMBER}-cidata.iso"
            sh "virsh destroy ramdiskbuild6-${env.BUILD_NUMBER}"
            sh "virsh undefine ramdiskbuild6-${env.BUILD_NUMBER}"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}.qcow2"
            sh "rm -f /var/lib/libvirt/images/rpmbuild/ramdiskbuild6-${env.BUILD_NUMBER}-cidata.iso"
            sh "echo clean up build VMs done"
        }
    }
}




