From b4e414127dba4d7f2c565b077e66a0b60b715cbb Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 16 Oct 2019 07:21:10 +0200 Subject: add Jenkinsfile --- Jenkinsfile | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..3293f85 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,129 @@ +#!/usr/bin/env groovy + +def RPMSource() { + dir ('source') { + checkout([ + $class: 'GitSCM', + branches: [ + [ name: '*/master' ] + ], + extensions: [ + [ + $class: 'CloneOption', + timeout: 60 + ] + ], + userRemoteConfigs: [ + [ url: 'https://github.com/bonzini/qboot.git' ] + ]]) + } +} + +def RPMBuild() { + sh ''' + # figure version +# commit="$(cd source; git describe --tags --long --match 'v*')" +# ghash="${commit##*-}" +# commit="${commit%-*}" +# gcnt="${commit##*-}" +# commit="${commit%-*}" +# version="${commit#v}" + ghash="g$(cd source; git show --format='format:%h' | head -1)" + gcnt="$(git show --format='format:%ai' | head -1 | sed -e 's/ .*//' -e 's/-//g')" + version="0" + + # fresh snapshot tarball + rm -f *.tar.gz + tarball="qboot-${ghash}.tar.gz" + (cd source; git archive --format=tar --prefix="${tarball%.tar.gz}/" HEAD) \ + | gzip > "${tarball}" + + # tweak spec file + sed -i.orig \ + -e "s/\\(Version:[ \\t]\\+\\)\\(.*\\)/\\1${version}/" \ + -e "s/\\(Release:[ \\t]\\+\\)\\(.*\\)/\\1${gcnt}.${BUILD_NUMBER}.${ghash}/" \ + -e "s/\\(Source0:[ \\t]\\+\\)\\(.*\\)/\\1${tarball}/" \ + -e "s/\\(%setup\\)\\(.*\\)/\\1 -n ${tarball%.tar.gz}/" \ + *.spec + diff -u *.spec.orig *.spec || true + + # build package + rpmbuild \ + --define "_specdir ${WORKSPACE}" \ + --define "_sourcedir ${WORKSPACE}" \ + --define "_rpmdir ${WORKSPACE}/rpms" \ + --define "_srcrpmdir ${WORKSPACE}/rpms/src" \ + --define "_builddir ${WORKSPACE}/build" \ + --define "_buildrootdir ${WORKSPACE}/buildroot" \ + -ba *.spec + + # revert spec file tweaks + git reset --hard + + # drop source rpm + rm -rf "${WORKSPACE}/rpms/src" + + # create rpm package repo + createrepo_c rpms + ''' + archiveArtifacts 'rpms/*/*' +} + +def RPMCleanup() { + dir ("build") { + deleteDir() + } + dir ("buildroot") { + deleteDir() + } + dir ("rpms") { + deleteDir() + } +} + +pipeline { + agent { + node 'dist-rhel-7-x86_64' + } + + options { + buildDiscarder(logRotator(numToKeepStr: '3')) + disableConcurrentBuilds() + } + + triggers { + pollSCM('H * * * *') + } + + stages { + + stage ('Prepare') { + steps { + RPMSource(); + } + } + + stage ("RPM Build") { + steps { + RPMBuild() + } + } + + stage ("Cleanup") { + steps { + RPMCleanup() + } + } + } + + post { + failure { + emailext([ + to: 'builds@kraxel.org', + subject: "${JOB_NAME} - build #${BUILD_NUMBER} - FAILED!", + body: "${BUILD_URL}\n", + attachLog: true, + ]) + } + } +} -- cgit