summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-06-20 17:30:12 +0200
committerChristian Poessinger <christian@poessinger.com>2020-06-20 23:11:56 +0200
commitb213775285018e0610bc307abc08bd5db956a8c9 (patch)
tree7b19a345f1813065307ea0e9e7f3249734987b78
parent7ab2724c338f1372d0ef65f0ac3600282d13ace0 (diff)
downloadvyos-build-b213775285018e0610bc307abc08bd5db956a8c9.tar.gz
vyos-build-b213775285018e0610bc307abc08bd5db956a8c9.zip
Jenkins: lib: add programmable package build Pipeline
-rw-r--r--packages/netfilter/Jenkinsfile172
-rw-r--r--vars/buildPackage.groovy124
-rw-r--r--vars/setDescription.groovy8
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%;'>"