The CI is in two stages, for each supported distro. First the RPMs are generated from the spec file in the repo for the given distro and architecture. Once all the RPM builds have succeeded successfully, a test machine is provisioned with osbulid-composer installed, and koji API enabled. The repository containing the RPMs of the code being tested is also enabled on the test machine, and the cli client is installed. Finally, the test/integration.sh script is executed, which currently does nothing. Signed-off-by: Tom Gundersen <teg@jklm.no>
183 lines
5.5 KiB
Groovy
183 lines
5.5 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" }
|
|
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 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('F32') {
|
|
agent { label "f32cloudbase && x86_64 && aws" }
|
|
environment {
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
sh "schutzbot/ci_details.sh"
|
|
retry(3) {
|
|
sh "schutzbot/mockbuild.sh"
|
|
}
|
|
stash (
|
|
includes: 'mock.repo',
|
|
name: 'fedora32'
|
|
)
|
|
}
|
|
}
|
|
stage('EL8') {
|
|
agent { label "rhel8cloudbase && x86_64 && aws" }
|
|
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: 'mock.repo',
|
|
name: 'rhel8cdn'
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
stage("Testing 🍌") {
|
|
parallel {
|
|
|
|
stage('F32 Integration') {
|
|
agent { label "f32cloudbase && x86_64 && aws" }
|
|
environment {
|
|
TEST_TYPE = "integration"
|
|
AWS_CREDS = credentials('aws-credentials-osbuildci')
|
|
}
|
|
steps {
|
|
unstash 'fedora32'
|
|
run_tests('integration')
|
|
}
|
|
post {
|
|
always {
|
|
preserve_logs('fedora32-integration')
|
|
}
|
|
}
|
|
}
|
|
stage('EL8 Integration') {
|
|
agent { label "rhel8cloudbase && x86_64 && aws" }
|
|
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')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
post {
|
|
success {
|
|
node('schutzbot') {
|
|
script {
|
|
if (env.BRANCH_NAME == 'master') {
|
|
telegramSend "💚 CI passed for koji-osbuild master branch ${env.BUILD_URL}"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
unsuccessful {
|
|
node('schutzbot') {
|
|
script {
|
|
if (env.BRANCH_NAME == 'master') {
|
|
telegramSend "💣 CI failed for koji-osbuild 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"
|
|
)
|
|
|
|
if (test_type == 'integration') {
|
|
sh (
|
|
label: "Integration tests",
|
|
script: "test/integration.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"
|
|
)
|
|
|
|
}
|