ci: Re-org stages and parallelize tests

Build FCOS and run vmcheck in the same container, since it's only used
for that anyway right now. The main advantage is that we save time
provisioning another container and not having to stash and unstash the
FCOS image.

Also, since the compose tests don't actually need to wait for the FCOS
image, start running them in parallel with the FCOS + vmcheck branch.
This commit is contained in:
Jonathan Lebon 2019-12-21 17:42:11 -05:00 committed by OpenShift Merge Robot
parent 9daea46d66
commit 654ab64409

View File

@ -8,7 +8,7 @@ parallel rpms: {
coreos.pod(image: COSA_BUILDROOT_IMAGE, runAsUser: 0) { coreos.pod(image: COSA_BUILDROOT_IMAGE, runAsUser: 0) {
checkout scm checkout scm
sh """ sh """
set -euo pipefail set -xeuo pipefail
# fetch tags so `git describe` gives a nice NEVRA when building the RPM # fetch tags so `git describe` gives a nice NEVRA when building the RPM
git fetch origin --tags git fetch origin --tags
ci/installdeps.sh ci/installdeps.sh
@ -24,17 +24,18 @@ parallel rpms: {
cd packaging cd packaging
make -f Makefile.dist-packaging rpm make -f Makefile.dist-packaging rpm
mv \$(find . -name '*.rpm') ..
""" """
// make it easy for anyone to download the RPMs // make it easy for anyone to download the RPMs
archiveArtifacts 'packaging/**/*.rpm' archiveArtifacts '*.rpm'
stash includes: 'packaging/**/*.rpm', name: 'rpms' stash excludes: '*.src.rpm', includes: '*.rpm', name: 'rpms'
} }
}, },
codestyle: { codestyle: {
coreos.pod(image: COSA_IMAGE) { coreos.pod(image: COSA_IMAGE) {
checkout scm checkout scm
sh """ sh """
set -euo pipefail set -xeuo pipefail
# Jenkins by default only fetches the branch it's testing. Explicitly fetch master # Jenkins by default only fetches the branch it's testing. Explicitly fetch master
# for ci-commitmessage-submodules.sh # for ci-commitmessage-submodules.sh
git fetch origin +refs/heads/master:refs/remotes/origin/master git fetch origin +refs/heads/master:refs/remotes/origin/master
@ -48,53 +49,40 @@ rust: {
checkout scm checkout scm
sh """ sh """
set -euo pipefail set -xeuo pipefail
ci/msrv.sh ci/msrv.sh
cd rust && cargo test cd rust && cargo test
""" """
} }
}} }}
stage("Build FCOS") {
coreos.pod(image: COSA_IMAGE, runAsUser: 0, kvm: true) {
unstash 'rpms'
sh """
set -euo pipefail
rpms=\$(find packaging/ ! -name '*.src.rpm' -name '*.rpm')
# install our built rpm-ostree
dnf install -y \${rpms}
# and build FCOS with our built rpm-ostree inside of it
coreos-assembler init --force https://github.com/coreos/fedora-coreos-config
mkdir -p overrides/rpm
mv \${rpms} overrides/rpm
rm -rf packaging
coreos-assembler build
"""
stash includes: 'builds/latest/*/*.qcow2', name: 'fcos'
}
}
stage("Test") { stage("Test") {
parallel vmcheck: { parallel vmcheck: {
def nhosts = 6 def nhosts = 6
def mem = (nhosts * 1024) + 512 def mem = (nhosts * 1024) + 512
coreos.pod(image: COSA_IMAGE, runAsUser: 0, kvm: true, memory: "${mem}Mi", cpu: "${nhosts}") { coreos.pod(image: COSA_IMAGE, runAsUser: 0, kvm: true, memory: "${mem}Mi", cpu: "${nhosts}") {
stage("Build FCOS") {
checkout scm checkout scm
unstash 'rpms' unstash 'rpms'
// run this stage first without installing deps, so we match exactly the cosa pkgset
// (+ our built rpm-ostree)
sh """ sh """
set -euo pipefail set -xeuo pipefail
ci/installdeps.sh # really, we just need test deps, but meh... dnf install -y *.rpm
coreos-assembler init --force https://github.com/coreos/fedora-coreos-config
# install our built rpm-ostree # include our built rpm-ostree in the image
find packaging/ ! -name '*.src.rpm' -name '*.rpm' | xargs dnf install -y mkdir -p overrides/rpm
rm -rf packaging mv *.rpm overrides/rpm
coreos-assembler build
""" """
unstash 'fcos' }
stage("Install Deps") {
sh """
set -xeuo pipefail
ci/installdeps.sh # really, we just need test deps, but meh...
"""
}
stage("Run") {
try { try {
timeout(time: 30, unit: 'MINUTES') { timeout(time: 30, unit: 'MINUTES') {
sh """ sh """
@ -106,6 +94,7 @@ parallel vmcheck: {
} }
} finally { } finally {
sh """ sh """
set -xeuo pipefail
if [ -d vmcheck-logs ]; then if [ -d vmcheck-logs ]; then
tar -C vmcheck-logs -cf- . | xz -c9 > vmcheck-logs.tar.xz tar -C vmcheck-logs -cf- . | xz -c9 > vmcheck-logs.tar.xz
fi fi
@ -113,6 +102,7 @@ parallel vmcheck: {
archiveArtifacts allowEmptyArchive: true, artifacts: 'vmcheck-logs.tar.xz' archiveArtifacts allowEmptyArchive: true, artifacts: 'vmcheck-logs.tar.xz'
} }
} }
}
}, },
compose: { compose: {
def jobs = 5 def jobs = 5
@ -120,14 +110,14 @@ compose: {
coreos.pod(image: COSA_IMAGE, runAsUser: 0, emptyDirs: ["/srv/tmpdir"], kvm: true, memory: "${mem}Mi", cpu: "${jobs}") { coreos.pod(image: COSA_IMAGE, runAsUser: 0, emptyDirs: ["/srv/tmpdir"], kvm: true, memory: "${mem}Mi", cpu: "${jobs}") {
checkout scm checkout scm
unstash 'rpms' unstash 'rpms'
stage("Install Deps") {
sh """ sh """
set -euo pipefail set -xeuo pipefail
ci/installdeps.sh # really, we just need test deps, but meh... ci/installdeps.sh # really, we just need test deps, but meh...
dnf install -y *.rpm # install our built rpm-ostree
# install our built rpm-ostree
find packaging/ ! -name '*.src.rpm' -name '*.rpm' | xargs dnf install -y
rm -rf packaging
""" """
}
stage("Run") {
try { try {
timeout(time: 40, unit: 'MINUTES') { timeout(time: 40, unit: 'MINUTES') {
sh """ sh """
@ -138,6 +128,7 @@ compose: {
} }
} finally { } finally {
sh """ sh """
set -xeuo pipefail
if [ -d compose-logs ]; then if [ -d compose-logs ]; then
tar -C compose-logs -cf- . | xz -c9 > compose-logs.tar.xz tar -C compose-logs -cf- . | xz -c9 > compose-logs.tar.xz
fi fi
@ -145,4 +136,5 @@ compose: {
archiveArtifacts allowEmptyArchive: true, artifacts: 'compose-logs.tar.xz' archiveArtifacts allowEmptyArchive: true, artifacts: 'compose-logs.tar.xz'
} }
} }
}
}} }}