diff options
author | Christian Breunig <christian@breunig.cc> | 2024-12-23 09:47:19 +0100 |
---|---|---|
committer | Christian Breunig <christian@breunig.cc> | 2024-12-23 09:47:19 +0100 |
commit | 38395e86d54ed2cd47b7af76a0bd8534fde9e5c1 (patch) | |
tree | 04947f88248808cfad9c11563293291dc66ea7b3 /vars/buildPackage.groovy | |
parent | 3b95165b039a7058f8e9312815d7dad2dc05b694 (diff) | |
download | vyos-build-38395e86d54ed2cd47b7af76a0bd8534fde9e5c1.tar.gz vyos-build-38395e86d54ed2cd47b7af76a0bd8534fde9e5c1.zip |
T6674: remove all references to Jenkins
Diffstat (limited to 'vars/buildPackage.groovy')
-rw-r--r-- | vars/buildPackage.groovy | 267 |
1 files changed, 0 insertions, 267 deletions
diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy deleted file mode 100644 index 531e51d9..00000000 --- a/vars/buildPackage.groovy +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020-2021 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call(description=null, pkgList=null, buildCmd=null, buildArm=false, changesPattern="**", buildLabel="ec2_amd64") { - // - description: Arbitrary text to print on Jenkins Job Description - // instead of package name - // - pkgList: Multiple packages can be build at once in a single Pipeline run - // - buildCmd: replace default build command "dpkg-buildpackage -uc -us -tc -b" - // with this custom version - // - buildArm: package will also be build for the arm64 platform - // - changesPattern: package will only be build if a change file matching this - // pattern is found - // - buildLabel: used to describe where the job should run. amd64 inside the - // string will be replaced with arm64 when those builds are enabled. - // Example: ec2_amd64 -> ec2_arm64 or foo_amd64 -> foo_arm64 - - setDescription(description) - - pipeline { - agent none - options { - disableConcurrentBuilds() - timeout(time: 240, unit: 'MINUTES') - timestamps() - buildDiscarder(logRotator(numToKeepStr: '10')) - } - stages { - stage('Define Agent') { - agent { - label "${buildLabel}" - } - when { - anyOf { - changeset "${changesPattern}" - triggeredBy cause: "UserIdCause" - } - } - steps { - script { - // create container name on demand - def branchName = getGitBranchName() - // Adjust PR target branch name so we can re-map it to the proper Docker image. - if (isPullRequest()) - branchName = env.CHANGE_TARGET.toLowerCase() - if (branchName.equals('master')) - branchName = 'current' - - env.DOCKER_IMAGE = 'vyos/vyos-build:' + branchName - - // Get the current UID and GID from the jenkins agent to allow use of the same UID inside Docker - env.USR_ID = sh(returnStdout: true, script: 'id -u').toString().trim() - env.GRP_ID = sh(returnStdout: true, script: 'id -g').toString().trim() - env.DOCKER_ARGS = '--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=' + env.USR_ID + ' -e GOSU_GID=' + env.GRP_ID - } - } - } - stage('Build Code') { - when { - anyOf { - changeset pattern: changesPattern, caseSensitive: true - triggeredBy cause: "UserIdCause" - } - } - parallel { - stage('amd64') { - agent { - docker { - label "${buildLabel}" - args "${env.DOCKER_ARGS}" - image "${env.DOCKER_IMAGE}" - alwaysPull true - reuseNode true - } - } - steps { - script { - cloneAndBuild(description, 'amd64', pkgList, buildCmd) - stash includes: '**/*.deb', name: 'binary-amd64', allowEmpty: true - 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 { - cleanup { - deleteDir() - } - } - } - stage('arm64') { - agent { - docker { - label "${buildLabel.replace('amd64', 'arm64')}" - args "${env.DOCKER_ARGS}" - image "${env.DOCKER_IMAGE}-arm64" - alwaysPull true - reuseNode true - } - } - when { - equals expected: true, actual: buildArm - } - steps { - script { - cloneAndBuild(description, 'arm64', pkgList, buildCmd) - stash includes: '**/*arm64.deb', name: 'binary-arm64', allowEmpty: true - } - } - post { - cleanup { - deleteDir() - } - } - } - } - } - stage("Finalize") { - when { - anyOf { - changeset pattern: changesPattern, caseSensitive: true - triggeredBy cause: "UserIdCause" - } - } - agent { - label "${buildLabel}" - } - steps { - script { - // Unpack files for amd64, sources and arm64 if packages got build - try { - unstash 'binary-amd64' - unstash 'binary-arm64' - } catch (e) { - print "Unstash failed, ignoring - could be because there exists no arm64 build" - currentBuild.result = 'SUCCESS' - } - try { - unstash 'source-dsc' - unstash 'source-tar' - } catch (e) { - print "Unstash 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 - } - - echo "Uploading Artifacts to external repository" - copyArtifacts fingerprintArtifacts: true, projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}') - - // build up some fancy groovy variables so we do not need to write/copy - // every option over and over again! - def RELEASE = getGitBranchName() - if (getGitBranchName() == "master") - RELEASE = 'current' - - def VYOS_REPO_PATH = '/home/sentrium/web/dev.packages.vyos.net/public_html/repositories/' + RELEASE - if (getGitBranchName() == "crux") - VYOS_REPO_PATH += '/vyos' - - def SSH_OPTS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR' - def SSH_REMOTE = env.DEV_PACKAGES_VYOS_NET_HOST // defined as global variable - def SSH_DIR = '~/VyOS/' + RELEASE - - 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: '**/*-build-deps_*.deb') - if (files) { - echo "Remove Debian build dependency files from the workspace..." - files.each { FILE -> - sh(script: "rm -f ${FILE}") - } - } - - files = findFiles(glob: '**/*.deb') - if (files) { - 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() - 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: "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}") - } - } - - 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('/').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'\"") - } - } - } - } - post { - cleanup { - deleteDir() - } - } - } - } - } -} |