summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-06-20 09:56:35 +0200
committerChristian Poessinger <christian@poessinger.com>2020-06-20 23:11:56 +0200
commit3656075d2736b59b857ca443cb77c2a6ea2ac822 (patch)
tree845e68aa6a1d7786ff74fc54e1862b941f094460 /packages
parent5e8244675f619363b2d2b46c116b2900527157cf (diff)
downloadvyos-build-3656075d2736b59b857ca443cb77c2a6ea2ac822.tar.gz
vyos-build-3656075d2736b59b857ca443cb77c2a6ea2ac822.zip
packages: add builds for netfilter packages from upstream Debian
Instead of scattering build instructions accross individual repositories for some additional packages we want to build from latest Debian releases, this is a proof-of-concept how to integrate an individual package Pipeline into the overall VyOS build repository. A dedicated Jenkins job will be required for this Pipeline but it will only compile if files are actually changes in the directory path relevant for this components.
Diffstat (limited to 'packages')
-rw-r--r--packages/netfilter/Jenkinsfile199
1 files changed, 199 insertions, 0 deletions
diff --git a/packages/netfilter/Jenkinsfile b/packages/netfilter/Jenkinsfile
new file mode 100644
index 00000000..9554f6e3
--- /dev/null
+++ b/packages/netfilter/Jenkinsfile
@@ -0,0 +1,199 @@
+// 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/>.
+
+@NonCPS
+
+def getGitBranchName() {
+ def branch = scm.branches[0].name
+ return branch.split('/')[-1]
+}
+
+def getGitRepoURL() {
+ return scm.userRemoteConfigs[0].url
+}
+
+def getGitRepoName() {
+ return getGitRepoURL().split('/').last()
+}
+
+// Returns true if this is a custom build launched on any project fork.
+// Returns false if this is build from git@github.com:vyos/<reponame>.
+// <reponame> can be e.g. vyos-1x.git or vyatta-op.git
+def isCustomBuild() {
+ // GitHub organisation base URL
+ def gitURI = 'git@github.com:vyos/' + getGitRepoName()
+ def httpURI = 'https://github.com/vyos/' + getGitRepoName()
+
+ return !((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) || env.CHANGE_ID
+}
+
+def setDescription() {
+ 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 (isCustomBuild()) {
+ description += "<p style='border: 3px dashed red; width: 50%;'>"
+ description += "<b>Build not started from official Git repository!</b><br>"
+ description += "<br>"
+ description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>"
+ description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>"
+ description += "</p>"
+ } else {
+ description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>"
+ }
+
+ item.setDescription(description)
+ item.save()
+}
+
+/* Only keep the 10 most recent builds. */
+def projectProperties = [
+ [$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '10']],
+]
+
+properties(projectProperties)
+setDescription()
+
+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 {
+ BASE_DIR = "packages/netfilter/"
+ CHANGESET_DIR = "**/${env.BASE_DIR}*"
+ }
+ options {
+ timeout(time: 60, unit: 'MINUTES')
+ timestamps()
+ }
+ stages {
+ stage('Fetch') {
+ when {
+ changeset "${env.CHANGESET_DIR}"
+ }
+ 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 {
+ // archive *.deb artifact on custom builds, deploy to repo otherwise
+ if ( isCustomBuild()) {
+ archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true
+ }
+ }
+ }
+}