diff options
author | Andrii <85483797+andriiandrieiev@users.noreply.github.com> | 2022-05-05 19:02:13 +0300 |
---|---|---|
committer | Andrii <85483797+andriiandrieiev@users.noreply.github.com> | 2022-05-05 19:02:13 +0300 |
commit | 2ab884dc4d85ecaaa0a4ebd78449b064b6e2251c (patch) | |
tree | 6cde347b3bcd525a0a05cf34f49fbecf795b40eb | |
parent | ce491296759df27c1279ee6147dd2efa4d2b198b (diff) | |
download | vyos-build-2ab884dc4d85ecaaa0a4ebd78449b064b6e2251c.tar.gz vyos-build-2ab884dc4d85ecaaa0a4ebd78449b064b6e2251c.zip |
Jenkins: builld dsc packages beside amd64 binaries
-rw-r--r-- | vars/buildPackage.groovy | 68 | ||||
-rw-r--r-- | vars/cloneAndBuild.groovy | 15 |
2 files changed, 76 insertions, 7 deletions
diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy index 15ba7e42..611a948c 100644 --- a/vars/buildPackage.groovy +++ b/vars/buildPackage.groovy @@ -90,6 +90,13 @@ def call(description=null, pkgList=null, buildCmd=null, changesPattern="**") { script { cloneAndBuild(description, 'amd64', pkgList, buildCmd) stash includes: '**/*.deb', name: 'binary-amd64' + try { + stash includes: '**/*.dsc', name: 'source-dsc' + stash includes: '**/*.tar.*z', name: 'source-tar' + } catch (e) { + print "Stashing failed, ignoring - no source packages" + currentBuild.result = 'SUCCESS' + } } } post { @@ -112,9 +119,15 @@ def call(description=null, pkgList=null, buildCmd=null, changesPattern="**") { } steps { script { - // Unpack files for amd64 + // Unpack files for amd64 + sources unstash 'binary-amd64' - + try { + unstash 'source-dsc' + unstash 'source-tar' + } catch (e) { + print "Unstashing failed, ignoring - no source packages" + currentBuild.result = 'SUCCESS' + } if (isCustomBuild()) { echo "Build not started from official Git repository! Artifacts are not uploaded to external repository" return @@ -138,10 +151,23 @@ def call(description=null, pkgList=null, buildCmd=null, changesPattern="**") { // publish build result, using SSH-dev.packages.vyos.net Jenkins Credentials sshagent(['SSH-dev.packages.vyos.net']) { + + sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"bash --login -c 'mkdir -p ${SSH_DIR}'\"") + + // Removing of source and binary packages should be BEFORE adding new ones. Else "reprepro [remove/removesrc]" command may remove [source/binary] package correspondingly (behavior depends on package links). + // To omit this feature(bug?) do not merge removing-adding sequence by sources and binaries as it used to be + files = findFiles(glob: '**/*.dsc') + if (files) { + echo "Remove deprecated source package(s) from the repository..." + files.each { FILE -> + def PACKAGE = sh(returnStdout: true, script: "cat ${FILE} | grep Source ").trim().tokenize(' ').last() + sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} removesrc ${RELEASE} ${PACKAGE}'\"") + } + } + files = findFiles(glob: '**/*.deb') if (files) { - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"bash --login -c 'mkdir -p ${SSH_DIR}'\"") - echo "Uploading package(s) and updating package(s) in the repository ..." + echo "Remove deprecated binary package(s) from the repository..." files.each { FILE -> // NOTE: Groovy is a pain in the ass and " quotes differ from ', so all shell code must use " in the beginning def PACKAGE = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Package").trim() @@ -149,13 +175,43 @@ def call(description=null, pkgList=null, buildCmd=null, changesPattern="**") { def ARCH = '' if (PACKAGE_ARCH != 'all') ARCH = '-A ' + PACKAGE_ARCH + sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH} remove ${RELEASE} ${PACKAGE}'\"") + } + } + files = findFiles(glob: '**/*.tar.*z') + if (files) { + echo "Uploading tarball package(s) to the repository..." + files.each { FILE -> sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH} remove ${RELEASE} ${PACKAGE}'\"") + } + } + files = findFiles(glob: '**/*.dsc') + if (files) { + echo "Uploading *.dsc package(s) to the repository..." + files.each { FILE -> + def PACKAGE = sh(returnStdout: true, script: "cat ${FILE} | grep Source ").trim().tokenize(' ').last() + sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") + def FILENAME = FILE.toString().tokenize('/').last() + sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} includedsc ${RELEASE} ${SSH_DIR}/${FILENAME}'\"") + } + } + + files = findFiles(glob: '**/*.deb') + if (files) { + echo "Uploading binary package(s) to the repository ..." + files.each { FILE -> + // NOTE: Groovy is a pain in the ass and " quotes differ from ', so all shell code must use " in the beginning + def PACKAGE = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Package").trim() + def PACKAGE_ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Architecture").trim() + def ARCH = '' + if (PACKAGE_ARCH != 'all') + ARCH = '-A ' + PACKAGE_ARCH + sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") // Packages like FRR produce their binary in a nested path e.g. packages/frr/frr-rpki-rtrlib-dbgsym_7.5_arm64.deb, // thus we will only extract the filename portion from FILE as the binary is scp'ed to SSH_DIR without any subpath. - def FILENAME = FILE.toString().tokenize('/')[-1] + def FILENAME = FILE.toString().tokenize('/').last() sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH} includedeb ${RELEASE} ${SSH_DIR}/${FILENAME}'\"") } sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} deleteunreferenced'\"") diff --git a/vars/cloneAndBuild.groovy b/vars/cloneAndBuild.groovy index f945ba75..347a3b95 100644 --- a/vars/cloneAndBuild.groovy +++ b/vars/cloneAndBuild.groovy @@ -54,11 +54,24 @@ def call(description, architecture, pkgList, buildCmd) { } else if (buildCmd) {
sh buildCmd
} else {
- sh 'dpkg-buildpackage -uc -us -tc -b'
+ try {
+ sh 'dpkg-buildpackage -uc -us -tc -F'
+ } catch (e) {
+ print "Source packages build failed, ignoring – building binaries only"
+ currentBuild.result = 'SUCCESS'
+ sh 'dpkg-buildpackage -uc -us -tc -b'
+ }
}
}
if (architecture == 'amd64') {
archiveArtifacts artifacts: "**/*.deb", fingerprint: true
+ try {
+ archiveArtifacts artifacts: "**/*.dsc", fingerprint: true
+ archiveArtifacts artifacts: "**/*.tar.*z", fingerprint: true
+ } catch (e) {
+ print "Archiving failed, ignoring - no source packages"
+ currentBuild.result = 'SUCCESS'
+ }
} else {
archiveArtifacts artifacts: "**/*_${architecture}.deb", fingerprint: true
}
|