pipeline { agent none environment { AWS_REGION = "us-east-2" } options { ansiColor('xterm') timestamps() } stages { stage("Prepare") { agent { label "schutzbot" } options { // Don't checkout the git repository here. It just clogs // up the Jenkins disk space and does nothing for us. skipDefaultCheckout() } steps { sh ( label: "Get environment variables", script: "env | sort" ) } } stage("Mock") { // Halt the entire pipeline if a single RPM build fails. That // could indicate a code problem that needs to be investigated. failFast true parallel { stage('Fedora 33') { agent { label "f33cloudbase && x86_64" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('Fedora 33 aarch64') { agent { label "f33cloudbase && aarch64 && aws" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('RHEL 8 CDN') { agent { label "rhel8cloudbase && x86_64" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('RHEL 8 aarch64 CDN') { agent { label "rhel8cloudbase && aarch64 && aws" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('RHEL 8.5') { agent { label "rhel85cloudbase && x86_64 && psi" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') RHEL85_NIGHTLY_REPO = credentials('rhel85-nightly-repo') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('CS8') { agent { label "cs8cloudbase && x86_64 && aws" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } stage('CS8 aarch64') { agent { label "cs8cloudbase && aarch64 && aws" } environment { AWS_CREDS = credentials('aws-credentials-osbuildci') } steps { sh "schutzbot/ci_details.sh" sh "schutzbot/mockbuild.sh" } } } } stage("Functional Testing") { // Allow the other stages to finish if a single stage fails. failFast false parallel { stage('Fedora 33') { agent { label "f33cloudbase && x86_64 && psi" } environment { TEST_TYPE = "image" AWS_CREDS = credentials('aws-credentials-osbuildci') DISTRO_CODE = "fedora33" AWS_IMAGE_TEST_CREDS = credentials('aws-credentials-osbuild-image-test') AZURE_CREDS = credentials('azure') OPENSTACK_CREDS = credentials('psi-openstack-creds') VCENTER_CREDS = credentials('vmware-vcenter-credentials') } steps { run_tests() } post { always { preserve_logs('fedora33-image') } } } stage('RHEL 8 CDN') { agent { label "rhel8cloudbase && x86_64 && psi" } environment { TEST_TYPE = "image" RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production') AWS_CREDS = credentials('aws-credentials-osbuildci') DISTRO_CODE = "rhel8" AWS_IMAGE_TEST_CREDS = credentials('aws-credentials-osbuild-image-test') AZURE_CREDS = credentials('azure') OPENSTACK_CREDS = credentials('psi-openstack-creds') VCENTER_CREDS = credentials('vmware-vcenter-credentials') } steps { run_tests() } post { always { preserve_logs('rhel8-image') } } } } } } post { success { node('schutzbot') { script { if (env.BRANCH_NAME == 'main') { telegramSend "💚 CI passed for osbuild main branch ${env.BUILD_URL}" } } } } unsuccessful { node('schutzbot') { script { if (env.BRANCH_NAME == 'main') { telegramSend "💣 CI failed for osbuild main branch ${env.BUILD_URL}" } } } } } } // Set up a function to hold the steps needed to run the tests so we don't // need to copy/paste the same lines over and over above. void run_tests() { // Get CI machine details. sh ( label: "Get CI machine details", script: "schutzbot/ci_details.sh" ) // Deploy the Image Builder packages and services. sh ( label: "Deploy", script: "schutzbot/deploy.sh" ) // Run the image tests. sh ( label: "Image tests", script: "/usr/libexec/tests/osbuild-composer/image_tests.sh" ) } // Move logs to a unique location and tell Jenkins to capture them on success // or failure. void preserve_logs(test_slug) { // Save the systemd journal. sh "sudo journalctl --boot > systemd-journald.log" // Make a directory for the log files and move the logs there. sh "mkdir ${test_slug} && mv *.log *.jpg ${test_slug}/ || true" // Artifact the repo file. sh "cp /etc/yum.repos.d/osbuild.repo ${test_slug}/ || true" // Artifact the logs. archiveArtifacts ( allowEmptyArchive: true, artifacts: "${test_slug}/*.log,${test_slug}/*.jpg,${test_slug}/*.repo" ) }