mirror of
https://github.com/vyos/vyos-build.git
synced 2025-10-01 20:28:40 +02:00
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.
This commit is contained in:
parent
5e8244675f
commit
3656075d27
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,4 +4,5 @@ packer_build/*
|
||||
packer_cache/*
|
||||
key/*
|
||||
packages/*
|
||||
!packages/*/
|
||||
testinstall*.img
|
||||
|
||||
199
packages/netfilter/Jenkinsfile
vendored
Normal file
199
packages/netfilter/Jenkinsfile
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user