From 3656075d2736b59b857ca443cb77c2a6ea2ac822 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sat, 20 Jun 2020 09:56:35 +0200 Subject: 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. --- .gitignore | 1 + packages/netfilter/Jenkinsfile | 199 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 packages/netfilter/Jenkinsfile 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 . + +@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/. +// 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 += "

VyOS individual package build: " + getGitRepoName().replace('.git', '') + "

" + + if (isCustomBuild()) { + description += "

" + description += "Build not started from official Git repository!
" + description += "
" + description += "Repository: " + getGitRepoURL() + "
" + description += "Branch: " + getGitBranchName() + "
" + description += "

" + } else { + description += "Sources taken from Git branch: " + getGitBranchName() + "
" + } + + 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 + } + } + } +} -- cgit v1.2.3