summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--packages/netfilter/Jenkinsfile199
2 files changed, 200 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 30ac6982..c945967e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@ packer_build/*
packer_cache/*
key/*
packages/*
+!packages/*/
testinstall*.img
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
+ }
+ }
+ }
+}