Blame schutzbot/Jenkinsfile

Packit 63bb0d
pipeline {
Packit 63bb0d
    agent none
Packit 63bb0d
Packit 63bb0d
    environment {
Packit 63bb0d
        AWS_REGION = "us-east-2"
Packit 63bb0d
        AWS_BUCKET = "imagebuilder-jenkins-testing-use2"
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
    options {
Packit 63bb0d
        timestamps()
Packit 63bb0d
        ansiColor('xterm')
Packit 63bb0d
        // Cancel the pipeline if it runs for more than three hours.
Packit 63bb0d
        timeout(
Packit 63bb0d
            time: 3,
Packit 63bb0d
            unit: "HOURS"
Packit 63bb0d
        )
Packit 63bb0d
    }
Packit 63bb0d
    stages {
Packit 63bb0d
Packit 63bb0d
        stage("Prepare 🤔") {
Packit 63bb0d
            agent { label "schutzbot" }
Packit 63bb0d
            options {
Packit 63bb0d
                // Don't checkout the git repository here. It just clogs
Packit 63bb0d
                // up the Jenkins disk space and does nothing for us.
Packit 63bb0d
                skipDefaultCheckout()
Packit 63bb0d
            }
Packit 63bb0d
            steps {
Packit 63bb0d
                sh (
Packit 63bb0d
                    label: "Get environment variables",
Packit 63bb0d
                    script: "env | sort"
Packit 63bb0d
                )
Packit 63bb0d
            }
Packit 63bb0d
        }
Packit 63bb0d
Packit 63bb0d
        stage("Mock build 👷🏻") {
Packit 63bb0d
            // Halt the pipeline immediately if a single mock build fails.
Packit 63bb0d
            // A failure to build an RPM is serious and must be
Packit 63bb0d
            // investigated.
Packit 63bb0d
            failFast true
Packit 63bb0d
Packit 63bb0d
            parallel {
Packit 63bb0d
Packit 63bb0d
                stage('EL8') {
Packit 63bb0d
                    agent { label "rhel8cloudbase && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        AWS_CREDS = credentials('aws-credentials-osbuildci')
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        sh "schutzbot/ci_details.sh"
Packit 63bb0d
                        retry(3) {
Packit 63bb0d
                            sh "schutzbot/mockbuild.sh"
Packit 63bb0d
                        }
Packit 63bb0d
                        stash (
Packit 63bb0d
                            includes: 'osbuild-mock.repo',
Packit 63bb0d
                            name: 'rhel8cdn'
Packit 63bb0d
                        )
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
                stage('EL8.3') {
Packit 63bb0d
                    agent { label "rhel83cloudbase && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        AWS_CREDS = credentials('aws-credentials-osbuildci')
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production-beta')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        sh "schutzbot/ci_details.sh"
Packit 63bb0d
                        retry(3) {
Packit 63bb0d
                            sh "schutzbot/mockbuild.sh"
Packit 63bb0d
                        }
Packit 63bb0d
                        stash (
Packit 63bb0d
                            includes: 'osbuild-mock.repo',
Packit 63bb0d
                            name: 'rhel83'
Packit 63bb0d
                        )
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
            }
Packit 63bb0d
        }
Packit 63bb0d
Packit 63bb0d
        stage("Testing 🍌") {
Packit 63bb0d
            parallel {
Packit 63bb0d
Packit 63bb0d
                stage('EL8 Integration') {
Packit 63bb0d
                    agent { label "rhel8cloudbase && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        TEST_TYPE = "integration"
Packit 63bb0d
                        AWS_CREDS = credentials('aws-credentials-osbuildci')
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        unstash 'rhel8cdn'
Packit 63bb0d
                        run_tests('integration')
Packit 63bb0d
                    }
Packit 63bb0d
                    post {
Packit 63bb0d
                        always {
Packit 63bb0d
                            preserve_logs('rhel8-integration')
Packit 63bb0d
                        }
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
Packit 63bb0d
                stage('EL8.3 Base') {
Packit 63bb0d
                    agent { label "rhel83cloudbase && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        TEST_TYPE = "base"
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production-beta')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        unstash 'rhel83'
Packit 63bb0d
                        run_tests('base')
Packit 63bb0d
                    }
Packit 63bb0d
                    post {
Packit 63bb0d
                        always {
Packit 63bb0d
                            preserve_logs('rhel83-base')
Packit 63bb0d
                        }
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
                stage('EL8.3 Image') {
Packit 63bb0d
                    agent { label "rhel83cloudbase && psi && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        TEST_TYPE = "image"
Packit 63bb0d
                        AWS_CREDS = credentials('aws-credentials-osbuildci')
Packit 63bb0d
                        AZURE_CREDS = credentials('azure')
Packit 63bb0d
                        OPENSTACK_CREDS = credentials("psi-openstack-creds")
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production-beta')
Packit 63bb0d
                        VCENTER_CREDS = credentials('vmware-vcenter-credentials')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        unstash 'rhel83'
Packit 63bb0d
                        run_tests('image')
Packit 63bb0d
                    }
Packit 63bb0d
                    post {
Packit 63bb0d
                        always {
Packit 63bb0d
                            preserve_logs('rhel83-image')
Packit 63bb0d
                        }
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
                stage('EL8.3 Integration') {
Packit 63bb0d
                    agent { label "rhel83cloudbase && x86_64" }
Packit 63bb0d
                    environment {
Packit 63bb0d
                        TEST_TYPE = "integration"
Packit 63bb0d
                        AWS_CREDS = credentials('aws-credentials-osbuildci')
Packit 63bb0d
                        RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production-beta')
Packit 63bb0d
                    }
Packit 63bb0d
                    steps {
Packit 63bb0d
                        unstash 'rhel83'
Packit 63bb0d
                        run_tests('integration')
Packit 63bb0d
                    }
Packit 63bb0d
                    post {
Packit 63bb0d
                        always {
Packit 63bb0d
                            preserve_logs('rhel83-integration')
Packit 63bb0d
                        }
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
            }
Packit 63bb0d
        }
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
    post {
Packit 63bb0d
        success {
Packit 63bb0d
            node('schutzbot') {
Packit 63bb0d
                script {
Packit Service 5f350b
                    if (env.BRANCH_NAME == 'rhel-8.3.0') {
Packit Service 5f350b
                        telegramSend "💚 CI passed for osbuild-composer ${env.BRANCH_NAME} branch ${env.BUILD_URL}"
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
            }
Packit 63bb0d
        }
Packit 63bb0d
        unsuccessful {
Packit 63bb0d
            node('schutzbot') {
Packit 63bb0d
                script {
Packit Service 5f350b
                    if (env.BRANCH_NAME == 'rhel-8.3.0') {
Packit Service 5f350b
                        telegramSend "💣 CI failed for osbuild-composer ${env.BRANCH_NAME} branch ${env.BUILD_URL}"
Packit 63bb0d
                    }
Packit 63bb0d
                }
Packit 63bb0d
            }
Packit 63bb0d
        }
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Set up a function to hold the steps needed to run the tests so we don't
Packit 63bb0d
// need to copy/paste the same lines over and over above.
Packit 63bb0d
void run_tests(test_type) {
Packit 63bb0d
Packit 63bb0d
    // Get CI machine details.
Packit 63bb0d
    sh (
Packit 63bb0d
        label: "Get CI machine details",
Packit 63bb0d
        script: "schutzbot/ci_details.sh"
Packit 63bb0d
    )
Packit 63bb0d
Packit 63bb0d
    // Deploy the Image Builder packages and services.
Packit 63bb0d
    sh (
Packit 63bb0d
        label: "Deploy",
Packit 63bb0d
        script: "schutzbot/deploy.sh"
Packit 63bb0d
    )
Packit 63bb0d
Packit 63bb0d
    // Run the base tests.
Packit 63bb0d
    if (test_type == 'base') {
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Base tests",
Packit 63bb0d
            script: "schutzbot/run_base_tests.sh"
Packit 63bb0d
        )
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
    if (test_type == 'image') {
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Image tests",
Packit 63bb0d
            script: "schutzbot/run_image_tests.sh"
Packit 63bb0d
        )
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
    if (test_type == 'integration') {
Packit 63bb0d
        // Run the qcow2 test.
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Integration test: QCOW2",
Packit 63bb0d
            script: "test/image-tests/qemu.sh qcow2"
Packit 63bb0d
        )
Packit 63bb0d
Packit 63bb0d
        // Run the openstack test.
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Integration test: OpenStack",
Packit 63bb0d
            script: "test/image-tests/qemu.sh openstack"
Packit 63bb0d
        )
Packit 63bb0d
Packit 63bb0d
        // Run the VHD/Azure test.
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Integration test: VHD",
Packit 63bb0d
            script: "test/image-tests/qemu.sh vhd"
Packit 63bb0d
        )
Packit 63bb0d
Packit 63bb0d
        // Run the AWS test.
Packit 63bb0d
        sh (
Packit 63bb0d
            label: "Integration test: AWS",
Packit 63bb0d
            script: "test/image-tests/aws.sh"
Packit 63bb0d
        )
Packit 63bb0d
    }
Packit 63bb0d
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Move logs to a unique location and tell Jenkins to capture them on success
Packit 63bb0d
// or failure.
Packit 63bb0d
void preserve_logs(test_slug) {
Packit 63bb0d
Packit 63bb0d
    // Save the systemd journal.
Packit 63bb0d
    sh "journalctl --boot > systemd-journald.log"
Packit 63bb0d
Packit 63bb0d
    // Make a directory for the log files and move the logs there.
Packit 63bb0d
    sh "mkdir ${test_slug} && mv *.log *.jpg ${test_slug}/ || true"
Packit 63bb0d
Packit 63bb0d
    // Artifact the logs.
Packit 63bb0d
    archiveArtifacts (
Packit 63bb0d
        allowEmptyArchive: true,
Packit 63bb0d
        artifacts: "${test_slug}/*.log,${test_slug}/*.jpg"
Packit 63bb0d
    )
Packit 63bb0d
Packit 63bb0d
}