We've come a long way and we need to triage failures that occur during
CI for the master branch. This will help us find problems with CI as
well as find other issues that could show up in a customer environment.
Also, let's send a happy notification when everything goes well. 💚
Signed-off-by: Major Hayden <major@redhat.com>
401 lines
13 KiB
Groovy
401 lines
13 KiB
Groovy
pipeline {
|
|
agent none
|
|
|
|
environment {
|
|
AWS_REGION = "us-east-2"
|
|
AWS_BUCKET = "imagebuilder-jenkins-testing-use2"
|
|
}
|
|
|
|
options {
|
|
timestamps()
|
|
ansiColor('xterm')
|
|
// Cancel the pipeline if it runs for more than three hours.
|
|
timeout(
|
|
time: 3,
|
|
unit: "HOURS"
|
|
)
|
|
}
|
|
stages {
|
|
|
|
stage("Prepare 🤔") {
|
|
agent { label "schutzbot" }
|
|
steps {
|
|
sh (
|
|
label: "Get environment variables",
|
|
script: "env | sort"
|
|
)
|
|
}
|
|
}
|
|
|
|
stage("Mock build 👷🏻") {
|
|
// Halt the pipeline immediately if a single mock build fails.
|
|
// A failure to build an RPM is serious and must be
|
|
// investigated.
|
|
failFast true
|
|
|
|
parallel {
|
|
|
|
stage('F31') {
|
|
agent { label "f31cloudbase && x86_64" }
|
|
environment {
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
sh "schutzbot/ci_details.sh"
|
|
retry(3) {
|
|
sh "schutzbot/mockbuild.sh"
|
|
}
|
|
stash (
|
|
includes: 'osbuild-mock.repo',
|
|
name: 'fedora31'
|
|
)
|
|
}
|
|
}
|
|
stage('F32') {
|
|
agent { label "f32cloudbase && x86_64" }
|
|
environment {
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
sh "schutzbot/ci_details.sh"
|
|
retry(3) {
|
|
sh "schutzbot/mockbuild.sh"
|
|
}
|
|
stash (
|
|
includes: 'osbuild-mock.repo',
|
|
name: 'fedora32'
|
|
)
|
|
}
|
|
}
|
|
stage('EL8') {
|
|
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"
|
|
retry(3) {
|
|
sh "schutzbot/mockbuild.sh"
|
|
}
|
|
stash (
|
|
includes: 'osbuild-mock.repo',
|
|
name: 'rhel8cdn'
|
|
)
|
|
}
|
|
}
|
|
stage('EL8.3') {
|
|
agent { label "rhel83cloudbase && x86_64" }
|
|
environment {
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
NIGHTLY_REPO = credentials('rhel8-nightly-repo')
|
|
NIGHTLY_MOCK_TEMPLATE = credentials('rhel8-nightly-mock-template')
|
|
}
|
|
steps {
|
|
sh "schutzbot/ci_details.sh"
|
|
retry(3) {
|
|
sh "schutzbot/mockbuild.sh"
|
|
}
|
|
stash (
|
|
includes: 'osbuild-mock.repo',
|
|
name: 'rhel83'
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("Testing 🍌") {
|
|
parallel {
|
|
|
|
stage('F31 Base') {
|
|
agent { label "f31cloudbase && x86_64" }
|
|
environment { TEST_TYPE = "base" }
|
|
steps {
|
|
unstash 'fedora31'
|
|
run_tests('base')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora31-base')
|
|
}
|
|
}
|
|
}
|
|
stage('F31 Image') {
|
|
agent { label "f31cloudbase && psi && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "image"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
AZURE_CREDS = credentials('azure')
|
|
}
|
|
steps {
|
|
unstash 'fedora31'
|
|
run_tests('image')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora31-image')
|
|
}
|
|
}
|
|
}
|
|
stage('F31 Integration') {
|
|
agent { label "f31cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "integration"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
unstash 'fedora31'
|
|
run_tests('integration')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora31-integration')
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('F32 Base') {
|
|
agent { label "f32cloudbase && x86_64" }
|
|
environment { TEST_TYPE = "base" }
|
|
steps {
|
|
unstash 'fedora32'
|
|
run_tests('base')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora32-base')
|
|
}
|
|
}
|
|
}
|
|
stage('F32 Image') {
|
|
agent { label "f32cloudbase && psi && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "image"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
AZURE_CREDS = credentials('azure')
|
|
}
|
|
steps {
|
|
unstash 'fedora32'
|
|
run_tests('image')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora32-image')
|
|
}
|
|
}
|
|
}
|
|
stage('F32 Integration') {
|
|
agent { label "f32cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "integration"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
unstash 'fedora32'
|
|
run_tests('integration')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora32-integration')
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('EL8 Base') {
|
|
agent { label "rhel8cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "base"
|
|
RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production')
|
|
}
|
|
steps {
|
|
unstash 'rhel8cdn'
|
|
run_tests('base')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel8-base')
|
|
}
|
|
}
|
|
}
|
|
stage('EL8 Image') {
|
|
agent { label "rhel8cloudbase && psi && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "image"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
AZURE_CREDS = credentials('azure')
|
|
RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production')
|
|
}
|
|
steps {
|
|
unstash 'rhel8cdn'
|
|
run_tests('image')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel8-image')
|
|
}
|
|
}
|
|
}
|
|
stage('EL8 Integration') {
|
|
agent { label "rhel8cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "integration"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
RHN_REGISTRATION_SCRIPT = credentials('rhn-register-script-production')
|
|
}
|
|
steps {
|
|
unstash 'rhel8cdn'
|
|
run_tests('integration')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel8-integration')
|
|
}
|
|
}
|
|
}
|
|
|
|
stage('EL8.3 Base') {
|
|
agent { label "rhel83cloudbase && x86_64" }
|
|
environment { TEST_TYPE = "base" }
|
|
steps {
|
|
unstash 'rhel83'
|
|
run_tests('base')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel83-base')
|
|
}
|
|
}
|
|
}
|
|
stage('EL8.3 Image') {
|
|
agent { label "rhel83cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "image"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
AZURE_CREDS = credentials('azure')
|
|
}
|
|
steps {
|
|
unstash 'rhel83'
|
|
run_tests('image')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel83-image')
|
|
}
|
|
}
|
|
}
|
|
stage('EL8.3 Integration') {
|
|
agent { label "rhel83cloudbase && x86_64" }
|
|
environment {
|
|
TEST_TYPE = "integration"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
unstash 'rhel83'
|
|
run_tests('integration')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('rhel83-integration')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success {
|
|
when { branch 'master' }
|
|
telegramSend "💚 CI passed for osbuild-composer master branch!. ${env.BUILD_URL}"
|
|
}
|
|
unsuccessful {
|
|
when { branch 'master' }
|
|
telegramSend "💣 CI failed for osbuild-composer master 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(test_type) {
|
|
|
|
// 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 base tests.
|
|
if (test_type == 'base') {
|
|
sh (
|
|
label: "Base tests",
|
|
script: "schutzbot/run_base_tests.sh"
|
|
)
|
|
}
|
|
|
|
if (test_type == 'image') {
|
|
sh (
|
|
label: "Image tests",
|
|
script: "schutzbot/run_image_tests.sh"
|
|
)
|
|
}
|
|
|
|
if (test_type == 'integration') {
|
|
// Run the qcow2 test.
|
|
sh (
|
|
label: "Integration test: QCOW2",
|
|
script: "test/image-tests/qemu.sh qcow2"
|
|
)
|
|
|
|
// Run the openstack test.
|
|
sh (
|
|
label: "Integration test: OpenStack",
|
|
script: "test/image-tests/qemu.sh openstack"
|
|
)
|
|
|
|
// Run the VHD/Azure test.
|
|
sh (
|
|
label: "Integration test: VHD",
|
|
script: "test/image-tests/qemu.sh vhd"
|
|
)
|
|
|
|
// Run the VMDK/VMware test.
|
|
sh (
|
|
label: "Integration test: VMDK",
|
|
script: "test/image-tests/qemu.sh vmdk"
|
|
)
|
|
|
|
// Run the AWS test.
|
|
sh (
|
|
label: "Integration test: AWS",
|
|
script: "test/image-tests/aws.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 "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 logs.
|
|
archiveArtifacts (
|
|
allowEmptyArchive: true,
|
|
artifacts: "${test_slug}/*.log,${test_slug}/*.jpg"
|
|
)
|
|
|
|
}
|