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 32') {
agent { label "f32cloudbase && x86_64" }
environment {
AWS_CREDS = credentials('aws-credentials-osbuildci')
}
steps {
sh "schutzbot/ci_details.sh"
sh "schutzbot/mockbuild.sh"
}
}
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.4') {
agent { label "rhel84cloudbase && x86_64 && psi" }
environment {
AWS_CREDS = credentials('aws-credentials-osbuildci')
RHEL84_NIGHTLY_REPO = credentials('rhel84-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 32') {
agent { label "f32cloudbase && x86_64 && psi" }
environment {
TEST_TYPE = "image"
AWS_CREDS = credentials('aws-credentials-osbuildci')
DISTRO_CODE = "fedora32"
}
steps {
run_tests()
}
post {
always {
preserve_logs('fedora32-image')
}
}
}
stage('Fedora 33') {
agent { label "f33cloudbase && x86_64 && psi" }
environment {
TEST_TYPE = "image"
AWS_CREDS = credentials('aws-credentials-osbuildci')
DISTRO_CODE = "fedora33"
}
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"
}
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: "schutzbot/run_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"
)
}