diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-06-20 17:30:12 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-06-20 23:11:56 +0200 |
commit | b213775285018e0610bc307abc08bd5db956a8c9 (patch) | |
tree | 7b19a345f1813065307ea0e9e7f3249734987b78 | |
parent | 7ab2724c338f1372d0ef65f0ac3600282d13ace0 (diff) | |
download | vyos-build-b213775285018e0610bc307abc08bd5db956a8c9.tar.gz vyos-build-b213775285018e0610bc307abc08bd5db956a8c9.zip |
Jenkins: lib: add programmable package build Pipeline
-rw-r--r-- | packages/netfilter/Jenkinsfile | 172 | ||||
-rw-r--r-- | vars/buildPackage.groovy | 124 | ||||
-rw-r--r-- | vars/setDescription.groovy | 8 |
3 files changed, 159 insertions, 145 deletions
diff --git a/packages/netfilter/Jenkinsfile b/packages/netfilter/Jenkinsfile index 1af7dec5..d73fd3dd 100644 --- a/packages/netfilter/Jenkinsfile +++ b/packages/netfilter/Jenkinsfile @@ -14,151 +14,37 @@ // along with this program. If not, see <http://www.gnu.org/licenses/>. @NonCPS -/* Using a version specifier library, use 'current' branch */ + +// Using a version specifier library, use 'current' branch @Library('vyos-build@current') -/* Only keep the 10 most recent builds. */ -def projectProperties = [ - [$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']], -] +def pkgList = [ + // pkg-libnftnl + ['name': 'pkg-libnftnl', + 'scmCommit': 'debian/1.1.7-1', + 'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnftnl.git', + 'buildCmd': 'dpkg-buildpackage -uc -us -tc -b'], -properties(projectProperties) -setDescription() + // pkg-nftables + ['name': 'pkg-nftables', + 'scmCommit': 'debian/0.9.6-1', + 'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-nftables.git', + 'buildCmd': '''sudo dpkg -i ../libnftnl*.deb; + sed -i "s/debhelper-compat.*/debhelper-compat (= 12),/" debian/control; + dpkg-buildpackage -uc -us -tc -b'''], -node('Docker') { - stage('Define Agent') { - 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. CHANGE_ID is set only for pull requests, so it is - // safe to access the pullRequest global variable - if (env.CHANGE_ID) { - branchName = "${env.CHANGE_TARGET}".toLowerCase() - } - if (branchName.equals("master")) { - branchName = "current" - } - env.DOCKER_IMAGE = "vyos/vyos-build:" + branchName - } - } -} + // pkg-conntrack-tools + ['name': 'pkg-conntrack-tools', + 'scmCommit': 'debian/1%1.4.6-1', + 'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-conntrack-tools.git', + 'buildCmd': 'dpkg-buildpackage -uc -us -tc -b'], + + // pkg-conntrack-tools + ['name': 'pkg-conntrack-tools', + 'scmCommit': 'debian/1.0.8-1', + 'scmUrl': 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnetfilter-conntrack.git', + 'buildCmd': '''sudo dpkg -i ../libnetfilter*.deb; + dpkg-buildpackage -uc -us -tc -b'''] +] -pipeline { - agent { - docker { - args "--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006" - image "${env.DOCKER_IMAGE}" - alwaysPull true - } - } - environment { - BASE_DIR = "packages/netfilter/" - CHANGESET_DIR = "**/${env.BASE_DIR}*" - } - options { - disableConcurrentBuilds() - timeout(time: 60, unit: 'MINUTES') - timestamps() - } - stages { - stage('Fetch') { - when { - beforeOptions true - beforeAgent true - anyOf { - changeset "${env.CHANGESET_DIR}" - triggeredBy 'TimerTrigger' - triggeredBy cause: "UserIdCause" - } - } - steps { - script { - dir('build') { - checkout scm - } - } - } - } - stage('Git Clone') { - when { - changeset "${env.CHANGESET_DIR}" - } - steps { - dir(env.BASE_DIR + 'pkg-libnftnl') { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: 'debian/1.1.7-1' ]], - userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnftnl.git']]]) - } - dir(env.BASE_DIR + 'pkg-nftables') { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: 'debian/0.9.6-1' ]], - userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-nftables.git']]]) - } - dir(env.BASE_DIR + 'pkg-conntrack-tools') { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: 'debian/1%1.4.6-1' ]], - userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-conntrack-tools.git']]]) - } - dir(env.BASE_DIR + 'pkg-libnetfilter-conntrack') { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: 'debian/1.0.8-1' ]], - userRemoteConfigs: [[url: 'https://salsa.debian.org/pkg-netfilter-team/pkg-libnetfilter-conntrack.git']]]) - } - } - } - stage('Build') { - when { - changeset "${env.CHANGESET_DIR}" - } - steps { - script { - dir(env.BASE_DIR + 'pkg-libnftnl') { - sh 'dpkg-buildpackage -uc -us -tc -b' - } - dir(env.BASE_DIR + 'pkg-nftables') { - sh """ - # we need the newly generated library for this build - sudo dpkg -i ../libnftnl*.deb - # Debian debhelper-compat level 12 works, too and - # is available in buster - sed -i 's/debhelper-compat.*/debhelper-compat (= 12),/' debian/control - dpkg-buildpackage -uc -us -tc -b - """ - } - dir(env.BASE_DIR + 'pkg-libnetfilter-conntrack') { - sh 'dpkg-buildpackage -uc -us -tc -b' - } - dir(env.BASE_DIR + 'pkg-conntrack-tools') { - sh """ - # we need the newly generated library for this build - sudo dpkg -i ../libnetfilter*.deb - dpkg-buildpackage -uc -us -tc -b - """ - } - } - } - } - } - post { - cleanup { - deleteDir() - } - success { - script { - // archive *.deb artifact on custom builds, deploy to repo otherwise - if ( isCustomBuild()) { - archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true - } - } - } - } -} +buildPackage('Netfilter', pkgList) diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy new file mode 100644 index 00000000..96d6a164 --- /dev/null +++ b/vars/buildPackage.groovy @@ -0,0 +1,124 @@ +#!/usr/bin/env groovy + +// Copyright (C) 2020 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, pkgList) { + /* Only keep the 10 most recent builds. */ + def projectProperties = [ + [$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']], + ] + + properties(projectProperties) + setDescription(description) + + node('Docker') { + stage('Define Agent') { + 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. CHANGE_ID is set only for pull requests, so it is + // safe to access the pullRequest global variable + if (env.CHANGE_ID) { + branchName = "${env.CHANGE_TARGET}".toLowerCase() + } + if (branchName.equals("master")) { + branchName = "current" + } + env.DOCKER_IMAGE = "vyos/vyos-build:" + branchName + } + } + } + pipeline { + agent { + docker { + args "--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=1006 -e GOSU_GID=1006" + image "${env.DOCKER_IMAGE}" + alwaysPull true + } + } + environment { + // get relative directory path to Jenkinsfile + BASE_DIR = currentBuild.rawBuild.parent.definition.scriptPath.replace('Jenkinsfile', '') + CHANGESET_DIR = "**/${env.BASE_DIR}*" + } + options { + disableConcurrentBuilds() + timeout(time: 60, unit: 'MINUTES') + timestamps() + } + stages { + stage('Fetch Source') { + when { + beforeOptions true + beforeAgent true + anyOf { + changeset "${env.CHANGESET_DIR}" + triggeredBy 'TimerTrigger' + triggeredBy cause: "UserIdCause" + } + } + steps { + script { + checkout scm + pkgList.each { pkg -> + dir(pkg.name) { + checkout([$class: 'GitSCM', + doGenerateSubmoduleConfigurations: false, + extensions: [[$class: 'CleanCheckout']], + branches: [[name: pkg.scmCommit]], + userRemoteConfigs: [[url: pkg.scmUrl]]]) + } + } + } + } + } + stage('Build Source') { + when { + beforeOptions true + beforeAgent true + anyOf { + changeset "${env.CHANGESET_DIR}" + triggeredBy 'TimerTrigger' + triggeredBy cause: "UserIdCause" + } + } + steps { + script { + pkgList.each { pkg -> + dir(pkg.name) { + sh pkg.buildCmd + } + } + } + } + } + } + post { + cleanup { + deleteDir() + } + success { + script { + if (isCustomBuild()) { + // archive *.deb artifact on custom builds, deploy to repo otherwise + archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true + } + } + } + } + } +} diff --git a/vars/setDescription.groovy b/vars/setDescription.groovy index a503bc28..683dc20c 100644 --- a/vars/setDescription.groovy +++ b/vars/setDescription.groovy @@ -14,12 +14,16 @@ // 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() { +def call(text = null) { def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) // build up the main description text def description = "" - description += "<h2>VyOS individual package build: " + getGitRepoName().replace('.git', '') + "</h2>" + if (text) { + description += "<h2>VyOS package build: " + text + "</h2>" + } else { + description += "<h2>VyOS package build: " + getGitRepoName().replace('.git', '') + "</h2>" + } if (isCustomBuild()) { description += "<p style='border: 3px dashed red; width: 50%;'>" |